881 if not repo: |
881 if not repo: |
882 return result |
882 return result |
883 |
883 |
884 # If largefiles is required for this repo, permanently enable it locally |
884 # If largefiles is required for this repo, permanently enable it locally |
885 if 'largefiles' in repo.requirements: |
885 if 'largefiles' in repo.requirements: |
886 fp = repo.vfs('hgrc', 'a', text=True) |
886 with repo.vfs('hgrc', 'a', text=True) as fp: |
887 try: |
|
888 fp.write('\n[extensions]\nlargefiles=\n') |
887 fp.write('\n[extensions]\nlargefiles=\n') |
889 finally: |
|
890 fp.close() |
|
891 |
888 |
892 # Caching is implicitly limited to 'rev' option, since the dest repo was |
889 # Caching is implicitly limited to 'rev' option, since the dest repo was |
893 # truncated at that point. The user may expect a download count with |
890 # truncated at that point. The user may expect a download count with |
894 # this option, so attempt whether or not this is a largefile repo. |
891 # this option, so attempt whether or not this is a largefile repo. |
895 if opts.get('all_largefiles'): |
892 if opts.get('all_largefiles'): |
1337 return False |
1334 return False |
1338 return origvisitdirfn(lf) |
1335 return origvisitdirfn(lf) |
1339 m.visitdir = lfvisitdirfn |
1336 m.visitdir = lfvisitdirfn |
1340 |
1337 |
1341 for f in ctx.walk(m): |
1338 for f in ctx.walk(m): |
1342 fp = cmdutil.makefileobj(repo, opts.get('output'), ctx.node(), |
1339 with cmdutil.makefileobj(repo, opts.get('output'), ctx.node(), |
1343 pathname=f) |
1340 pathname=f) as fp: |
1344 lf = lfutil.splitstandin(f) |
1341 lf = lfutil.splitstandin(f) |
1345 if lf is None or origmatchfn(f): |
1342 if lf is None or origmatchfn(f): |
1346 # duplicating unreachable code from commands.cat |
1343 # duplicating unreachable code from commands.cat |
1347 data = ctx[f].data() |
1344 data = ctx[f].data() |
1348 if opts.get('decode'): |
1345 if opts.get('decode'): |
1349 data = repo.wwritedata(f, data) |
1346 data = repo.wwritedata(f, data) |
1350 fp.write(data) |
1347 fp.write(data) |
1351 else: |
1348 else: |
1352 hash = lfutil.readstandin(repo, lf, ctx.rev()) |
1349 hash = lfutil.readstandin(repo, lf, ctx.rev()) |
1353 if not lfutil.inusercache(repo.ui, hash): |
1350 if not lfutil.inusercache(repo.ui, hash): |
1354 store = storefactory.openstore(repo) |
1351 store = storefactory.openstore(repo) |
1355 success, missing = store.get([(lf, hash)]) |
1352 success, missing = store.get([(lf, hash)]) |
1356 if len(success) != 1: |
1353 if len(success) != 1: |
1357 raise error.Abort( |
1354 raise error.Abort( |
1358 _('largefile %s is not in cache and could not be ' |
1355 _('largefile %s is not in cache and could not be ' |
1359 'downloaded') % lf) |
1356 'downloaded') % lf) |
1360 path = lfutil.usercachepath(repo.ui, hash) |
1357 path = lfutil.usercachepath(repo.ui, hash) |
1361 fpin = open(path, "rb") |
1358 with open(path, "rb") as fpin: |
1362 for chunk in util.filechunkiter(fpin, 128 * 1024): |
1359 for chunk in util.filechunkiter(fpin): |
1363 fp.write(chunk) |
1360 fp.write(chunk) |
1364 fpin.close() |
|
1365 fp.close() |
|
1366 err = 0 |
1361 err = 0 |
1367 return err |
1362 return err |
1368 |
1363 |
1369 def mergeupdate(orig, repo, node, branchmerge, force, |
1364 def mergeupdate(orig, repo, node, branchmerge, force, |
1370 *args, **kwargs): |
1365 *args, **kwargs): |