wirestore.py
43 lines
| 1.4 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''' | ||
liscju
|
r29316 | from __future__ import absolute_import | ||
various
|
r15168 | |||
liscju
|
r29316 | from . import ( | ||
lfutil, | ||||
remotestore, | ||||
) | ||||
various
|
r15168 | |||
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.''' | ||||
Gregory Szorc
|
r37650 | |||
with self.remote.commandexecutor() as e: | ||||
fs = [] | ||||
for hash in hashes: | ||||
fs.append((hash, e.callcommand('statlfile', { | ||||
'sha': hash, | ||||
}))) | ||||
return {hash: f.result() for hash, f in fs} | ||||