diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py index d4c0fa71de0161593874b5281a2ae11830096016_aGdleHQvbGFyZ2VmaWxlcy9vdmVycmlkZXMucHk=..c96148346af824cc4b17b6e875e481d6a7638b3b_aGdleHQvbGFyZ2VmaWxlcy9vdmVycmlkZXMucHk= 100644 --- a/hgext/largefiles/overrides.py +++ b/hgext/largefiles/overrides.py @@ -658,6 +658,19 @@ if not source: source = 'default' result = orig(ui, repo, source, **opts) + # If we do not have the new largefiles for any new heads we pulled, we + # will run into a problem later if we try to merge or rebase with one of + # these heads, so cache the largefiles now direclty into the system + # cache. + ui.status(_("caching new largefiles\n")) + numcached = 0 + branches = repo.branchmap() + for branch in branches: + heads = repo.branchheads(branch) + for head in heads: + (cached, missing) = lfcommands.cachelfiles(ui, repo, head) + numcached += len(cached) + ui.status(_("%d largefiles cached\n" % numcached)) return result def override_rebase(orig, ui, repo, **opts): diff --git a/tests/test-largefiles-cache.t b/tests/test-largefiles-cache.t index d4c0fa71de0161593874b5281a2ae11830096016_dGVzdHMvdGVzdC1sYXJnZWZpbGVzLWNhY2hlLnQ=..c96148346af824cc4b17b6e875e481d6a7638b3b_dGVzdHMvdGVzdC1sYXJnZWZpbGVzLWNhY2hlLnQ= 100644 --- a/tests/test-largefiles-cache.t +++ b/tests/test-largefiles-cache.t @@ -37,6 +37,8 @@ adding file changes added 1 changesets with 1 changes to 1 files (run 'hg update' to get a working copy) + caching new largefiles + 0 largefiles cached Update working directory to "tip", which requires largefile("large"), but there is no cache file for it. So, hg must treat it as diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t index d4c0fa71de0161593874b5281a2ae11830096016_dGVzdHMvdGVzdC1sYXJnZWZpbGVzLnQ=..c96148346af824cc4b17b6e875e481d6a7638b3b_dGVzdHMvdGVzdC1sYXJnZWZpbGVzLnQ= 100644 --- a/tests/test-largefiles.t +++ b/tests/test-largefiles.t @@ -460,6 +460,8 @@ adding file changes added 1 changesets with 2 changes to 2 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) + caching new largefiles + 0 largefiles cached $ hg rebase getting changed largefiles 1 largefiles updated, 0 removed @@ -610,7 +612,8 @@ searching 1 changesets for largefiles verified existence of 3 revisions of 3 largefiles -Merging does not revert to old versions of largefiles (this has also -been very problematic). +Merging does not revert to old versions of largefiles and also check +that merging after having pulled from a non-default remote works +correctly. $ cd .. @@ -615,6 +618,6 @@ $ cd .. - $ hg clone -r 7 e f + $ hg clone -r 7 e temp adding changesets adding manifests adding file changes @@ -623,6 +626,14 @@ 5 files updated, 0 files merged, 0 files removed, 0 files unresolved getting changed largefiles 3 largefiles updated, 0 removed + $ hg clone temp f + updating to branch default + 5 files updated, 0 files merged, 0 files removed, 0 files unresolved + getting changed largefiles + 3 largefiles updated, 0 removed +# Delete the largefiles in the largefiles system cache so that we have an +# opportunity to test that caching after a pull works. + $ rm ${USERCACHE}/* $ cd f $ echo "large4-merge-test" > sub/large4 $ hg commit -m "Modify large4 to test merge" @@ -636,6 +647,8 @@ adding file changes added 2 changesets with 4 changes to 4 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) + caching new largefiles + 2 largefiles cached $ hg merge merging sub/large4 largefile sub/large4 has a merge conflict