wirestore.py
40 lines
| 1.3 KiB
| text/x-python
|
PythonLexer
various
|
r15168 | # 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. | ||||
Greg Ward
|
r15252 | '''largefile store working over Mercurial's wire protocol''' | ||
various
|
r15168 | |||
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(',') | ||||
Brodie Rao
|
r16686 | if 'serve' not in storetypes: | ||
various
|
r15168 | 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) | ||||
Na'Tosha Bard
|
r17127 | def _stat(self, hashes): | ||
Mads Kiilerich
|
r19008 | '''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.''' | ||||
Na'Tosha Bard
|
r17127 | batch = self.remote.batch() | ||
futures = {} | ||||
for hash in hashes: | ||||
futures[hash] = batch.statlfile(hash) | ||||
batch.submit() | ||||
retval = {} | ||||
for hash in hashes: | ||||
Mads Kiilerich
|
r18481 | retval[hash] = futures[hash].value | ||
Na'Tosha Bard
|
r17127 | return retval | ||