##// END OF EJS Templates
rebase: simplify set generation
Matt Mackall -
r15271:84d4a4ce default
parent child Browse files
Show More
@@ -15,7 +15,7 b' http://mercurial.selenic.com/wiki/Rebase'
15 '''
15 '''
16
16
17 from mercurial import hg, util, repair, merge, cmdutil, commands, bookmarks
17 from mercurial import hg, util, repair, merge, cmdutil, commands, bookmarks
18 from mercurial import extensions, patch, scmutil
18 from mercurial import extensions, patch
19 from mercurial.commands import templateopts
19 from mercurial.commands import templateopts
20 from mercurial.node import nullrev
20 from mercurial.node import nullrev
21 from mercurial.lock import release
21 from mercurial.lock import release
@@ -184,31 +184,18 b' def rebase(ui, repo, **opts):'
184 else:
184 else:
185 dest = repo[destf]
185 dest = repo[destf]
186
186
187 rebaseset = None
187 if revf:
188 if srcf:
188 revgen = repo.set('%lr', revf)
189 revsetargs = ('(%r)::', srcf)
189 elif srcf:
190 elif revf:
190 revgen = repo.set('(%r)::', srcf)
191 rebaseset = scmutil.revrange(repo, revf)
192 if not keepf and rebaseset:
193 try:
194 repo.set('children(%ld) - %ld',
195 rebaseset, rebaseset).next()
196 except StopIteration:
197 pass # empty revset is what we look for
198 else:
199 msg = _("can't remove original changesets with"
200 " unrebased descendants")
201 hint = _('use --keep to keep original changesets')
202 raise util.Abort(msg, hint=hint)
203 else:
191 else:
204 base = basef or '.'
192 base = basef or '.'
205 revsetargs = ('(children(ancestor(%r, %d)) and ::(%r))::',
193 revgen = repo.set('(children(ancestor(%r, %d)) and ::(%r))::',
206 base, dest, base)
194 base, dest, base)
207 if rebaseset is None:
195
208 rebaseset = [c.rev() for c in repo.set(*revsetargs)]
196 rebaseset = [c.rev() for c in revgen]
209 if rebaseset:
197
210 result = buildstate(repo, dest, rebaseset, detachf)
198 if not rebaseset:
211 else:
212 repo.ui.debug('base is ancestor of destination')
199 repo.ui.debug('base is ancestor of destination')
213 result = None
200 result = None
214 if not result:
201 if not result:
@@ -581,7 +568,7 b' def buildstate(repo, dest, rebaseset, de'
581 if commonbase == dest:
568 if commonbase == dest:
582 samebranch = root.branch() == dest.branch()
569 samebranch = root.branch() == dest.branch()
583 if samebranch and root in dest.children():
570 if samebranch and root in dest.children():
584 repo.ui.debug(_('source is a child of destination'))
571 repo.ui.debug('source is a child of destination')
585 return None
572 return None
586 # rebase on ancestor, force detach
573 # rebase on ancestor, force detach
587 detach = True
574 detach = True
General Comments 0
You need to be logged in to leave comments. Login now