Show More
@@ -137,6 +137,7 b' from mercurial import (' | |||
|
137 | 137 | fileset, |
|
138 | 138 | hg, |
|
139 | 139 | localrepo, |
|
140 | merge, | |
|
140 | 141 | minifileset, |
|
141 | 142 | node, |
|
142 | 143 | pycompat, |
@@ -331,6 +332,8 b' def extsetup(ui):' | |||
|
331 | 332 | wrapfunction(hg, 'clone', wrapper.hgclone) |
|
332 | 333 | wrapfunction(hg, 'postshare', wrapper.hgpostshare) |
|
333 | 334 | |
|
335 | wrapfunction(merge, 'applyupdates', wrapper.mergemodapplyupdates) | |
|
336 | ||
|
334 | 337 | # Make bundle choose changegroup3 instead of changegroup2. This affects |
|
335 | 338 | # "hg bundle" command. Note: it does not cover all bundle formats like |
|
336 | 339 | # "packed1". Using "packed1" with lfs will likely cause trouble. |
@@ -249,6 +249,42 b' def hgpostshare(orig, sourcerepo, destre' | |||
|
249 | 249 | if 'lfs' in destrepo.requirements: |
|
250 | 250 | destrepo.vfs.append('hgrc', util.tonativeeol('\n[extensions]\nlfs=\n')) |
|
251 | 251 | |
|
252 | def _prefetchfiles(repo, ctx, files): | |
|
253 | """Ensure that required LFS blobs are present, fetching them as a group if | |
|
254 | needed. | |
|
255 | ||
|
256 | This is centralized logic for various prefetch hooks.""" | |
|
257 | pointers = [] | |
|
258 | localstore = repo.svfs.lfslocalblobstore | |
|
259 | ||
|
260 | for f in files: | |
|
261 | p = pointerfromctx(ctx, f) | |
|
262 | if p and not localstore.has(p.oid()): | |
|
263 | p.filename = f | |
|
264 | pointers.append(p) | |
|
265 | ||
|
266 | if pointers: | |
|
267 | repo.svfs.lfsremoteblobstore.readbatch(pointers, localstore) | |
|
268 | ||
|
269 | def mergemodapplyupdates(orig, repo, actions, wctx, mctx, overwrite, | |
|
270 | labels=None): | |
|
271 | """Ensure that the required LFS blobs are present before applying updates, | |
|
272 | fetching them as a group if needed. | |
|
273 | ||
|
274 | This has the effect of ensuring all necessary LFS blobs are present before | |
|
275 | making working directory changes during an update (including after clone and | |
|
276 | share) or merge.""" | |
|
277 | ||
|
278 | # Skipping 'a', 'am', 'f', 'r', 'dm', 'e', 'k', 'p' and 'pr', because they | |
|
279 | # don't touch mctx. 'cd' is skipped, because changed/deleted never resolves | |
|
280 | # to something from the remote side. | |
|
281 | oplist = [actions[a] for a in 'g dc dg m'.split()] | |
|
282 | ||
|
283 | _prefetchfiles(repo, mctx, | |
|
284 | [f for sublist in oplist for f, args, msg in sublist]) | |
|
285 | ||
|
286 | return orig(repo, actions, wctx, mctx, overwrite, labels) | |
|
287 | ||
|
252 | 288 | def _canskipupload(repo): |
|
253 | 289 | # if remotestore is a null store, upload is a no-op and can be skipped |
|
254 | 290 | return isinstance(repo.svfs.lfsremoteblobstore, blobstore._nullremote) |
@@ -66,10 +66,10 b' Clear the cache to force a download' | |||
|
66 | 66 | $ cd ../repo2 |
|
67 | 67 | $ hg update tip -v |
|
68 | 68 | resolving manifests |
|
69 | getting a | |
|
70 | 69 | lfs: downloading 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b (12 bytes) |
|
71 | 70 | lfs: adding 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b to the usercache |
|
72 | 71 | lfs: processed: 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b |
|
72 | getting a | |
|
73 | 73 | lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store |
|
74 | 74 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
75 | 75 | |
@@ -99,17 +99,18 b' Clear the cache to force a download' | |||
|
99 | 99 | $ rm -rf `hg config lfs.usercache` |
|
100 | 100 | $ hg --repo ../repo1 update tip -v |
|
101 | 101 | resolving manifests |
|
102 | getting b | |
|
103 | lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store | |
|
104 | getting c | |
|
102 | lfs: need to transfer 2 objects (39 bytes) | |
|
103 | lfs: downloading 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 (20 bytes) | |
|
104 | lfs: adding 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 to the usercache | |
|
105 | lfs: processed: 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 | |
|
105 | 106 | lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes) |
|
106 | 107 | lfs: adding d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 to the usercache |
|
107 | 108 | lfs: processed: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 |
|
109 | getting b | |
|
110 | lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store | |
|
111 | getting c | |
|
108 | 112 | lfs: found d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 in the local lfs store |
|
109 | 113 | getting d |
|
110 | lfs: downloading 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 (20 bytes) | |
|
111 | lfs: adding 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 to the usercache | |
|
112 | lfs: processed: 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 | |
|
113 | 114 | lfs: found 37a65ab78d5ecda767e8622c248b5dbff1e68b1678ab0e730d5eb8601ec8ad19 in the local lfs store |
|
114 | 115 | 3 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
115 | 116 | |
@@ -123,11 +124,6 b' Test a corrupt file download, but clear ' | |||
|
123 | 124 | |
|
124 | 125 | $ hg --repo ../repo1 update -C tip -v |
|
125 | 126 | resolving manifests |
|
126 | getting a | |
|
127 | lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store | |
|
128 | getting b | |
|
129 | lfs: found 31cf46fbc4ecd458a0943c5b4881f1f5a6dd36c53d6167d5b69ac45149b38e5b in the local lfs store | |
|
130 | getting c | |
|
131 | 127 | lfs: downloading d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (19 bytes) |
|
132 | 128 | abort: corrupt remote lfs object: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 |
|
133 | 129 | [255] |
@@ -760,7 +760,6 b' Damaging a file required by the update d' | |||
|
760 | 760 | $ hg --config lfs.usercache=emptycache clone -v repo5 fromcorrupt2 |
|
761 | 761 | updating to branch default |
|
762 | 762 | resolving manifests |
|
763 | getting l | |
|
764 | 763 | abort: corrupt remote lfs object: 22f66a3fc0b9bf3f012c814303995ec07099b3a9ce02a7af84b5970811074a3b |
|
765 | 764 | [255] |
|
766 | 765 |
General Comments 0
You need to be logged in to leave comments.
Login now