Mercurial > hg
annotate hgext/largefiles/remotestore.py @ 24118:76f6ae06ddf5
revlog: add "iscensored()" to revlog public API
The iscensored method will be used by the exchange layer to reject
nonconforming deltas involving censored revisions (and to produce
conforming deltas).
For background and broader design of the censorship feature, see:
http://mercurial.selenic.com/wiki/CensorPlan
author | Mike Edgar <adgar@google.com> |
---|---|
date | Fri, 23 Jan 2015 17:01:39 -0500 |
parents | 70252bdfd39c |
children | bee00e0c2e45 |
rev | line source |
---|---|
15168 | 1 # Copyright 2010-2011 Fog Creek Software |
2 # Copyright 2010-2011 Unity Technologies | |
3 # | |
4 # This software may be used and distributed according to the terms of the | |
5 # GNU General Public License version 2 or any later version. | |
6 | |
17425
e95ec38f86b0
fix wording and not-completely-trivial spelling errors and bad docstrings
Mads Kiilerich <mads@kiilerich.com>
parents:
17127
diff
changeset
|
7 '''remote largefile store; the base class for wirestore''' |
15168 | 8 |
9 import urllib2 | |
10 | |
21084
70252bdfd39c
largefiles: import whole modules instead of importing parts of them
Mads Kiilerich <madski@unity3d.com>
parents:
20688
diff
changeset
|
11 from mercurial import util, wireproto |
15168 | 12 from mercurial.i18n import _ |
13 | |
14 import lfutil | |
15 import basestore | |
16 | |
17 class remotestore(basestore.basestore): | |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15188
diff
changeset
|
18 '''a largefile store accessed over a network''' |
15168 | 19 def __init__(self, ui, repo, url): |
20 super(remotestore, self).__init__(ui, repo, url) | |
21 | |
22 def put(self, source, hash): | |
23 if self.sendfile(source, hash): | |
24 raise util.Abort( | |
25 _('remotestore: could not put %s to remote store %s') | |
19950
cce7ab960312
largefiles: hide passwords in URLs in ui messages
Mads Kiilerich <madski@unity3d.com>
parents:
19948
diff
changeset
|
26 % (source, util.hidepassword(self.url))) |
15168 | 27 self.ui.debug( |
19950
cce7ab960312
largefiles: hide passwords in URLs in ui messages
Mads Kiilerich <madski@unity3d.com>
parents:
19948
diff
changeset
|
28 _('remotestore: put %s to remote store %s\n') |
cce7ab960312
largefiles: hide passwords in URLs in ui messages
Mads Kiilerich <madski@unity3d.com>
parents:
19948
diff
changeset
|
29 % (source, util.hidepassword(self.url))) |
15168 | 30 |
17127
9e1616307c4c
largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15253
diff
changeset
|
31 def exists(self, hashes): |
20688
a61ed1c2d7a7
check-code: disallow use of dict(key=value) construction
Augie Fackler <raf@durin42.com>
parents:
19950
diff
changeset
|
32 return dict((h, s == 0) for (h, s) in # dict-from-generator |
a61ed1c2d7a7
check-code: disallow use of dict(key=value) construction
Augie Fackler <raf@durin42.com>
parents:
19950
diff
changeset
|
33 self._stat(hashes).iteritems()) |
15168 | 34 |
35 def sendfile(self, filename, hash): | |
36 self.ui.debug('remotestore: sendfile(%s, %s)\n' % (filename, hash)) | |
37 fd = None | |
38 try: | |
39 try: | |
40 fd = lfutil.httpsendfile(self.ui, filename) | |
41 except IOError, e: | |
42 raise util.Abort( | |
43 _('remotestore: could not open file %s: %s') | |
44 % (filename, str(e))) | |
45 return self._put(hash, fd) | |
46 finally: | |
47 if fd: | |
48 fd.close() | |
49 | |
50 def _getfile(self, tmpfile, filename, hash): | |
51 try: | |
19004
6614e5e24e66
largefiles: move protocol conversion into getlfile and make it an iterable
Mads Kiilerich <madski@unity3d.com>
parents:
19003
diff
changeset
|
52 chunks = self._get(hash) |
15188
8e115063950d
largefiles: don't break existing tests (syntax error, bad imports)
Greg Ward <greg@gerg.ca>
parents:
15168
diff
changeset
|
53 except urllib2.HTTPError, e: |
15168 | 54 # 401s get converted to util.Aborts; everything else is fine being |
55 # turned into a StoreError | |
56 raise basestore.StoreError(filename, hash, self.url, str(e)) | |
57 except urllib2.URLError, e: | |
58 # This usually indicates a connection problem, so don't | |
59 # keep trying with the other files... they will probably | |
60 # all fail too. | |
19950
cce7ab960312
largefiles: hide passwords in URLs in ui messages
Mads Kiilerich <madski@unity3d.com>
parents:
19948
diff
changeset
|
61 raise util.Abort('%s: %s' % |
cce7ab960312
largefiles: hide passwords in URLs in ui messages
Mads Kiilerich <madski@unity3d.com>
parents:
19948
diff
changeset
|
62 (util.hidepassword(self.url), e.reason)) |
15168 | 63 except IOError, e: |
64 raise basestore.StoreError(filename, hash, self.url, str(e)) | |
65 | |
19004
6614e5e24e66
largefiles: move protocol conversion into getlfile and make it an iterable
Mads Kiilerich <madski@unity3d.com>
parents:
19003
diff
changeset
|
66 return lfutil.copyandhash(chunks, tmpfile) |
15168 | 67 |
68 def _verifyfile(self, cctx, cset, contents, standin, verified): | |
69 filename = lfutil.splitstandin(standin) | |
70 if not filename: | |
71 return False | |
72 fctx = cctx[standin] | |
73 key = (filename, fctx.filenode()) | |
74 if key in verified: | |
75 return False | |
76 | |
77 verified.add(key) | |
78 | |
18482
6f219eb83435
largefiles: adapt verify to batched remote statlfile (issue3780)
Mads Kiilerich <madski@unity3d.com>
parents:
18481
diff
changeset
|
79 expecthash = fctx.data()[0:40] |
6f219eb83435
largefiles: adapt verify to batched remote statlfile (issue3780)
Mads Kiilerich <madski@unity3d.com>
parents:
18481
diff
changeset
|
80 stat = self._stat([expecthash])[expecthash] |
15168 | 81 if not stat: |
82 return False | |
83 elif stat == 1: | |
84 self.ui.warn( | |
85 _('changeset %s: %s: contents differ\n') | |
86 % (cset, filename)) | |
87 return True # failed | |
88 elif stat == 2: | |
89 self.ui.warn( | |
90 _('changeset %s: %s missing\n') | |
91 % (cset, filename)) | |
92 return True # failed | |
93 else: | |
15253
67d010779907
largefiles: improve error reporting
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
94 raise RuntimeError('verify failed: unexpected response from ' |
67d010779907
largefiles: improve error reporting
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
95 'statlfile (%r)' % stat) |
17127
9e1616307c4c
largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15253
diff
changeset
|
96 |
9e1616307c4c
largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15253
diff
changeset
|
97 def batch(self): |
9e1616307c4c
largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15253
diff
changeset
|
98 '''Support for remote batching.''' |
21084
70252bdfd39c
largefiles: import whole modules instead of importing parts of them
Mads Kiilerich <madski@unity3d.com>
parents:
20688
diff
changeset
|
99 return wireproto.remotebatch(self) |