comparison hgext/rebase.py @ 44053:894c91c2e363

rebase: delete seemingly unnecessary needupdate() This seemed to be about checking that the user hasn't updated away when we asked them to resolve merge conflicts. These days we call `cmdutil.checkunfinished()` and refuse to update, so the user shouldn't be able to get into this state. `test-rebase-interruptions.t` actually has some tests where it disables the rebase extension in order to be allowed to do some of these updates. That still passes, but I wouldn't personally haved cared if that failed. Differential Revision: https://phab.mercurial-scm.org/D7825
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 10 Jan 2020 15:47:39 -0800
parents 436d106de670
children 2f0a44c69e07
comparison
equal deleted inserted replaced
44052:b74270da5eee 44053:894c91c2e363
796 updateifonnodes.update(self.destmap.values()) 796 updateifonnodes.update(self.destmap.values())
797 updateifonnodes.add(self.originalwd) 797 updateifonnodes.add(self.originalwd)
798 shouldupdate = repo[b'.'].rev() in updateifonnodes 798 shouldupdate = repo[b'.'].rev() in updateifonnodes
799 799
800 # Update away from the rebase if necessary 800 # Update away from the rebase if necessary
801 if shouldupdate or needupdate(repo, self.state): 801 if shouldupdate:
802 mergemod.update( 802 mergemod.update(
803 repo, self.originalwd, branchmerge=False, force=True 803 repo, self.originalwd, branchmerge=False, force=True
804 ) 804 )
805 805
806 # Strip from the first rebased revision 806 # Strip from the first rebased revision
1054 b'either enable obsmarkers to allow unstable ' 1054 b'either enable obsmarkers to allow unstable '
1055 b'revisions or use --keep to keep original ' 1055 b'revisions or use --keep to keep original '
1056 b'changesets' 1056 b'changesets'
1057 ), 1057 ),
1058 ) 1058 )
1059 if needupdate(repo, rbsrt.state): 1059 # update to the current working revision
1060 # update to the current working revision 1060 # to clear interrupted merge
1061 # to clear interrupted merge 1061 hg.updaterepo(repo, rbsrt.originalwd, overwrite=True)
1062 hg.updaterepo(repo, rbsrt.originalwd, overwrite=True)
1063 rbsrt._finishrebase() 1062 rbsrt._finishrebase()
1064 return 0 1063 return 0
1065 elif inmemory: 1064 elif inmemory:
1066 try: 1065 try:
1067 # in-memory merge doesn't support conflicts, so if we hit any, abort 1066 # in-memory merge doesn't support conflicts, so if we hit any, abort
1922 if tr: 1921 if tr:
1923 tr.removefilegenerator(b'rebasestate') 1922 tr.removefilegenerator(b'rebasestate')
1924 repo.vfs.unlinkpath(b"rebasestate", ignoremissing=True) 1923 repo.vfs.unlinkpath(b"rebasestate", ignoremissing=True)
1925 1924
1926 1925
1927 def needupdate(repo, state):
1928 '''check whether we should `update --clean` away from a merge, or if
1929 somehow the working dir got forcibly updated, e.g. by older hg'''
1930 parents = [p.rev() for p in repo[None].parents()]
1931
1932 # Are we in a merge state at all?
1933 if len(parents) < 2:
1934 return False
1935
1936 # We should be standing on the first as-of-yet unrebased commit.
1937 firstunrebased = min(
1938 [old for old, new in pycompat.iteritems(state) if new == nullrev]
1939 )
1940 if firstunrebased in parents:
1941 return True
1942
1943 return False
1944
1945
1946 def sortsource(destmap): 1926 def sortsource(destmap):
1947 """yield source revisions in an order that we only rebase things once 1927 """yield source revisions in an order that we only rebase things once
1948 1928
1949 If source and destination overlaps, we should filter out revisions 1929 If source and destination overlaps, we should filter out revisions
1950 depending on other revisions which hasn't been rebased yet. 1930 depending on other revisions which hasn't been rebased yet.