mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 00:14:35 +03:00
208aa05eca
This avoids a lot of expensive roundtrips to remote repositories ... but might be slightly slower for local operations. This will also change some aborts on missing files to warnings. That will in some situations make it possible to continue working on a repository with missing largefiles.
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
# Copyright 2010-2011 Fog Creek Software
|
|
#
|
|
# This software may be used and distributed according to the terms of the
|
|
# GNU General Public License version 2 or any later version.
|
|
|
|
'''largefile store working over Mercurial's wire protocol'''
|
|
|
|
import lfutil
|
|
import remotestore
|
|
|
|
class wirestore(remotestore.remotestore):
|
|
def __init__(self, ui, repo, remote):
|
|
cap = remote.capable('largefiles')
|
|
if not cap:
|
|
raise lfutil.storeprotonotcapable([])
|
|
storetypes = cap.split(',')
|
|
if 'serve' not in storetypes:
|
|
raise lfutil.storeprotonotcapable(storetypes)
|
|
self.remote = remote
|
|
super(wirestore, self).__init__(ui, repo, remote.url())
|
|
|
|
def _put(self, hash, fd):
|
|
return self.remote.putlfile(hash, fd)
|
|
|
|
def _get(self, hash):
|
|
return self.remote.getlfile(hash)
|
|
|
|
def _stat(self, hashes):
|
|
'''For each hash, return 0 if it is available, other values if not.
|
|
It is usually 2 if the largefile is missing, but might be 1 the server
|
|
has a corrupted copy.'''
|
|
batch = self.remote.batch()
|
|
futures = {}
|
|
for hash in hashes:
|
|
futures[hash] = batch.statlfile(hash)
|
|
batch.submit()
|
|
retval = {}
|
|
for hash in hashes:
|
|
retval[hash] = futures[hash].value
|
|
return retval
|