Mercurial > hg
annotate hgext/largefiles/remotestore.py @ 25382:6084926366b9
summary: move the parents phase marker to commit line (issue4688)
The phase of the pending commit depends on the parent of the working directory
and on the phases.newcommit configuration.
First, this information rather depend on the commit line which describe the
pending commit.
Then, we only want to be advertised when the pending phase is going to be higher
than the default new commit phase.
So the format will change from
$ hg summary
parent: 2:ab91dfabc5ad
foo
parent: 3:24f1031ad244 tip
bar
branch: default
commit: 1 modified, 1 unknown, 1 unresolved (merge)
update: (current)
phases: 1 secret (secret)
to
parent: 2:ab91dfabc5ad
foo
parent: 3:24f1031ad244 tip
bar
branch: default
commit: 1 modified, 1 unknown, 1 unresolved (merge) (secret)
update: (current)
phases: 1 secret
author | Gilles Moris <gilles.moris@free.fr> |
---|---|
date | Fri, 29 May 2015 22:23:58 +0200 |
parents | bee00e0c2e45 |
children | 328739ea70c3 |
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: | |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
21084
diff
changeset
|
39 fd = lfutil.httpsendfile(self.ui, filename) |
15168 | 40 return self._put(hash, fd) |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
21084
diff
changeset
|
41 except IOError, e: |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
21084
diff
changeset
|
42 raise util.Abort( |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
21084
diff
changeset
|
43 _('remotestore: could not open file %s: %s') |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
21084
diff
changeset
|
44 % (filename, str(e))) |
15168 | 45 finally: |
46 if fd: | |
47 fd.close() | |
48 | |
49 def _getfile(self, tmpfile, filename, hash): | |
50 try: | |
19004
6614e5e24e66
largefiles: move protocol conversion into getlfile and make it an iterable
Mads Kiilerich <madski@unity3d.com>
parents:
19003
diff
changeset
|
51 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
|
52 except urllib2.HTTPError, e: |
15168 | 53 # 401s get converted to util.Aborts; everything else is fine being |
54 # turned into a StoreError | |
55 raise basestore.StoreError(filename, hash, self.url, str(e)) | |
56 except urllib2.URLError, e: | |
57 # This usually indicates a connection problem, so don't | |
58 # keep trying with the other files... they will probably | |
59 # all fail too. | |
19950
cce7ab960312
largefiles: hide passwords in URLs in ui messages
Mads Kiilerich <madski@unity3d.com>
parents:
19948
diff
changeset
|
60 raise util.Abort('%s: %s' % |
cce7ab960312
largefiles: hide passwords in URLs in ui messages
Mads Kiilerich <madski@unity3d.com>
parents:
19948
diff
changeset
|
61 (util.hidepassword(self.url), e.reason)) |
15168 | 62 except IOError, e: |
63 raise basestore.StoreError(filename, hash, self.url, str(e)) | |
64 | |
19004
6614e5e24e66
largefiles: move protocol conversion into getlfile and make it an iterable
Mads Kiilerich <madski@unity3d.com>
parents:
19003
diff
changeset
|
65 return lfutil.copyandhash(chunks, tmpfile) |
15168 | 66 |
67 def _verifyfile(self, cctx, cset, contents, standin, verified): | |
68 filename = lfutil.splitstandin(standin) | |
69 if not filename: | |
70 return False | |
71 fctx = cctx[standin] | |
72 key = (filename, fctx.filenode()) | |
73 if key in verified: | |
74 return False | |
75 | |
76 verified.add(key) | |
77 | |
18482
6f219eb83435
largefiles: adapt verify to batched remote statlfile (issue3780)
Mads Kiilerich <madski@unity3d.com>
parents:
18481
diff
changeset
|
78 expecthash = fctx.data()[0:40] |
6f219eb83435
largefiles: adapt verify to batched remote statlfile (issue3780)
Mads Kiilerich <madski@unity3d.com>
parents:
18481
diff
changeset
|
79 stat = self._stat([expecthash])[expecthash] |
15168 | 80 if not stat: |
81 return False | |
82 elif stat == 1: | |
83 self.ui.warn( | |
84 _('changeset %s: %s: contents differ\n') | |
85 % (cset, filename)) | |
86 return True # failed | |
87 elif stat == 2: | |
88 self.ui.warn( | |
89 _('changeset %s: %s missing\n') | |
90 % (cset, filename)) | |
91 return True # failed | |
92 else: | |
15253
67d010779907
largefiles: improve error reporting
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
93 raise RuntimeError('verify failed: unexpected response from ' |
67d010779907
largefiles: improve error reporting
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
94 '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
|
95 |
9e1616307c4c
largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15253
diff
changeset
|
96 def batch(self): |
9e1616307c4c
largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15253
diff
changeset
|
97 '''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
|
98 return wireproto.remotebatch(self) |