Show More
@@ -447,8 +447,7 b' def updatestandinsbymatch(repo, match):' | |||
|
447 | 447 | # (2) aborting when standins are matched by "match", |
|
448 | 448 | # because automated committing may specify them directly |
|
449 | 449 | # |
|
450 |
if getattr(repo, "_isr |
|
|
451 | getattr(repo, "_istransplanting", False): | |
|
450 | if getattr(repo, "_istransplanting", False): | |
|
452 | 451 | return match |
|
453 | 452 | |
|
454 | 453 | # Case 1: user calls commit with no specific files or |
@@ -537,3 +536,24 b' def updatestandinsbymatch(repo, match):' | |||
|
537 | 536 | match.matchfn = matchfn |
|
538 | 537 | |
|
539 | 538 | return match |
|
539 | ||
|
540 | class automatedcommithook(object): | |
|
541 | '''Statefull hook to update standins at the 1st commit of resuming | |
|
542 | ||
|
543 | For efficiency, updating standins in the working directory should | |
|
544 | be avoided while automated committing (like rebase, transplant and | |
|
545 | so on), because they should be updated before committing. | |
|
546 | ||
|
547 | But the 1st commit of resuming automated committing (e.g. ``rebase | |
|
548 | --continue``) should update them, because largefiles may be | |
|
549 | modified manually. | |
|
550 | ''' | |
|
551 | def __init__(self, resuming): | |
|
552 | self.resuming = resuming | |
|
553 | ||
|
554 | def __call__(self, repo, match): | |
|
555 | if self.resuming: | |
|
556 | self.resuming = False # avoids updating at subsequent commits | |
|
557 | return updatestandinsbymatch(repo, match) | |
|
558 | else: | |
|
559 | return match |
@@ -790,11 +790,14 b' def hgclone(orig, ui, opts, *args, **kwa' | |||
|
790 | 790 | return result |
|
791 | 791 | |
|
792 | 792 | def overriderebase(orig, ui, repo, **opts): |
|
793 | resuming = opts.get('continue') | |
|
794 | repo._lfcommithooks.append(lfutil.automatedcommithook(resuming)) | |
|
793 | 795 | repo._isrebasing = True |
|
794 | 796 | try: |
|
795 | 797 | return orig(ui, repo, **opts) |
|
796 | 798 | finally: |
|
797 | 799 | repo._isrebasing = False |
|
800 | repo._lfcommithooks.pop() | |
|
798 | 801 | |
|
799 | 802 | def overridearchive(orig, repo, dest, node, kind, decode=True, matchfn=None, |
|
800 | 803 | prefix=None, mtime=None, subrepos=None): |
@@ -509,8 +509,25 b' it is aborted by conflict.' | |||
|
509 | 509 | $ cat large1 |
|
510 | 510 | large1 in #1 |
|
511 | 511 | |
|
512 | $ hg rebase -q --abort | |
|
513 | rebase aborted | |
|
512 | Test that rebase updates standins for manually modified largefiles at | |
|
513 | the 1st commit of resuming. | |
|
514 | ||
|
515 | $ echo "manually modified before 'hg rebase --continue'" > large1 | |
|
516 | $ hg resolve -m normal1 | |
|
517 | (no more unresolved files) | |
|
518 | $ hg rebase --continue --config ui.interactive=True <<EOF | |
|
519 | > c | |
|
520 | > EOF | |
|
521 | local changed .hglf/large1 which remote deleted | |
|
522 | use (c)hanged version or (d)elete? c | |
|
523 | ||
|
524 | $ hg diff -c "tip~1" --nodates .hglf/large1 | grep '^[+-][0-9a-z]' | |
|
525 | -e5bb990443d6a92aaf7223813720f7566c9dd05b | |
|
526 | +8a4f783556e7dea21139ca0466eafce954c75c13 | |
|
527 | $ rm -f large1 | |
|
528 | $ hg update -q -C tip | |
|
529 | $ cat large1 | |
|
530 | manually modified before 'hg rebase --continue' | |
|
514 | 531 | |
|
515 | 532 | Test that transplant updates largefiles, of which standins are safely |
|
516 | 533 | changed, even if it is aborted by conflict of other. |
General Comments 0
You need to be logged in to leave comments.
Login now