author | Anton Shestakov <av6@dwimlabs.net> |
Thu, 09 Aug 2018 13:04:52 +0800 | |
branch | stable |
changeset 38931 | 5caee9f923ae |
parent 37632 | 6c55ce51d6c3 |
child 43076 | 2372284d9457 |
permissions | -rw-r--r-- |
15168 | 1 |
# Copyright 2010-2011 Fog Creek Software |
2 |
# |
|
3 |
# This software may be used and distributed according to the terms of the |
|
4 |
# GNU General Public License version 2 or any later version. |
|
5 |
||
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15168
diff
changeset
|
6 |
'''largefile store working over Mercurial's wire protocol''' |
29316
28dfcf3d0ad3
py3: make largefiles/wirestore.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28439
diff
changeset
|
7 |
from __future__ import absolute_import |
15168 | 8 |
|
29316
28dfcf3d0ad3
py3: make largefiles/wirestore.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28439
diff
changeset
|
9 |
from . import ( |
28dfcf3d0ad3
py3: make largefiles/wirestore.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28439
diff
changeset
|
10 |
lfutil, |
28dfcf3d0ad3
py3: make largefiles/wirestore.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28439
diff
changeset
|
11 |
remotestore, |
28dfcf3d0ad3
py3: make largefiles/wirestore.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28439
diff
changeset
|
12 |
) |
15168 | 13 |
|
14 |
class wirestore(remotestore.remotestore): |
|
15 |
def __init__(self, ui, repo, remote): |
|
16 |
cap = remote.capable('largefiles') |
|
17 |
if not cap: |
|
18 |
raise lfutil.storeprotonotcapable([]) |
|
19 |
storetypes = cap.split(',') |
|
16686
67964cda8701
cleanup: "not x in y" -> "x not in y"
Brodie Rao <brodie@sf.io>
parents:
15252
diff
changeset
|
20 |
if 'serve' not in storetypes: |
15168 | 21 |
raise lfutil.storeprotonotcapable(storetypes) |
22 |
self.remote = remote |
|
23 |
super(wirestore, self).__init__(ui, repo, remote.url()) |
|
24 |
||
25 |
def _put(self, hash, fd): |
|
26 |
return self.remote.putlfile(hash, fd) |
|
27 |
||
28 |
def _get(self, hash): |
|
29 |
return self.remote.getlfile(hash) |
|
30 |
||
17127
9e1616307c4c
largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16686
diff
changeset
|
31 |
def _stat(self, hashes): |
19008
9d33d6e0d442
largefiles: stat all largefiles in one batch before downloading
Mads Kiilerich <madski@unity3d.com>
parents:
18481
diff
changeset
|
32 |
'''For each hash, return 0 if it is available, other values if not. |
9d33d6e0d442
largefiles: stat all largefiles in one batch before downloading
Mads Kiilerich <madski@unity3d.com>
parents:
18481
diff
changeset
|
33 |
It is usually 2 if the largefile is missing, but might be 1 the server |
9d33d6e0d442
largefiles: stat all largefiles in one batch before downloading
Mads Kiilerich <madski@unity3d.com>
parents:
18481
diff
changeset
|
34 |
has a corrupted copy.''' |
37632
6c55ce51d6c3
largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29316
diff
changeset
|
35 |
|
6c55ce51d6c3
largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29316
diff
changeset
|
36 |
with self.remote.commandexecutor() as e: |
6c55ce51d6c3
largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29316
diff
changeset
|
37 |
fs = [] |
6c55ce51d6c3
largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29316
diff
changeset
|
38 |
for hash in hashes: |
6c55ce51d6c3
largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29316
diff
changeset
|
39 |
fs.append((hash, e.callcommand('statlfile', { |
6c55ce51d6c3
largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29316
diff
changeset
|
40 |
'sha': hash, |
6c55ce51d6c3
largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29316
diff
changeset
|
41 |
}))) |
6c55ce51d6c3
largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29316
diff
changeset
|
42 |
|
6c55ce51d6c3
largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29316
diff
changeset
|
43 |
return {hash: f.result() for hash, f in fs} |