comparison tests/test-largefiles.t @ 22288:4e2559841d6c

largefiles: update largefiles even if rebase is aborted by conflict Before this patch, largefiles in the working directory aren't updated correctly, if rebase is aborted by conflict. This prevents users from viewing appropriate largefiles while resolving conflicts. While rebase, largefiles in the working directory are updated only at successful committing in the special code path of "lfilesrepo.commit()". To update largefiles even if rebase is aborted by conflict, this patch centralizes the logic of updating largefiles in the working directory into the "mergeupdate" wrapping "merge.update". This is a temporary way to fix with less changes. For fundamental resolution of this kind of problems in the future, largefiles in the working directory should be updated with other (normal) files simultaneously while "merge.update" execution: maybe by hooking "applyupdates". "Action list based updating" introduced by hooking "applyupdates" will also improve performance of updating, because it automatically decreases target files to be checked. Just after this patch, there are some improper things in "Case 0" code path of "lfilesrepo.commit()": - "updatelfiles" invocation is redundant for rebase - detailed comment doesn't meet to rebase behavior These will be resolved after the subsequent patch for transplant, because this code path is shared with transplant. Even though replacing "merge.update" in rebase extension by "hg.merge" can also avoid this problem, this patch chooses centralizing the logic into "mergeupdate", because: - "merge.update" invocation in rebase extension can't be directly replaced by "hg.merge", because: - rebase requires some extra arguments, which "hg.merge" doesn't take (e.g. "ancestor") - rebase doesn't require statistics information forcibly displayed in "hg.merge" - introducing "mergeupdate" can resolve also problem of some other code paths directly using "merge.update" largefiles in the working directory aren't updated regardless of the result of commands below, before this patch: - backout (for revisions other than the parent revision of the working directory without "--merge") - graft - histedit (for revisions other than the parent of the working directory When "partial" is specified, "merge.update" doesn't update dirstate entries for standins, even though standins themselves are updated. In this case, "normallookup" should be used to mark largefiles as "possibly dirty" forcibly, because applying "normal" on lfdirstate treats them as "clean" unexpectedly. This is reason why "normallookup=partial" is specified for "lfcommands.updatelfiles". This patch doesn't test "hg rebase --continue", because it doesn't work correctly if largefiles in the working directory are modified manually while resolving conflicts. This will be fixed in the next step of refactoring for largefiles. All changes of tests/*.t files other than test-largefiles-update.t in this patch come from invoking "updatelfiles" not after but before statistics output of "hg.update", "hg.clean" and "hg.merge".
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Sun, 24 Aug 2014 23:47:26 +0900
parents 55308ab8117c
children 18b3869179f9
comparison
equal deleted inserted replaced
22287:f3ac9677fa2b 22288:4e2559841d6c
1601 adding f 1601 adding f
1602 Invoking status precommit hook 1602 Invoking status precommit hook
1603 A f 1603 A f
1604 created new head 1604 created new head
1605 $ hg merge -r 6 1605 $ hg merge -r 6
1606 getting changed largefiles
1607 large3: largefile 7838695e10da2bb75ac1156565f40a2595fa2fa0 not available from file:/*/$TESTTMP/d (glob)
1608 1 largefiles updated, 0 removed
1606 4 files updated, 0 files merged, 0 files removed, 0 files unresolved 1609 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
1607 (branch merge, don't forget to commit) 1610 (branch merge, don't forget to commit)
1608 getting changed largefiles
1609 large3: largefile 7838695e10da2bb75ac1156565f40a2595fa2fa0 not available from file:/*/$TESTTMP/d (glob)
1610 1 largefiles updated, 0 removed
1611 1611
1612 $ hg rollback -q 1612 $ hg rollback -q
1613 $ hg up -Cq 1613 $ hg up -Cq
1614 1614
1615 Pulling 0 revisions with --all-largefiles should not fetch for all revisions 1615 Pulling 0 revisions with --all-largefiles should not fetch for all revisions
1659 $ hg merge 1659 $ hg merge
1660 largefile sub/large4 has a merge conflict 1660 largefile sub/large4 has a merge conflict
1661 ancestor was 971fb41e78fea4f8e0ba5244784239371cb00591 1661 ancestor was 971fb41e78fea4f8e0ba5244784239371cb00591
1662 keep (l)ocal d846f26643bfa8ec210be40cc93cc6b7ff1128ea or 1662 keep (l)ocal d846f26643bfa8ec210be40cc93cc6b7ff1128ea or
1663 take (o)ther e166e74c7303192238d60af5a9c4ce9bef0b7928? l 1663 take (o)ther e166e74c7303192238d60af5a9c4ce9bef0b7928? l
1664 getting changed largefiles
1665 1 largefiles updated, 0 removed
1664 3 files updated, 1 files merged, 0 files removed, 0 files unresolved 1666 3 files updated, 1 files merged, 0 files removed, 0 files unresolved
1665 (branch merge, don't forget to commit) 1667 (branch merge, don't forget to commit)
1666 getting changed largefiles
1667 1 largefiles updated, 0 removed
1668 $ hg commit -m "Merge repos e and f" 1668 $ hg commit -m "Merge repos e and f"
1669 Invoking status precommit hook 1669 Invoking status precommit hook
1670 M normal3 1670 M normal3
1671 M sub/normal4 1671 M sub/normal4
1672 M sub2/large6 1672 M sub2/large6
1693 $ hg commit -m 'some change' 1693 $ hg commit -m 'some change'
1694 Invoking status precommit hook 1694 Invoking status precommit hook
1695 M normal3 1695 M normal3
1696 created new head 1696 created new head
1697 $ hg merge 1697 $ hg merge
1698 getting changed largefiles
1699 1 largefiles updated, 0 removed
1698 1 files updated, 0 files merged, 0 files removed, 0 files unresolved 1700 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1699 (branch merge, don't forget to commit) 1701 (branch merge, don't forget to commit)
1700 getting changed largefiles
1701 1 largefiles updated, 0 removed
1702 $ hg status 1702 $ hg status
1703 M large 1703 M large
1704 1704
1705 - make sure update of merge with removed largefiles fails as expected 1705 - make sure update of merge with removed largefiles fails as expected
1706 $ hg rm sub2/large6 1706 $ hg rm sub2/large6
1740 adding changesets 1740 adding changesets
1741 adding manifests 1741 adding manifests
1742 adding file changes 1742 adding file changes
1743 added 1 changesets with 2 changes to 2 files 1743 added 1 changesets with 2 changes to 2 files
1744 getting changed largefiles 1744 getting changed largefiles
1745 1 largefiles updated, 0 removed 1745 0 largefiles updated, 0 removed
1746 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' 1746 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1747 9:598410d3eb9a modify normal file largefile in repo d 1747 9:598410d3eb9a modify normal file largefile in repo d
1748 8:a381d2c8c80e modify normal file and largefile in repo b 1748 8:a381d2c8c80e modify normal file and largefile in repo b
1749 7:daea875e9014 add/edit more largefiles 1749 7:daea875e9014 add/edit more largefiles
1750 6:4355d653f84f edit files yet again 1750 6:4355d653f84f edit files yet again