Mercurial > hg
annotate hgext/largefiles/localstore.py @ 29272:e82ca7d0967c stable
Added signature for changeset a9764ab80e11
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 01 Jun 2016 15:48:38 -0500 |
parents | 40bd01be5c25 |
children | 207c0db08953 |
rev | line source |
---|---|
15168 | 1 # Copyright 2009-2010 Gregory P. Ward |
2 # Copyright 2009-2010 Intelerad Medical Systems Incorporated | |
3 # Copyright 2010-2011 Fog Creek Software | |
4 # Copyright 2010-2011 Unity Technologies | |
5 # | |
6 # This software may be used and distributed according to the terms of the | |
7 # GNU General Public License version 2 or any later version. | |
8 | |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15168
diff
changeset
|
9 '''store class for local filesystem''' |
15168 | 10 |
11 from mercurial.i18n import _ | |
12 | |
13 import lfutil | |
14 import basestore | |
15 | |
16 class localstore(basestore.basestore): | |
15317
41f371150ccb
largefiles: make the store primary, and the user cache secondary
Benjamin Pollack <benjamin@bitquabit.com>
parents:
15316
diff
changeset
|
17 '''localstore first attempts to grab files out of the store in the remote |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
17191
diff
changeset
|
18 Mercurial repository. Failing that, it attempts to grab the files from |
15317
41f371150ccb
largefiles: make the store primary, and the user cache secondary
Benjamin Pollack <benjamin@bitquabit.com>
parents:
15316
diff
changeset
|
19 the user cache.''' |
15168 | 20 |
21 def __init__(self, ui, repo, remote): | |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
16928
diff
changeset
|
22 self.remote = remote.local() |
18155
5206af8894a3
largefiles: cleanup of warnings on errors getting largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
17439
diff
changeset
|
23 super(localstore, self).__init__(ui, repo, self.remote.url()) |
15168 | 24 |
15317
41f371150ccb
largefiles: make the store primary, and the user cache secondary
Benjamin Pollack <benjamin@bitquabit.com>
parents:
15316
diff
changeset
|
25 def put(self, source, hash): |
41f371150ccb
largefiles: make the store primary, and the user cache secondary
Benjamin Pollack <benjamin@bitquabit.com>
parents:
15316
diff
changeset
|
26 if lfutil.instore(self.remote, hash): |
41f371150ccb
largefiles: make the store primary, and the user cache secondary
Benjamin Pollack <benjamin@bitquabit.com>
parents:
15316
diff
changeset
|
27 return |
19007
266b5fb72f26
largefiles: 'put' should store 'source' file in under 'hash', also in localstore
Mads Kiilerich <madski@unity3d.com>
parents:
19003
diff
changeset
|
28 lfutil.link(source, lfutil.storepath(self.remote, hash)) |
15168 | 29 |
17411
a02e36568e88
largefiles: adjust localstore to handle batch statlfile requests (issue3583)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17191
diff
changeset
|
30 def exists(self, hashes): |
a02e36568e88
largefiles: adjust localstore to handle batch statlfile requests (issue3583)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17191
diff
changeset
|
31 retval = {} |
a02e36568e88
largefiles: adjust localstore to handle batch statlfile requests (issue3583)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17191
diff
changeset
|
32 for hash in hashes: |
a02e36568e88
largefiles: adjust localstore to handle batch statlfile requests (issue3583)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17191
diff
changeset
|
33 retval[hash] = lfutil.instore(self.remote, hash) |
a02e36568e88
largefiles: adjust localstore to handle batch statlfile requests (issue3583)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17191
diff
changeset
|
34 return retval |
a02e36568e88
largefiles: adjust localstore to handle batch statlfile requests (issue3583)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17191
diff
changeset
|
35 |
15168 | 36 |
37 def _getfile(self, tmpfile, filename, hash): | |
19000
eaf146e811a4
largefiles: refactoring - use findfile in localstore._getfile
Mads Kiilerich <madski@unity3d.com>
parents:
18998
diff
changeset
|
38 path = lfutil.findfile(self.remote, hash) |
eaf146e811a4
largefiles: refactoring - use findfile in localstore._getfile
Mads Kiilerich <madski@unity3d.com>
parents:
18998
diff
changeset
|
39 if not path: |
18155
5206af8894a3
largefiles: cleanup of warnings on errors getting largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
17439
diff
changeset
|
40 raise basestore.StoreError(filename, hash, self.url, |
16928
73b9286e667c
largefiles: lowercase messages
Martin Geisler <mg@aragost.com>
parents:
15371
diff
changeset
|
41 _("can't get file locally")) |
27769
40bd01be5c25
largefiles: use a context manager in _getfile
Bryan O'Sullivan <bryano@fb.com>
parents:
24630
diff
changeset
|
42 with open(path, 'rb') as fd: |
15317
41f371150ccb
largefiles: make the store primary, and the user cache secondary
Benjamin Pollack <benjamin@bitquabit.com>
parents:
15316
diff
changeset
|
43 return lfutil.copyandhash(fd, tmpfile) |
15168 | 44 |
45 def _verifyfile(self, cctx, cset, contents, standin, verified): | |
46 filename = lfutil.splitstandin(standin) | |
47 if not filename: | |
48 return False | |
49 fctx = cctx[standin] | |
50 key = (filename, fctx.filenode()) | |
51 if key in verified: | |
52 return False | |
53 | |
54 expecthash = fctx.data()[0:40] | |
24630
c082a4756ed7
largefiles: use lfutil.findstorepath() when verifying a local repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
19007
diff
changeset
|
55 storepath, exists = lfutil.findstorepath(self.remote, expecthash) |
15168 | 56 verified.add(key) |
24630
c082a4756ed7
largefiles: use lfutil.findstorepath() when verifying a local repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
19007
diff
changeset
|
57 if not exists: |
15168 | 58 self.ui.warn( |
18545
a49b7c9fc246
largefiles: report localstore errors with single line warnings messages
Mads Kiilerich <madski@unity3d.com>
parents:
18155
diff
changeset
|
59 _('changeset %s: %s references missing %s\n') |
a49b7c9fc246
largefiles: report localstore errors with single line warnings messages
Mads Kiilerich <madski@unity3d.com>
parents:
18155
diff
changeset
|
60 % (cset, filename, storepath)) |
15168 | 61 return True # failed |
62 | |
63 if contents: | |
64 actualhash = lfutil.hashfile(storepath) | |
65 if actualhash != expecthash: | |
66 self.ui.warn( | |
18545
a49b7c9fc246
largefiles: report localstore errors with single line warnings messages
Mads Kiilerich <madski@unity3d.com>
parents:
18155
diff
changeset
|
67 _('changeset %s: %s references corrupted %s\n') |
a49b7c9fc246
largefiles: report localstore errors with single line warnings messages
Mads Kiilerich <madski@unity3d.com>
parents:
18155
diff
changeset
|
68 % (cset, filename, storepath)) |
15168 | 69 return True # failed |
70 return False |