annotate hgext/largefiles/wirestore.py @ 31740:a40e979b9d97

largefiles: use readasstandin() to read hex hash directly from filectx BTW, C implementation of hexdigest() for SHA-1/256/512 returns hex hash in lower case, and doctest in Python standard hashlib assumes that, too. But it isn't explicitly described in API document or so. Therefore, we can't assume that hexdigest() always returns hex hash in lower case, for any hash algorithms, on any Python runtimes and versions. From point of view of that, it is reasonable for portability that 40800668e019 applies lower() on hex hash in overridefilemerge(). But on the other hand, in largefiles extension, there are still many code paths comparing between hex hashes or storing hex hash into standin file, without lower(). Switching to hash algorithm other than SHA-1 may be good chance to clarify our policy about hexdigest()-ed hash value string. - assume that hexdigest() always returns hex hash in lower case, or - apply lower() on hex hash in appropriate layers to ensure lower-case-ness of it for portability
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Sat, 01 Apr 2017 02:32:49 +0900
parents 28dfcf3d0ad3
children 6c55ce51d6c3
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
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
14 class wirestore(remotestore.remotestore):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
15 def __init__(self, ui, repo, remote):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
16 cap = remote.capable('largefiles')
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
17 if not cap:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
18 raise lfutil.storeprotonotcapable([])
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
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
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
21 raise lfutil.storeprotonotcapable(storetypes)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
22 self.remote = remote
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
23 super(wirestore, self).__init__(ui, repo, remote.url())
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
24
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
25 def _put(self, hash, fd):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
26 return self.remote.putlfile(hash, fd)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
27
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
28 def _get(self, hash):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
29 return self.remote.getlfile(hash)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
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.'''
28439
b6e71f8af5b8 largefiles: use iterbatch instead of batch
Augie Fackler <augie@google.com>
parents: 19008
diff changeset
35 batch = self.remote.iterbatch()
17127
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
36 for hash in hashes:
28439
b6e71f8af5b8 largefiles: use iterbatch instead of batch
Augie Fackler <augie@google.com>
parents: 19008
diff changeset
37 batch.statlfile(hash)
17127
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
38 batch.submit()
28439
b6e71f8af5b8 largefiles: use iterbatch instead of batch
Augie Fackler <augie@google.com>
parents: 19008
diff changeset
39 return dict(zip(hashes, batch.results()))