hgext/lfs/wrapper.py
changeset 50901 6543469a351e
parent 50803 609a3b8058c3
child 50928 d718eddf01d9
equal deleted inserted replaced
50900:a99e62dae4c8 50901:6543469a351e
    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: