817 userrevs = list(repo.revs(opts.get(r'auto_orphans'))) |
817 userrevs = list(repo.revs(opts.get(r'auto_orphans'))) |
818 opts[r'rev'] = [revsetlang.formatspec('%ld and orphan()', userrevs)] |
818 opts[r'rev'] = [revsetlang.formatspec('%ld and orphan()', userrevs)] |
819 opts[r'dest'] = '_destautoorphanrebase(SRC)' |
819 opts[r'dest'] = '_destautoorphanrebase(SRC)' |
820 |
820 |
821 if dryrun: |
821 if dryrun: |
822 return _dryrunrebase(ui, repo, **opts) |
822 return _dryrunrebase(ui, repo, opts) |
823 elif inmemory: |
823 elif inmemory: |
824 try: |
824 try: |
825 # in-memory merge doesn't support conflicts, so if we hit any, abort |
825 # in-memory merge doesn't support conflicts, so if we hit any, abort |
826 # and re-run as an on-disk merge. |
826 # and re-run as an on-disk merge. |
827 overrides = {('rebase', 'singletransaction'): True} |
827 overrides = {('rebase', 'singletransaction'): True} |
828 with ui.configoverride(overrides, 'rebase'): |
828 with ui.configoverride(overrides, 'rebase'): |
829 return _dorebase(ui, repo, inmemory=inmemory, **opts) |
829 return _dorebase(ui, repo, opts, inmemory=inmemory) |
830 except error.InMemoryMergeConflictsError: |
830 except error.InMemoryMergeConflictsError: |
831 ui.warn(_('hit merge conflicts; re-running rebase without in-memory' |
831 ui.warn(_('hit merge conflicts; re-running rebase without in-memory' |
832 ' merge\n')) |
832 ' merge\n')) |
833 _dorebase(ui, repo, abort=True) |
833 _dorebase(ui, repo, {r'abort': True}) |
834 return _dorebase(ui, repo, inmemory=False, **opts) |
834 return _dorebase(ui, repo, opts, inmemory=False) |
835 else: |
835 else: |
836 return _dorebase(ui, repo, **opts) |
836 return _dorebase(ui, repo, opts) |
837 |
837 |
838 def _dryrunrebase(ui, repo, **opts): |
838 def _dryrunrebase(ui, repo, opts): |
839 rbsrt = rebaseruntime(repo, ui, inmemory=True, |
839 rbsrt = rebaseruntime(repo, ui, inmemory=True, |
840 opts=pycompat.byteskwargs(opts)) |
840 opts=pycompat.byteskwargs(opts)) |
841 with repo.wlock(), repo.lock(): |
841 with repo.wlock(), repo.lock(): |
842 try: |
842 try: |
843 overrides = {('rebase', 'singletransaction'): True} |
843 overrides = {('rebase', 'singletransaction'): True} |
844 with ui.configoverride(overrides, 'rebase'): |
844 with ui.configoverride(overrides, 'rebase'): |
845 _origrebase(ui, repo, rbsrt, inmemory=True, |
845 _origrebase(ui, repo, opts, rbsrt, inmemory=True, |
846 leaveunfinished=True, **opts) |
846 leaveunfinished=True) |
847 except error.InMemoryMergeConflictsError: |
847 except error.InMemoryMergeConflictsError: |
848 ui.status(_('hit a merge conflict\n')) |
848 ui.status(_('hit a merge conflict\n')) |
849 return 1 |
849 return 1 |
850 else: |
850 else: |
851 ui.status(_('there will be no conflict, you can rebase\n')) |
851 ui.status(_('there will be no conflict, you can rebase\n')) |
853 finally: |
853 finally: |
854 # no need to store backup in case of dryrun |
854 # no need to store backup in case of dryrun |
855 rbsrt._prepareabortorcontinue(isabort=True, backup=False, |
855 rbsrt._prepareabortorcontinue(isabort=True, backup=False, |
856 suppwarns=True) |
856 suppwarns=True) |
857 |
857 |
858 def _dorebase(ui, repo, inmemory=False, **opts): |
858 def _dorebase(ui, repo, opts, inmemory=False): |
859 rbsrt = rebaseruntime(repo, ui, inmemory, pycompat.byteskwargs(opts)) |
859 rbsrt = rebaseruntime(repo, ui, inmemory, pycompat.byteskwargs(opts)) |
860 return _origrebase(ui, repo, rbsrt, inmemory=inmemory, **opts) |
860 return _origrebase(ui, repo, opts, rbsrt, inmemory=inmemory) |
861 |
861 |
862 def _origrebase(ui, repo, rbsrt, inmemory=False, leaveunfinished=False, **opts): |
862 def _origrebase(ui, repo, opts, rbsrt, inmemory=False, leaveunfinished=False): |
863 opts = pycompat.byteskwargs(opts) |
863 opts = pycompat.byteskwargs(opts) |
864 with repo.wlock(), repo.lock(): |
864 with repo.wlock(), repo.lock(): |
865 # Validate input and define rebasing points |
865 # Validate input and define rebasing points |
866 destf = opts.get('dest', None) |
866 destf = opts.get('dest', None) |
867 srcf = opts.get('source', None) |
867 srcf = opts.get('source', None) |