annotate hgext/largefiles/wirestore.py @ 45049:513b3ef277a3

rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root` The println macro is not used to avoid string usage. Dealing only with bytes allows us to be compatible with any encoding and not just UTF8. Later on, format macro will be made to have more readable code. Differential Revision: https://phab.mercurial-scm.org/D8612
author Antoine Cezar <antoine.cezar@octobus.net>
date Fri, 05 Jun 2020 09:01:35 +0200
parents 687b865b95ad
children 89a2afe31e82
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1 # Copyright 2010-2011 Fog Creek Software
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
2 #
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
3 # This software may be used and distributed according to the terms of the
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
4 # GNU General Public License version 2 or any later version.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
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
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
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
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
13
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37632
diff changeset
14
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
15 class wirestore(remotestore.remotestore):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
16 def __init__(self, ui, repo, remote):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
17 cap = remote.capable(b'largefiles')
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
18 if not cap:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
19 raise lfutil.storeprotonotcapable([])
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
20 storetypes = cap.split(b',')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
21 if b'serve' not in storetypes:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
22 raise lfutil.storeprotonotcapable(storetypes)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
23 self.remote = remote
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
24 super(wirestore, self).__init__(ui, repo, remote.url())
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
25
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
26 def _put(self, hash, fd):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
27 return self.remote.putlfile(hash, fd)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
28
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
29 def _get(self, hash):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
30 return self.remote.getlfile(hash)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
31
17127
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
32 def _stat(self, hashes):
19008
9d33d6e0d442 largefiles: stat all largefiles in one batch before downloading
Mads Kiilerich <madski@unity3d.com>
parents: 18481
diff changeset
33 '''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
34 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
35 has a corrupted copy.'''
37632
6c55ce51d6c3 largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29316
diff changeset
36
6c55ce51d6c3 largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29316
diff changeset
37 with self.remote.commandexecutor() as e:
6c55ce51d6c3 largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29316
diff changeset
38 fs = []
6c55ce51d6c3 largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29316
diff changeset
39 for hash in hashes:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
40 fs.append((hash, e.callcommand(b'statlfile', {b'sha': hash,})))
37632
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 return {hash: f.result() for hash, f in fs}