# HG changeset patch # User Jun Wu <qu...@fb.com> # Date 1499571514 25200 # Sat Jul 08 20:38:34 2017 -0700 # Node ID 22d54f1e4c09d8fb68ea897afcdd0b705db94b5a # Parent 49d1672e7567f2a16c5ce9afa64babe08891718f # Available At https://bitbucket.org/quark-zju/hg-draft # hg pull https://bitbucket.org/quark-zju/hg-draft -r 22d54f1e4c09 rebase: remove revprecursor and revpruned states
They are no longer necessary to make rebase behavior correct. Therefore remove them to make the code cleaner and easier to reason about. diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -61,10 +61,8 @@ templateopts = cmdutil.templateopts # Indicates that a revision needs to be rebased revtodo = -1 -nullmerge = -2 -revignored = -3 # legacy revstates no longer needed in current code -# -4: revprecursor, -5: revpruned -legacystates = {'-4', '-5'} +# -2: nullmerge, -3: revignored, -4: revprecursor, -5: revpruned +legacystates = {'-2', '-3', '-4', '-5'} cmdtable = {} @@ -234,6 +232,4 @@ class rebaseruntime(object): if newrev in legacystates: continue - if newrev in (str(nullmerge), str(revignored)): - state[repo[oldrev].rev()] = int(newrev) elif newrev == nullid: state[repo[oldrev].rev()] = revtodo @@ -440,8 +436,4 @@ class rebaseruntime(object): self.state[rev] = p1 ui.debug('next revision set to %s\n' % p1) - elif self.state[rev] == nullmerge: - pass - elif self.state[rev] == revignored: - pass else: ui.status(_('already rebased %s as %s\n') % @@ -464,5 +456,5 @@ class rebaseruntime(object): for rebased in self.state: if rebased not in self.skipped and\ - self.state[rebased] > nullmerge: + self.state[rebased] >= revtodo: commitmsg += '\n* %s' % repo[rebased].description() editopt = True @@ -480,5 +472,5 @@ class rebaseruntime(object): newrev = repo[newnode].rev() for oldrev in self.state.iterkeys(): - if self.state[oldrev] > nullmerge: + if self.state[oldrev] >= revtodo: self.state[oldrev] = newrev @@ -1231,5 +1223,4 @@ def buildstate(repo, dest, rebaseset, co roots.sort() state = dict.fromkeys(rebaseset, revtodo) - detachset = set() emptyrebase = True for root in roots: @@ -1253,45 +1244,4 @@ def buildstate(repo, dest, rebaseset, co emptyrebase = False repo.ui.debug('rebase onto %s starting from %s\n' % (dest, root)) - # Rebase tries to turn <dest> into a parent of <root> while - # preserving the number of parents of rebased changesets: - # - # - A changeset with a single parent will always be rebased as a - # changeset with a single parent. - # - # - A merge will be rebased as merge unless its parents are both - # ancestors of <dest> or are themselves in the rebased set and - # pruned while rebased. - # - # If one parent of <root> is an ancestor of <dest>, the rebased - # version of this parent will be <dest>. This is always true with - # --base option. - # - # Otherwise, we need to *replace* the original parents with - # <dest>. This "detaches" the rebased set from its former location - # and rebases it onto <dest>. Changes introduced by ancestors of - # <root> not common with <dest> (the detachset, marked as - # nullmerge) are "removed" from the rebased changesets. - # - # - If <root> has a single parent, set it to <dest>. - # - # - If <root> is a merge, we cannot decide which parent to - # replace, the rebase operation is not clearly defined. - # - # The table below sums up this behavior: - # - # +------------------+----------------------+-------------------------+ - # | | one parent | merge | - # +------------------+----------------------+-------------------------+ - # | parent in | new parent is <dest> | parents in ::<dest> are | - # | ::<dest> | | remapped to <dest> | - # +------------------+----------------------+-------------------------+ - # | unrelated source | new parent is <dest> | ambiguous, abort | - # +------------------+----------------------+-------------------------+ - # - # The actual abort is handled by `defineparents` - if len(root.parents()) <= 1: - # ancestors of <root> not ancestors of <dest> - detachset.update(repo.changelog.findmissingrevs([commonbase.rev()], - [root.rev()])) if emptyrebase: return None @@ -1301,16 +1251,4 @@ def buildstate(repo, dest, rebaseset, co if parents and all((state.get(p) == p for p in parents)): state[rev] = rev - for r in detachset: - if r not in state: - state[r] = nullmerge - if len(roots) > 1: - # If we have multiple roots, we may have "hole" in the rebase set. - # Rebase roots that descend from those "hole" should not be detached as - # other root are. We use the special `revignored` to inform rebase that - # the revision should be ignored but that `defineparents` should search - # a rebase destination that make sense regarding rebased topology. - rebasedomain = set(repo.revs('%ld::%ld', rebaseset, rebaseset)) - for ignored in set(rebasedomain) - set(rebaseset): - state[ignored] = revignored unfi = repo.unfiltered() for r in obsoletenotrebased: _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel