wirestore.py
42 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''' | ||
liscju
|
r29316 | from __future__ import absolute_import | ||
various
|
r15168 | |||
liscju
|
r29316 | from . import ( | ||
lfutil, | ||||
remotestore, | ||||
) | ||||
various
|
r15168 | |||
Augie Fackler
|
r43346 | |||
various
|
r15168 | class wirestore(remotestore.remotestore): | ||
def __init__(self, ui, repo, remote): | ||||
Augie Fackler
|
r43347 | cap = remote.capable(b'largefiles') | ||
various
|
r15168 | if not cap: | ||
raise lfutil.storeprotonotcapable([]) | ||||
Augie Fackler
|
r43347 | storetypes = cap.split(b',') | ||
if b'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: | ||||
Augie Fackler
|
r43347 | fs.append((hash, e.callcommand(b'statlfile', {b'sha': hash,}))) | ||
Gregory Szorc
|
r37650 | |||
return {hash: f.result() for hash, f in fs} | ||||