Show More
@@ -277,78 +277,9 b' def rebase(ui, repo, **opts):' | |||||
277 | return abort(repo, originalwd, target, state, |
|
277 | return abort(repo, originalwd, target, state, | |
278 | activebookmark=activebookmark) |
|
278 | activebookmark=activebookmark) | |
279 | else: |
|
279 | else: | |
280 | if srcf and basef: |
|
280 | dest, rebaseset = _definesets(ui, repo, destf, srcf, basef, revf) | |
281 | raise error.Abort(_('cannot specify both a ' |
|
281 | if dest is None: | |
282 | 'source and a base')) |
|
282 | return _nothingtorebase() | |
283 | if revf and basef: |
|
|||
284 | raise error.Abort(_('cannot specify both a ' |
|
|||
285 | 'revision and a base')) |
|
|||
286 | if revf and srcf: |
|
|||
287 | raise error.Abort(_('cannot specify both a ' |
|
|||
288 | 'revision and a source')) |
|
|||
289 |
|
||||
290 | cmdutil.checkunfinished(repo) |
|
|||
291 | cmdutil.bailifchanged(repo) |
|
|||
292 |
|
||||
293 | if destf: |
|
|||
294 | dest = scmutil.revsingle(repo, destf) |
|
|||
295 | else: |
|
|||
296 | dest = repo[_destrebase(repo)] |
|
|||
297 | destf = str(dest) |
|
|||
298 |
|
||||
299 | if revf: |
|
|||
300 | rebaseset = scmutil.revrange(repo, revf) |
|
|||
301 | if not rebaseset: |
|
|||
302 | ui.status(_('empty "rev" revision set - ' |
|
|||
303 | 'nothing to rebase\n')) |
|
|||
304 | return _nothingtorebase() |
|
|||
305 | elif srcf: |
|
|||
306 | src = scmutil.revrange(repo, [srcf]) |
|
|||
307 | if not src: |
|
|||
308 | ui.status(_('empty "source" revision set - ' |
|
|||
309 | 'nothing to rebase\n')) |
|
|||
310 | return _nothingtorebase() |
|
|||
311 | rebaseset = repo.revs('(%ld)::', src) |
|
|||
312 | assert rebaseset |
|
|||
313 | else: |
|
|||
314 | base = scmutil.revrange(repo, [basef or '.']) |
|
|||
315 | if not base: |
|
|||
316 | ui.status(_('empty "base" revision set - ' |
|
|||
317 | "can't compute rebase set\n")) |
|
|||
318 | return _nothingtorebase() |
|
|||
319 | commonanc = repo.revs('ancestor(%ld, %d)', base, dest).first() |
|
|||
320 | if commonanc is not None: |
|
|||
321 | rebaseset = repo.revs('(%d::(%ld) - %d)::', |
|
|||
322 | commonanc, base, commonanc) |
|
|||
323 | else: |
|
|||
324 | rebaseset = [] |
|
|||
325 |
|
||||
326 | if not rebaseset: |
|
|||
327 | # transform to list because smartsets are not comparable to |
|
|||
328 | # lists. This should be improved to honor laziness of |
|
|||
329 | # smartset. |
|
|||
330 | if list(base) == [dest.rev()]: |
|
|||
331 | if basef: |
|
|||
332 | ui.status(_('nothing to rebase - %s is both "base"' |
|
|||
333 | ' and destination\n') % dest) |
|
|||
334 | else: |
|
|||
335 | ui.status(_('nothing to rebase - working directory ' |
|
|||
336 | 'parent is also destination\n')) |
|
|||
337 | elif not repo.revs('%ld - ::%d', base, dest): |
|
|||
338 | if basef: |
|
|||
339 | ui.status(_('nothing to rebase - "base" %s is ' |
|
|||
340 | 'already an ancestor of destination ' |
|
|||
341 | '%s\n') % |
|
|||
342 | ('+'.join(str(repo[r]) for r in base), |
|
|||
343 | dest)) |
|
|||
344 | else: |
|
|||
345 | ui.status(_('nothing to rebase - working ' |
|
|||
346 | 'directory parent is already an ' |
|
|||
347 | 'ancestor of destination %s\n') % dest) |
|
|||
348 | else: # can it happen? |
|
|||
349 | ui.status(_('nothing to rebase from %s to %s\n') % |
|
|||
350 | ('+'.join(str(repo[r]) for r in base), dest)) |
|
|||
351 | return _nothingtorebase() |
|
|||
352 |
|
283 | |||
353 | allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt) |
|
284 | allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt) | |
354 | if (not (keepf or allowunstable) |
|
285 | if (not (keepf or allowunstable) | |
@@ -591,6 +522,78 b' def rebase(ui, repo, **opts):' | |||||
591 | finally: |
|
522 | finally: | |
592 | release(lock, wlock) |
|
523 | release(lock, wlock) | |
593 |
|
524 | |||
|
525 | def _definesets(ui, repo, destf=None, srcf=None, basef=None, revf=[]): | |||
|
526 | """use revisions argument to define destination and rebase set | |||
|
527 | """ | |||
|
528 | if srcf and basef: | |||
|
529 | raise error.Abort(_('cannot specify both a source and a base')) | |||
|
530 | if revf and basef: | |||
|
531 | raise error.Abort(_('cannot specify both a revision and a base')) | |||
|
532 | if revf and srcf: | |||
|
533 | raise error.Abort(_('cannot specify both a revision and a source')) | |||
|
534 | ||||
|
535 | cmdutil.checkunfinished(repo) | |||
|
536 | cmdutil.bailifchanged(repo) | |||
|
537 | ||||
|
538 | if destf: | |||
|
539 | dest = scmutil.revsingle(repo, destf) | |||
|
540 | else: | |||
|
541 | dest = repo[_destrebase(repo)] | |||
|
542 | destf = str(dest) | |||
|
543 | ||||
|
544 | if revf: | |||
|
545 | rebaseset = scmutil.revrange(repo, revf) | |||
|
546 | if not rebaseset: | |||
|
547 | ui.status(_('empty "rev" revision set - nothing to rebase\n')) | |||
|
548 | return None, None | |||
|
549 | elif srcf: | |||
|
550 | src = scmutil.revrange(repo, [srcf]) | |||
|
551 | if not src: | |||
|
552 | ui.status(_('empty "source" revision set - nothing to rebase\n')) | |||
|
553 | return None, None | |||
|
554 | rebaseset = repo.revs('(%ld)::', src) | |||
|
555 | assert rebaseset | |||
|
556 | else: | |||
|
557 | base = scmutil.revrange(repo, [basef or '.']) | |||
|
558 | if not base: | |||
|
559 | ui.status(_('empty "base" revision set - ' | |||
|
560 | "can't compute rebase set\n")) | |||
|
561 | return None, None | |||
|
562 | commonanc = repo.revs('ancestor(%ld, %d)', base, dest).first() | |||
|
563 | if commonanc is not None: | |||
|
564 | rebaseset = repo.revs('(%d::(%ld) - %d)::', | |||
|
565 | commonanc, base, commonanc) | |||
|
566 | else: | |||
|
567 | rebaseset = [] | |||
|
568 | ||||
|
569 | if not rebaseset: | |||
|
570 | # transform to list because smartsets are not comparable to | |||
|
571 | # lists. This should be improved to honor laziness of | |||
|
572 | # smartset. | |||
|
573 | if list(base) == [dest.rev()]: | |||
|
574 | if basef: | |||
|
575 | ui.status(_('nothing to rebase - %s is both "base"' | |||
|
576 | ' and destination\n') % dest) | |||
|
577 | else: | |||
|
578 | ui.status(_('nothing to rebase - working directory ' | |||
|
579 | 'parent is also destination\n')) | |||
|
580 | elif not repo.revs('%ld - ::%d', base, dest): | |||
|
581 | if basef: | |||
|
582 | ui.status(_('nothing to rebase - "base" %s is ' | |||
|
583 | 'already an ancestor of destination ' | |||
|
584 | '%s\n') % | |||
|
585 | ('+'.join(str(repo[r]) for r in base), | |||
|
586 | dest)) | |||
|
587 | else: | |||
|
588 | ui.status(_('nothing to rebase - working ' | |||
|
589 | 'directory parent is already an ' | |||
|
590 | 'ancestor of destination %s\n') % dest) | |||
|
591 | else: # can it happen? | |||
|
592 | ui.status(_('nothing to rebase from %s to %s\n') % | |||
|
593 | ('+'.join(str(repo[r]) for r in base), dest)) | |||
|
594 | return None, None | |||
|
595 | return dest, rebaseset | |||
|
596 | ||||
594 | def externalparent(repo, state, targetancestors): |
|
597 | def externalparent(repo, state, targetancestors): | |
595 | """Return the revision that should be used as the second parent |
|
598 | """Return the revision that should be used as the second parent | |
596 | when the revisions in state is collapsed on top of targetancestors. |
|
599 | when the revisions in state is collapsed on top of targetancestors. |
General Comments 0
You need to be logged in to leave comments.
Login now