70 |
70 |
71 @eh.wrapfunction(wireprotov1server, '_capabilities') |
71 @eh.wrapfunction(wireprotov1server, '_capabilities') |
72 def _capabilities(orig, repo, proto): |
72 def _capabilities(orig, repo, proto): |
73 '''Wrap server command to announce lfs server capability''' |
73 '''Wrap server command to announce lfs server capability''' |
74 caps = orig(repo, proto) |
74 caps = orig(repo, proto) |
75 if util.safehasattr(repo.svfs, b'lfslocalblobstore'): |
75 if util.safehasattr(repo.svfs, 'lfslocalblobstore'): |
76 # Advertise a slightly different capability when lfs is *required*, so |
76 # Advertise a slightly different capability when lfs is *required*, so |
77 # that the client knows it MUST load the extension. If lfs is not |
77 # that the client knows it MUST load the extension. If lfs is not |
78 # required on the server, there's no reason to autoload the extension |
78 # required on the server, there's no reason to autoload the extension |
79 # on the client. |
79 # on the client. |
80 if b'lfs' in repo.requirements: |
80 if b'lfs' in repo.requirements: |
332 for k, v in othervfs.options.items(): |
332 for k, v in othervfs.options.items(): |
333 if k.startswith(b'lfs'): |
333 if k.startswith(b'lfs'): |
334 self.options[k] = v |
334 self.options[k] = v |
335 # also copy lfs blobstores. note: this can run before reposetup, so lfs |
335 # also copy lfs blobstores. note: this can run before reposetup, so lfs |
336 # blobstore attributes are not always ready at this time. |
336 # blobstore attributes are not always ready at this time. |
337 for name in [b'lfslocalblobstore', b'lfsremoteblobstore']: |
337 for name in ['lfslocalblobstore', 'lfsremoteblobstore']: |
338 if util.safehasattr(othervfs, name): |
338 if util.safehasattr(othervfs, name): |
339 setattr(self, name, getattr(othervfs, name)) |
339 setattr(self, name, getattr(othervfs, name)) |
340 |
340 |
341 |
341 |
342 def _prefetchfiles(repo, revmatches): |
342 def _prefetchfiles(repo, revmatches): |
343 """Ensure that required LFS blobs are present, fetching them as a group if |
343 """Ensure that required LFS blobs are present, fetching them as a group if |
344 needed.""" |
344 needed.""" |
345 if not util.safehasattr(repo.svfs, b'lfslocalblobstore'): |
345 if not util.safehasattr(repo.svfs, 'lfslocalblobstore'): |
346 return |
346 return |
347 |
347 |
348 pointers = [] |
348 pointers = [] |
349 oids = set() |
349 oids = set() |
350 localstore = repo.svfs.lfslocalblobstore |
350 localstore = repo.svfs.lfslocalblobstore |
364 blobstore.remote(repo).readbatch(pointers, localstore) |
364 blobstore.remote(repo).readbatch(pointers, localstore) |
365 |
365 |
366 |
366 |
367 def _canskipupload(repo): |
367 def _canskipupload(repo): |
368 # Skip if this hasn't been passed to reposetup() |
368 # Skip if this hasn't been passed to reposetup() |
369 if not util.safehasattr(repo.svfs, b'lfsremoteblobstore'): |
369 if not util.safehasattr(repo.svfs, 'lfsremoteblobstore'): |
370 return True |
370 return True |
371 |
371 |
372 # if remotestore is a null store, upload is a no-op and can be skipped |
372 # if remotestore is a null store, upload is a no-op and can be skipped |
373 return isinstance(repo.svfs.lfsremoteblobstore, blobstore._nullremote) |
373 return isinstance(repo.svfs.lfsremoteblobstore, blobstore._nullremote) |
374 |
374 |
375 |
375 |
376 def candownload(repo): |
376 def candownload(repo): |
377 # Skip if this hasn't been passed to reposetup() |
377 # Skip if this hasn't been passed to reposetup() |
378 if not util.safehasattr(repo.svfs, b'lfsremoteblobstore'): |
378 if not util.safehasattr(repo.svfs, 'lfsremoteblobstore'): |
379 return False |
379 return False |
380 |
380 |
381 # if remotestore is a null store, downloads will lead to nothing |
381 # if remotestore is a null store, downloads will lead to nothing |
382 return not isinstance(repo.svfs.lfsremoteblobstore, blobstore._nullremote) |
382 return not isinstance(repo.svfs.lfsremoteblobstore, blobstore._nullremote) |
383 |
383 |
522 @eh.wrapfunction(upgrade_engine, 'finishdatamigration') |
522 @eh.wrapfunction(upgrade_engine, 'finishdatamigration') |
523 def upgradefinishdatamigration(orig, ui, srcrepo, dstrepo, requirements): |
523 def upgradefinishdatamigration(orig, ui, srcrepo, dstrepo, requirements): |
524 orig(ui, srcrepo, dstrepo, requirements) |
524 orig(ui, srcrepo, dstrepo, requirements) |
525 |
525 |
526 # Skip if this hasn't been passed to reposetup() |
526 # Skip if this hasn't been passed to reposetup() |
527 if util.safehasattr( |
527 if util.safehasattr(srcrepo.svfs, 'lfslocalblobstore') and util.safehasattr( |
528 srcrepo.svfs, b'lfslocalblobstore' |
528 dstrepo.svfs, 'lfslocalblobstore' |
529 ) and util.safehasattr(dstrepo.svfs, b'lfslocalblobstore'): |
529 ): |
530 srclfsvfs = srcrepo.svfs.lfslocalblobstore.vfs |
530 srclfsvfs = srcrepo.svfs.lfslocalblobstore.vfs |
531 dstlfsvfs = dstrepo.svfs.lfslocalblobstore.vfs |
531 dstlfsvfs = dstrepo.svfs.lfslocalblobstore.vfs |
532 |
532 |
533 for dirpath, dirs, files in srclfsvfs.walk(): |
533 for dirpath, dirs, files in srclfsvfs.walk(): |
534 for oid in files: |
534 for oid in files: |