Mercurial > hg
annotate hgext/largefiles/lfcommands.py @ 51502:a5d8f261b716 stable
obsutil: sort metadata before comparing in geteffectflag()
This is probably less important now that we dropped Python 2. We do still
support Python 3.6 though, and the dictionaries aren't ordered there either
(that was a big change that came with 3.7).
Still, maybe it's a good idea to sort metadata explicitly.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Wed, 13 Mar 2024 16:22:13 -0300 |
parents | ee393dbfe5cb |
children | f4733654f144 |
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:
15230
diff
changeset
|
9 '''High-level command function for lfconvert, plus the cmdtable.''' |
15168 | 10 |
49248
63fd0282ad40
node: stop converting binascii.Error to TypeError in bin()
Manuel Jacob <me@manueljacob.de>
parents:
48875
diff
changeset
|
11 import binascii |
29308
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
12 import os |
15168 | 13 import shutil |
14 | |
15 from mercurial.i18n import _ | |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
16 from mercurial.node import ( |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
17 bin, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
18 hex, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
19 ) |
15168 | 20 |
29308
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
21 from mercurial import ( |
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
22 cmdutil, |
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
23 context, |
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
24 error, |
41061
98681293c890
largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40675
diff
changeset
|
25 exthelper, |
29308
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
26 hg, |
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
27 lock, |
48116
5ced12cfa41b
errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
48106
diff
changeset
|
28 logcmdutil, |
29317
5ec25534ef4f
largefiles: rename match_ to matchmod import in lfcommands
liscju <piotr.listkiewicz@gmail.com>
parents:
29308
diff
changeset
|
29 match as matchmod, |
29308
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
30 scmutil, |
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
31 util, |
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
32 ) |
44062
2d49482d0dd4
hgext: replace references to hashlib.sha1 with hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
33 from mercurial.utils import hashutil |
25325
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
34 |
29308
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
35 from ..convert import ( |
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
36 convcmd, |
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
37 filemap, |
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
38 ) |
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
39 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
40 from . import lfutil, storefactory |
29308
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
41 |
8c378a7d2aa6
py3: make largefiles/lfcommands.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
42 release = lock.release |
15168 | 43 |
44 # -- Commands ---------------------------------------------------------- | |
45 | |
41061
98681293c890
largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40675
diff
changeset
|
46 eh = exthelper.exthelper() |
21242
4c94229c51fb
largefiles: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21088
diff
changeset
|
47 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
48 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
49 @eh.command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
50 b'lfconvert', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
51 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
52 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
53 b's', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
54 b'size', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
55 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
56 _(b'minimum size (MB) for files to be converted as largefiles'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
57 b'SIZE', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
58 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
59 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
60 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
61 b'to-normal', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
62 False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
63 _(b'convert from a largefiles repo to a normal repo'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
64 ), |
21242
4c94229c51fb
largefiles: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21088
diff
changeset
|
65 ], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
66 _(b'hg lfconvert SOURCE DEST [FILE ...]'), |
21785
a730b002c5db
largefiles: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21770
diff
changeset
|
67 norepo=True, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
68 inferrepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
69 ) |
15168 | 70 def lfconvert(ui, src, dest, *pats, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45455
diff
changeset
|
71 """convert a normal repository to a largefiles repository |
15168 | 72 |
15230 | 73 Convert repository SOURCE to a new repository DEST, identical to |
74 SOURCE except that certain files will be converted as largefiles: | |
75 specifically, any file that matches any PATTERN *or* whose size is | |
76 above the minimum size threshold is converted as a largefile. The | |
77 size used to determine whether or not to track a file as a | |
78 largefile is the size of the first version of the file. The | |
79 minimum size can be specified either with --size or in | |
80 configuration as ``largefiles.size``. | |
81 | |
82 After running this command you will need to make sure that | |
83 largefiles is enabled anywhere you intend to push the new | |
84 repository. | |
85 | |
15332
0db47b8d025f
largefiles: rename lfconvert --tonormal option to --to-normal
Greg Ward <greg@gerg.ca>
parents:
15317
diff
changeset
|
86 Use --to-normal to convert largefiles back to normal files; after |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45455
diff
changeset
|
87 this, the DEST repository can be used without largefiles at all.""" |
15168 | 88 |
50880
ee393dbfe5cb
largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50110
diff
changeset
|
89 if opts['to_normal']: |
15168 | 90 tolfile = False |
91 else: | |
92 tolfile = True | |
50880
ee393dbfe5cb
largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50110
diff
changeset
|
93 size = lfutil.getminsize(ui, True, opts.get('size'), default=None) |
15340
0e58513cc59a
largefiles: rearrange how lfconvert detects non-local repos
Greg Ward <greg@gerg.ca>
parents:
15339
diff
changeset
|
94 |
0e58513cc59a
largefiles: rearrange how lfconvert detects non-local repos
Greg Ward <greg@gerg.ca>
parents:
15339
diff
changeset
|
95 if not hg.islocal(src): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
96 raise error.Abort(_(b'%s is not a local Mercurial repo') % src) |
15340
0e58513cc59a
largefiles: rearrange how lfconvert detects non-local repos
Greg Ward <greg@gerg.ca>
parents:
15339
diff
changeset
|
97 if not hg.islocal(dest): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
98 raise error.Abort(_(b'%s is not a local Mercurial repo') % dest) |
15340
0e58513cc59a
largefiles: rearrange how lfconvert detects non-local repos
Greg Ward <greg@gerg.ca>
parents:
15339
diff
changeset
|
99 |
15339
be1377d19018
largefiles: test lfconvert error handling; remove redundant code
Greg Ward <greg@gerg.ca>
parents:
15332
diff
changeset
|
100 rsrc = hg.repository(ui, src) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
101 ui.status(_(b'initializing destination %s\n') % dest) |
15339
be1377d19018
largefiles: test lfconvert error handling; remove redundant code
Greg Ward <greg@gerg.ca>
parents:
15332
diff
changeset
|
102 rdst = hg.repository(ui, dest, create=True) |
15168 | 103 |
15171
547da6115d1d
largefiles: eliminate naked exceptions
Matt Mackall <mpm@selenic.com>
parents:
15170
diff
changeset
|
104 success = False |
16717
1eede2ea2041
largefiles: use wlock for lfconvert (issue3444)
Mads Kiilerich <mads@kiilerich.com>
parents:
16551
diff
changeset
|
105 dstwlock = dstlock = None |
15168 | 106 try: |
107 # Get a list of all changesets in the source. The easy way to do this | |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
17299
diff
changeset
|
108 # is to simply walk the changelog, using changelog.nodesbetween(). |
15168 | 109 # Take a look at mercurial/revlog.py:639 for more details. |
110 # Use a generator instead of a list to decrease memory usage | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
111 ctxs = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
112 rsrc[ctx] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
113 for ctx in rsrc.changelog.nodesbetween(None, rsrc.heads())[0] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
114 ) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46113
diff
changeset
|
115 revmap = {rsrc.nullid: rdst.nullid} |
15168 | 116 if tolfile: |
25325
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
117 # Lock destination to prevent modification while it is converted to. |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
118 # Don't need to lock src because we are just reading from its |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
119 # history which can't change. |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
120 dstwlock = rdst.wlock() |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
121 dstlock = rdst.lock() |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
122 |
15168 | 123 lfiles = set() |
124 normalfiles = set() | |
125 if not pats: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
126 pats = ui.configlist(lfutil.longname, b'patterns') |
15168 | 127 if pats: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
128 matcher = matchmod.match(rsrc.root, b'', list(pats)) |
15168 | 129 else: |
130 matcher = None | |
131 | |
132 lfiletohash = {} | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
133 with ui.makeprogress( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
134 _(b'converting revisions'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
135 unit=_(b'revisions'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
136 total=rsrc[b'tip'].rev(), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
137 ) as progress: |
39390
a65ad9b22a00
largefiles: use a context manager to control the progress bar lifetime
Matt Harbison <matt_harbison@yahoo.com>
parents:
38407
diff
changeset
|
138 for ctx in ctxs: |
a65ad9b22a00
largefiles: use a context manager to control the progress bar lifetime
Matt Harbison <matt_harbison@yahoo.com>
parents:
38407
diff
changeset
|
139 progress.update(ctx.rev()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
140 _lfconvert_addchangeset( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
141 rsrc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
142 rdst, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
143 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
144 revmap, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
145 lfiles, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
146 normalfiles, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
147 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
148 size, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
149 lfiletohash, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
150 ) |
15168 | 151 |
28559
30863ca01c6b
largefiles: replace invocation of os.path module by vfs in lfcommands.py
liscju <piotr.listkiewicz@gmail.com>
parents:
28464
diff
changeset
|
152 if rdst.wvfs.exists(lfutil.shortname): |
30863ca01c6b
largefiles: replace invocation of os.path module by vfs in lfcommands.py
liscju <piotr.listkiewicz@gmail.com>
parents:
28464
diff
changeset
|
153 rdst.wvfs.rmtree(lfutil.shortname) |
15168 | 154 |
155 for f in lfiletohash.keys(): | |
28559
30863ca01c6b
largefiles: replace invocation of os.path module by vfs in lfcommands.py
liscju <piotr.listkiewicz@gmail.com>
parents:
28464
diff
changeset
|
156 if rdst.wvfs.isfile(f): |
30863ca01c6b
largefiles: replace invocation of os.path module by vfs in lfcommands.py
liscju <piotr.listkiewicz@gmail.com>
parents:
28464
diff
changeset
|
157 rdst.wvfs.unlink(f) |
15168 | 158 try: |
28559
30863ca01c6b
largefiles: replace invocation of os.path module by vfs in lfcommands.py
liscju <piotr.listkiewicz@gmail.com>
parents:
28464
diff
changeset
|
159 rdst.wvfs.removedirs(rdst.wvfs.dirname(f)) |
15171
547da6115d1d
largefiles: eliminate naked exceptions
Matt Mackall <mpm@selenic.com>
parents:
15170
diff
changeset
|
160 except OSError: |
15168 | 161 pass |
162 | |
15303
07811b3b119b
largefiles: include 'largefiles' in converted repository requirements
Eli Carter <eli.carter@tektronix.com>
parents:
15255
diff
changeset
|
163 # If there were any files converted to largefiles, add largefiles |
07811b3b119b
largefiles: include 'largefiles' in converted repository requirements
Eli Carter <eli.carter@tektronix.com>
parents:
15255
diff
changeset
|
164 # to the destination repository's requirements. |
07811b3b119b
largefiles: include 'largefiles' in converted repository requirements
Eli Carter <eli.carter@tektronix.com>
parents:
15255
diff
changeset
|
165 if lfiles: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
166 rdst.requirements.add(b'largefiles') |
45106
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44062
diff
changeset
|
167 scmutil.writereporequirements(rdst) |
15168 | 168 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
169 |
25325
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
170 class lfsource(filemap.filemap_source): |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
171 def __init__(self, ui, source): |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
172 super(lfsource, self).__init__(ui, source, None) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
173 self.filemapper.rename[lfutil.shortname] = b'.' |
25325
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
174 |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
175 def getfile(self, name, rev): |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
176 realname, realrev = rev |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
177 f = super(lfsource, self).getfile(name, rev) |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
178 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
179 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
180 not realname.startswith(lfutil.shortnameslash) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
181 or f[0] is None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
182 ): |
25325
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
183 return f |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
184 |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
185 # Substitute in the largefile data for the hash |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
186 hash = f[0].strip() |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
187 path = lfutil.findfile(rsrc, hash) |
15168 | 188 |
25325
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
189 if path is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
190 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
191 _(b"missing largefile for '%s' in %s") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
192 % (realname, realrev) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
193 ) |
27774
8ceaaf63ca80
largefiles: use util.readfile in lfconvert
Bryan O'Sullivan <bryano@fb.com>
parents:
27651
diff
changeset
|
194 return util.readfile(path), f[1] |
25325
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
195 |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
196 class converter(convcmd.converter): |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
197 def __init__(self, ui, source, dest, revmapfile, opts): |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
198 src = lfsource(ui, source) |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
199 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
200 super(converter, self).__init__( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
201 ui, src, dest, revmapfile, opts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
202 ) |
25325
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
203 |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
204 found, missing = downloadlfiles(ui, rsrc) |
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
205 if missing != 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
206 raise error.Abort(_(b"all largefiles must be present locally")) |
25325
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
207 |
25560
2b2108c35bfc
largefiles: restore the original converter class after lfconvert --to-normal
Matt Harbison <matt_harbison@yahoo.com>
parents:
25508
diff
changeset
|
208 orig = convcmd.converter |
25325
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
209 convcmd.converter = converter |
25560
2b2108c35bfc
largefiles: restore the original converter class after lfconvert --to-normal
Matt Harbison <matt_harbison@yahoo.com>
parents:
25508
diff
changeset
|
210 |
2b2108c35bfc
largefiles: restore the original converter class after lfconvert --to-normal
Matt Harbison <matt_harbison@yahoo.com>
parents:
25508
diff
changeset
|
211 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
212 convcmd.convert( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
213 ui, src, dest, source_type=b'hg', dest_type=b'hg' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
214 ) |
25560
2b2108c35bfc
largefiles: restore the original converter class after lfconvert --to-normal
Matt Harbison <matt_harbison@yahoo.com>
parents:
25508
diff
changeset
|
215 finally: |
2b2108c35bfc
largefiles: restore the original converter class after lfconvert --to-normal
Matt Harbison <matt_harbison@yahoo.com>
parents:
25508
diff
changeset
|
216 convcmd.converter = orig |
15171
547da6115d1d
largefiles: eliminate naked exceptions
Matt Mackall <mpm@selenic.com>
parents:
15170
diff
changeset
|
217 success = True |
15168 | 218 finally: |
25325
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
219 if tolfile: |
50110
a860298776f0
lfconvert: use a `changing_parents` context to clear the dirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50051
diff
changeset
|
220 # XXX is this the right context semantically ? |
a860298776f0
lfconvert: use a `changing_parents` context to clear the dirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50051
diff
changeset
|
221 with rdst.dirstate.changing_parents(rdst): |
50051
9409f2946f16
dirstate: use `dirstate.change_files` to scope the change in `lfconvert`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50019
diff
changeset
|
222 rdst.dirstate.clear() |
25325
fcd2f9b06629
largefiles: use the convert extension for 'lfconvert --to-normal'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
223 release(dstlock, dstwlock) |
15171
547da6115d1d
largefiles: eliminate naked exceptions
Matt Mackall <mpm@selenic.com>
parents:
15170
diff
changeset
|
224 if not success: |
547da6115d1d
largefiles: eliminate naked exceptions
Matt Mackall <mpm@selenic.com>
parents:
15170
diff
changeset
|
225 # we failed, remove the new directory |
547da6115d1d
largefiles: eliminate naked exceptions
Matt Mackall <mpm@selenic.com>
parents:
15170
diff
changeset
|
226 shutil.rmtree(rdst.root) |
15168 | 227 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
228 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
229 def _lfconvert_addchangeset( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
230 rsrc, rdst, ctx, revmap, lfiles, normalfiles, matcher, size, lfiletohash |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
231 ): |
15168 | 232 # Convert src parents to dst parents |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
233 parents = _convertparents(ctx, revmap) |
15168 | 234 |
235 # Generate list of changed files | |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
236 files = _getchangedfiles(ctx, parents) |
15168 | 237 |
238 dstfiles = [] | |
239 for f in files: | |
240 if f not in lfiles and f not in normalfiles: | |
241 islfile = _islfile(f, ctx, matcher, size) | |
242 # If this file was renamed or copied then copy | |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
17299
diff
changeset
|
243 # the largefile-ness of its predecessor |
15168 | 244 if f in ctx.manifest(): |
245 fctx = ctx.filectx(f) | |
41775
a86e22007b54
largefiles: migrate to new method for getting copy info
Martin von Zweigbergk <martinvonz@google.com>
parents:
41598
diff
changeset
|
246 renamed = fctx.copysource() |
39710
7375a9ab0149
filectx: fix return of renamed
Sean Farley <sean@farley.io>
parents:
39390
diff
changeset
|
247 if renamed is None: |
7375a9ab0149
filectx: fix return of renamed
Sean Farley <sean@farley.io>
parents:
39390
diff
changeset
|
248 # the code below assumes renamed to be a boolean or a list |
7375a9ab0149
filectx: fix return of renamed
Sean Farley <sean@farley.io>
parents:
39390
diff
changeset
|
249 # and won't quite work with the value None |
7375a9ab0149
filectx: fix return of renamed
Sean Farley <sean@farley.io>
parents:
39390
diff
changeset
|
250 renamed = False |
41775
a86e22007b54
largefiles: migrate to new method for getting copy info
Martin von Zweigbergk <martinvonz@google.com>
parents:
41598
diff
changeset
|
251 renamedlfile = renamed and renamed in lfiles |
15168 | 252 islfile |= renamedlfile |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
253 if b'l' in fctx.flags(): |
15168 | 254 if renamedlfile: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
255 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
256 _(b'renamed/copied largefile %s becomes symlink') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
257 % f |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
258 ) |
15168 | 259 islfile = False |
260 if islfile: | |
261 lfiles.add(f) | |
262 else: | |
263 normalfiles.add(f) | |
264 | |
265 if f in lfiles: | |
31618
8228bc8fed8c
largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31613
diff
changeset
|
266 fstandin = lfutil.standin(f) |
8228bc8fed8c
largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31613
diff
changeset
|
267 dstfiles.append(fstandin) |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15253
diff
changeset
|
268 # largefile in manifest if it has not been removed/renamed |
15168 | 269 if f in ctx.manifest(): |
15808
62098aeb1e15
largefiles: don't reference uninitialized variable (issue3092)
Levi Bard <levi@unity3d.com>
parents:
15793
diff
changeset
|
270 fctx = ctx.filectx(f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
271 if b'l' in fctx.flags(): |
41775
a86e22007b54
largefiles: migrate to new method for getting copy info
Martin von Zweigbergk <martinvonz@google.com>
parents:
41598
diff
changeset
|
272 renamed = fctx.copysource() |
a86e22007b54
largefiles: migrate to new method for getting copy info
Martin von Zweigbergk <martinvonz@google.com>
parents:
41598
diff
changeset
|
273 if renamed and renamed in lfiles: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
274 raise error.Abort( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
275 _(b'largefile %s becomes symlink') % f |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
276 ) |
15168 | 277 |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15253
diff
changeset
|
278 # largefile was modified, update standins |
44062
2d49482d0dd4
hgext: replace references to hashlib.sha1 with hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
279 m = hashutil.sha1(b'') |
15168 | 280 m.update(ctx[f].data()) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
281 hash = hex(m.digest()) |
15168 | 282 if f not in lfiletohash or lfiletohash[f] != hash: |
19089
0509ae083ec1
largefiles: use repo.wwrite for writing standins (issue3909)
Mads Kiilerich <madski@unity3d.com>
parents:
18976
diff
changeset
|
283 rdst.wwrite(f, ctx[f].data(), ctx[f].flags()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
284 executable = b'x' in ctx[f].flags() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
285 lfutil.writestandin(rdst, fstandin, hash, executable) |
15168 | 286 lfiletohash[f] = hash |
287 else: | |
288 # normal file | |
289 dstfiles.append(f) | |
290 | |
291 def getfilectx(repo, memctx, f): | |
31613
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31612
diff
changeset
|
292 srcfname = lfutil.splitstandin(f) |
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31612
diff
changeset
|
293 if srcfname is not None: |
15168 | 294 # if the file isn't in the manifest then it was removed |
31612
c93cdfa131a8
misc: update descriptions about removed file for filectxfn
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30269
diff
changeset
|
295 # or renamed, return None to indicate this |
15168 | 296 try: |
297 fctx = ctx.filectx(srcfname) | |
298 except error.LookupError: | |
22296
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22197
diff
changeset
|
299 return None |
41775
a86e22007b54
largefiles: migrate to new method for getting copy info
Martin von Zweigbergk <martinvonz@google.com>
parents:
41598
diff
changeset
|
300 renamed = fctx.copysource() |
15168 | 301 if renamed: |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15253
diff
changeset
|
302 # standin is always a largefile because largefile-ness |
15168 | 303 # doesn't change after rename or copy |
41775
a86e22007b54
largefiles: migrate to new method for getting copy info
Martin von Zweigbergk <martinvonz@google.com>
parents:
41598
diff
changeset
|
304 renamed = lfutil.standin(renamed) |
15168 | 305 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
306 return context.memfilectx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
307 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
308 memctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
309 f, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
310 lfiletohash[srcfname] + b'\n', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
311 b'l' in fctx.flags(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
312 b'x' in fctx.flags(), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
313 renamed, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
314 ) |
15168 | 315 else: |
21689
503bb3af70fe
memfilectx: call super.__init__ instead of duplicating code
Sean Farley <sean.michael.farley@gmail.com>
parents:
21242
diff
changeset
|
316 return _getnormalcontext(repo, ctx, f, revmap) |
15168 | 317 |
318 # Commit | |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
319 _commitcontext(rdst, parents, ctx, dstfiles, getfilectx, revmap) |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
320 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
321 |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
322 def _commitcontext(rdst, parents, ctx, dstfiles, getfilectx, revmap): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
323 mctx = context.memctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
324 rdst, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
325 parents, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
326 ctx.description(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
327 dstfiles, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
328 getfilectx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
329 ctx.user(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
330 ctx.date(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
331 ctx.extra(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
332 ) |
15168 | 333 ret = rdst.commitctx(mctx) |
23276
4be754832829
largefiles: move "copyalltostore" invocation into "markcommitted"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23189
diff
changeset
|
334 lfutil.copyalltostore(rdst, ret) |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16439
diff
changeset
|
335 rdst.setparents(ret) |
15168 | 336 revmap[ctx.node()] = rdst.changelog.tip() |
337 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
338 |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
339 # Generate list of changed files |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
340 def _getchangedfiles(ctx, parents): |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
341 files = set(ctx.files()) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46113
diff
changeset
|
342 if ctx.repo().nullid not in parents: |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
343 mc = ctx.manifest() |
41400
4a409c19831f
largefiles: avoid walking full manifest
Martin von Zweigbergk <martinvonz@google.com>
parents:
41397
diff
changeset
|
344 for pctx in ctx.parents(): |
4a409c19831f
largefiles: avoid walking full manifest
Martin von Zweigbergk <martinvonz@google.com>
parents:
41397
diff
changeset
|
345 for fn in pctx.manifest().diff(mc): |
4a409c19831f
largefiles: avoid walking full manifest
Martin von Zweigbergk <martinvonz@google.com>
parents:
41397
diff
changeset
|
346 files.add(fn) |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
347 return files |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
348 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
349 |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
350 # Convert src parents to dst parents |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
351 def _convertparents(ctx, revmap): |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
352 parents = [] |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
353 for p in ctx.parents(): |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
354 parents.append(revmap[p.node()]) |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
355 while len(parents) < 2: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46113
diff
changeset
|
356 parents.append(ctx.repo().nullid) |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
357 return parents |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
358 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
359 |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
360 # Get memfilectx for a normal file |
21689
503bb3af70fe
memfilectx: call super.__init__ instead of duplicating code
Sean Farley <sean.michael.farley@gmail.com>
parents:
21242
diff
changeset
|
361 def _getnormalcontext(repo, ctx, f, revmap): |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
362 try: |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
363 fctx = ctx.filectx(f) |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
364 except error.LookupError: |
22296
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22197
diff
changeset
|
365 return None |
41775
a86e22007b54
largefiles: migrate to new method for getting copy info
Martin von Zweigbergk <martinvonz@google.com>
parents:
41598
diff
changeset
|
366 renamed = fctx.copysource() |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
367 |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
368 data = fctx.data() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
369 if f == b'.hgtags': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
370 data = _converttags(repo.ui, revmap, data) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
371 return context.memfilectx( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
372 repo, ctx, f, data, b'l' in fctx.flags(), b'x' in fctx.flags(), renamed |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
373 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
374 |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
375 |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
376 # Remap tag data using a revision map |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
377 def _converttags(ui, revmap, data): |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
378 newdata = [] |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
379 for line in data.splitlines(): |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
380 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
381 id, name = line.split(b' ', 1) |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
382 except ValueError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
383 ui.warn(_(b'skipping incorrectly formatted tag %s\n') % line) |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
384 continue |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
385 try: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
386 newid = bin(id) |
49248
63fd0282ad40
node: stop converting binascii.Error to TypeError in bin()
Manuel Jacob <me@manueljacob.de>
parents:
48875
diff
changeset
|
387 except binascii.Error: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
388 ui.warn(_(b'skipping incorrectly formatted id %s\n') % id) |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
389 continue |
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
390 try: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
391 newdata.append(b'%s %s\n' % (hex(revmap[newid]), name)) |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
392 except KeyError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
393 ui.warn(_(b'no mapping for id %s\n') % id) |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
394 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
395 return b''.join(newdata) |
15811
b9886dde3649
largefiles: remove pasted code
Levi Bard <levi@unity3d.com>
parents:
15809
diff
changeset
|
396 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
397 |
15168 | 398 def _islfile(file, ctx, matcher, size): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45455
diff
changeset
|
399 """Return true if file should be considered a largefile, i.e. |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45455
diff
changeset
|
400 matcher matches it or it is larger than size.""" |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15230
diff
changeset
|
401 # never store special .hg* files as largefiles |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
402 if file == b'.hgtags' or file == b'.hgignore' or file == b'.hgsigs': |
15168 | 403 return False |
404 if matcher and matcher(file): | |
405 return True | |
406 try: | |
407 return ctx.filectx(file).size() >= size * 1024 * 1024 | |
408 except error.LookupError: | |
409 return False | |
410 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
411 |
15168 | 412 def uploadlfiles(ui, rsrc, rdst, files): |
413 '''upload largefiles to the central store''' | |
414 | |
15317
41f371150ccb
largefiles: make the store primary, and the user cache secondary
Benjamin Pollack <benjamin@bitquabit.com>
parents:
15313
diff
changeset
|
415 if not files: |
15168 | 416 return |
417 | |
29355
85868ecf2c0d
largefiles: make storefactory._openstore public
liscju <piotr.listkiewicz@gmail.com>
parents:
29341
diff
changeset
|
418 store = storefactory.openstore(rsrc, rdst, put=True) |
15168 | 419 |
420 at = 0 | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
421 ui.debug(b"sending statlfile command for %d largefiles\n" % len(files)) |
17127
9e1616307c4c
largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16727
diff
changeset
|
422 retval = store.exists(files) |
36311
b9da10f310f4
largfiles: replace filter() with listcomp when result needs to be a list
Augie Fackler <augie@google.com>
parents:
35563
diff
changeset
|
423 files = [h for h in files if not retval[h]] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
424 ui.debug(b"%d largefiles need to be uploaded\n" % len(files)) |
17127
9e1616307c4c
largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16727
diff
changeset
|
425 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
426 with ui.makeprogress( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
427 _(b'uploading largefiles'), unit=_(b'files'), total=len(files) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
428 ) as progress: |
39390
a65ad9b22a00
largefiles: use a context manager to control the progress bar lifetime
Matt Harbison <matt_harbison@yahoo.com>
parents:
38407
diff
changeset
|
429 for hash in files: |
a65ad9b22a00
largefiles: use a context manager to control the progress bar lifetime
Matt Harbison <matt_harbison@yahoo.com>
parents:
38407
diff
changeset
|
430 progress.update(at) |
a65ad9b22a00
largefiles: use a context manager to control the progress bar lifetime
Matt Harbison <matt_harbison@yahoo.com>
parents:
38407
diff
changeset
|
431 source = lfutil.findfile(rsrc, hash) |
a65ad9b22a00
largefiles: use a context manager to control the progress bar lifetime
Matt Harbison <matt_harbison@yahoo.com>
parents:
38407
diff
changeset
|
432 if not source: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
433 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
434 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
435 b'largefile %s missing from store' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
436 b' (needs to be uploaded)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
437 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
438 % hash |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
439 ) |
39390
a65ad9b22a00
largefiles: use a context manager to control the progress bar lifetime
Matt Harbison <matt_harbison@yahoo.com>
parents:
38407
diff
changeset
|
440 # XXX check for errors here |
a65ad9b22a00
largefiles: use a context manager to control the progress bar lifetime
Matt Harbison <matt_harbison@yahoo.com>
parents:
38407
diff
changeset
|
441 store.put(source, hash) |
a65ad9b22a00
largefiles: use a context manager to control the progress bar lifetime
Matt Harbison <matt_harbison@yahoo.com>
parents:
38407
diff
changeset
|
442 at += 1 |
15168 | 443 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
444 |
15168 | 445 def verifylfiles(ui, repo, all=False, contents=False): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45455
diff
changeset
|
446 """Verify that every largefile revision in the current changeset |
15168 | 447 exists in the central store. With --contents, also verify that |
18574
4db9e31ae605
largefiles: docstrings for verify methods
Mads Kiilerich <mads@kiilerich.com>
parents:
18294
diff
changeset
|
448 the contents of each local largefile file revision are correct (SHA-1 hash |
15168 | 449 matches the revision ID). With --all, check every changeset in |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45455
diff
changeset
|
450 this repository.""" |
15168 | 451 if all: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
452 revs = repo.revs(b'all()') |
15168 | 453 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
454 revs = [b'.'] |
15168 | 455 |
29355
85868ecf2c0d
largefiles: make storefactory._openstore public
liscju <piotr.listkiewicz@gmail.com>
parents:
29341
diff
changeset
|
456 store = storefactory.openstore(repo) |
15168 | 457 return store.verify(revs, contents=contents) |
458 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
459 |
16700
28001e8a5149
largefiles: optimize performance when updating (issue3440)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16691
diff
changeset
|
460 def cachelfiles(ui, repo, node, filelist=None): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45455
diff
changeset
|
461 """cachelfiles ensures that all largefiles needed by the specified revision |
15168 | 462 are present in the repository's largefile cache. |
463 | |
464 returns a tuple (cached, missing). cached is the list of files downloaded | |
465 by this operation; missing is the list of files that were needed but could | |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45455
diff
changeset
|
466 not be found.""" |
15168 | 467 lfiles = lfutil.listlfiles(repo, node) |
16700
28001e8a5149
largefiles: optimize performance when updating (issue3440)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16691
diff
changeset
|
468 if filelist: |
28001e8a5149
largefiles: optimize performance when updating (issue3440)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16691
diff
changeset
|
469 lfiles = set(lfiles) & set(filelist) |
15168 | 470 toget = [] |
471 | |
31654
1af4a1641bdb
largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31618
diff
changeset
|
472 ctx = repo[node] |
15168 | 473 for lfile in lfiles: |
18728
1e636f7b1cfe
largefiles: simplify cachelfiles - don't spend a lot of time checking hashes
Mads Kiilerich <madski@unity3d.com>
parents:
18727
diff
changeset
|
474 try: |
31740
a40e979b9d97
largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31735
diff
changeset
|
475 expectedhash = lfutil.readasstandin(ctx[lfutil.standin(lfile)]) |
49306
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
49248
diff
changeset
|
476 except FileNotFoundError: |
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
49248
diff
changeset
|
477 continue # node must be None and standin wasn't found in wctx |
18728
1e636f7b1cfe
largefiles: simplify cachelfiles - don't spend a lot of time checking hashes
Mads Kiilerich <madski@unity3d.com>
parents:
18727
diff
changeset
|
478 if not lfutil.findfile(repo, expectedhash): |
15168 | 479 toget.append((lfile, expectedhash)) |
480 | |
481 if toget: | |
29355
85868ecf2c0d
largefiles: make storefactory._openstore public
liscju <piotr.listkiewicz@gmail.com>
parents:
29341
diff
changeset
|
482 store = storefactory.openstore(repo) |
15168 | 483 ret = store.get(toget) |
484 return ret | |
485 | |
486 return ([], []) | |
487 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
488 |
45453
39ddb1121c4e
largefiles: remove unused 'rev' parameter from downloadlfiles()
Yuya Nishihara <yuya@tcha.org>
parents:
45106
diff
changeset
|
489 def downloadlfiles(ui, repo): |
45454
ac7b9ed0a245
largefiles: replace use of walkchangerevs() with simple revset query
Yuya Nishihara <yuya@tcha.org>
parents:
45453
diff
changeset
|
490 tonode = repo.changelog.node |
16691
7d6a660ca151
largefiles: refactor downloading of all largefiles to generic function
Na'Tosha Bard <natosha@unity3d.com>
parents:
16687
diff
changeset
|
491 totalsuccess = 0 |
7d6a660ca151
largefiles: refactor downloading of all largefiles to generic function
Na'Tosha Bard <natosha@unity3d.com>
parents:
16687
diff
changeset
|
492 totalmissing = 0 |
45455
b0d45612c552
largefiles: walk history in ascending order while downloading all lfiles
Yuya Nishihara <yuya@tcha.org>
parents:
45454
diff
changeset
|
493 for rev in repo.revs(b'file(%s)', b'path:' + lfutil.shortname): |
45454
ac7b9ed0a245
largefiles: replace use of walkchangerevs() with simple revset query
Yuya Nishihara <yuya@tcha.org>
parents:
45453
diff
changeset
|
494 success, missing = cachelfiles(ui, repo, tonode(rev)) |
45453
39ddb1121c4e
largefiles: remove unused 'rev' parameter from downloadlfiles()
Yuya Nishihara <yuya@tcha.org>
parents:
45106
diff
changeset
|
495 totalsuccess += len(success) |
39ddb1121c4e
largefiles: remove unused 'rev' parameter from downloadlfiles()
Yuya Nishihara <yuya@tcha.org>
parents:
45106
diff
changeset
|
496 totalmissing += len(missing) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
497 ui.status(_(b"%d additional largefiles cached\n") % totalsuccess) |
16691
7d6a660ca151
largefiles: refactor downloading of all largefiles to generic function
Na'Tosha Bard <natosha@unity3d.com>
parents:
16687
diff
changeset
|
498 if totalmissing > 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
499 ui.status(_(b"%d largefiles failed to download\n") % totalmissing) |
16691
7d6a660ca151
largefiles: refactor downloading of all largefiles to generic function
Na'Tosha Bard <natosha@unity3d.com>
parents:
16687
diff
changeset
|
500 return totalsuccess, totalmissing |
7d6a660ca151
largefiles: refactor downloading of all largefiles to generic function
Na'Tosha Bard <natosha@unity3d.com>
parents:
16687
diff
changeset
|
501 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
502 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
503 def updatelfiles( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
504 ui, repo, filelist=None, printmessage=None, normallookup=False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
505 ): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45455
diff
changeset
|
506 """Update largefiles according to standins in the working directory |
23189
fb139f5553d6
largefiles: get function to write status messages via "getstatuswriter()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23139
diff
changeset
|
507 |
fb139f5553d6
largefiles: get function to write status messages via "getstatuswriter()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23139
diff
changeset
|
508 If ``printmessage`` is other than ``None``, it means "print (or |
fb139f5553d6
largefiles: get function to write status messages via "getstatuswriter()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23139
diff
changeset
|
509 ignore, for false) message forcibly". |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45455
diff
changeset
|
510 """ |
23189
fb139f5553d6
largefiles: get function to write status messages via "getstatuswriter()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23139
diff
changeset
|
511 statuswriter = lfutil.getstatuswriter(ui, repo, printmessage) |
27820
d2e9cc9edc08
with: use context manager for wlock in updatelfiles
Bryan O'Sullivan <bryano@fb.com>
parents:
27774
diff
changeset
|
512 with repo.wlock(): |
15168 | 513 lfdirstate = lfutil.openlfdirstate(ui, repo) |
514 lfiles = set(lfutil.listlfiles(repo)) | set(lfdirstate) | |
515 | |
516 if filelist is not None: | |
22197
f72d73937853
largefiles: update lfdirstate for unchanged largefiles during linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22095
diff
changeset
|
517 filelist = set(filelist) |
15168 | 518 lfiles = [f for f in lfiles if f in filelist] |
519 | |
50018
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
520 update = {} |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
521 dropped = set() |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
522 updated, removed = 0, 0 |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
523 wvfs = repo.wvfs |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
524 wctx = repo[None] |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
525 for lfile in lfiles: |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
526 lfileorig = os.path.relpath( |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
527 scmutil.backuppath(ui, repo, lfile), start=repo.root |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
528 ) |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
529 standin = lfutil.standin(lfile) |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
530 standinorig = os.path.relpath( |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
531 scmutil.backuppath(ui, repo, standin), start=repo.root |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
532 ) |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
533 if wvfs.exists(standin): |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
534 if wvfs.exists(standinorig) and wvfs.exists(lfile): |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
535 shutil.copyfile(wvfs.join(lfile), wvfs.join(lfileorig)) |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
536 wvfs.unlinkpath(standinorig) |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
537 expecthash = lfutil.readasstandin(wctx[standin]) |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
538 if expecthash != b'': |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
539 if lfile not in wctx: # not switched to normal file |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
540 if repo.dirstate.get_entry(standin).any_tracked: |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
541 wvfs.unlinkpath(lfile, ignoremissing=True) |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
542 else: |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
543 dropped.add(lfile) |
35168
b175e54c1103
largefiles: pay attention to dropped standin files when updating largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents:
34756
diff
changeset
|
544 |
50018
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
545 # allocate an entry in largefiles dirstate to prevent |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
546 # lfilesrepo.status() from reporting missing files as |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
547 # removed. |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
548 lfdirstate.hacky_extension_update_file( |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
549 lfile, |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
550 p1_tracked=True, |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
551 wc_tracked=True, |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
552 possibly_dirty=True, |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
553 ) |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
554 update[lfile] = expecthash |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
555 else: |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
556 # Remove lfiles for which the standin is deleted, unless the |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
557 # lfile is added to the repository again. This happens when a |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
558 # largefile is converted back to a normal file: the standin |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
559 # disappears, but a new (normal) file appears as the lfile. |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
560 if ( |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
561 wvfs.exists(lfile) |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
562 and repo.dirstate.normalize(lfile) not in wctx |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
563 ): |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
564 wvfs.unlinkpath(lfile) |
ef1540c57730
largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50017
diff
changeset
|
565 removed += 1 |
20063
8a021cd38719
largefiles: update in two steps, handle interrupted updates better
Mads Kiilerich <madski@unity3d.com>
parents:
20062
diff
changeset
|
566 |
8a021cd38719
largefiles: update in two steps, handle interrupted updates better
Mads Kiilerich <madski@unity3d.com>
parents:
20062
diff
changeset
|
567 # largefile processing might be slow and be interrupted - be prepared |
48168
df3021c1f093
largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
48116
diff
changeset
|
568 lfdirstate.write(repo.currenttransaction()) |
20063
8a021cd38719
largefiles: update in two steps, handle interrupted updates better
Mads Kiilerich <madski@unity3d.com>
parents:
20062
diff
changeset
|
569 |
47658
f0cf560475a3
largefiles: replace use of synclfdirstate with drop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
47651
diff
changeset
|
570 if lfiles: |
f0cf560475a3
largefiles: replace use of synclfdirstate with drop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
47651
diff
changeset
|
571 lfiles = [f for f in lfiles if f not in dropped] |
35168
b175e54c1103
largefiles: pay attention to dropped standin files when updating largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents:
34756
diff
changeset
|
572 |
47658
f0cf560475a3
largefiles: replace use of synclfdirstate with drop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
47651
diff
changeset
|
573 for f in dropped: |
f0cf560475a3
largefiles: replace use of synclfdirstate with drop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
47651
diff
changeset
|
574 repo.wvfs.unlinkpath(lfutil.standin(f)) |
f0cf560475a3
largefiles: replace use of synclfdirstate with drop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
47651
diff
changeset
|
575 # This needs to happen for dropped files, otherwise they stay in |
f0cf560475a3
largefiles: replace use of synclfdirstate with drop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
47651
diff
changeset
|
576 # the M state. |
48001
af84aa1a66f1
dirstate: use `reset_state` instead of `dropfile` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47988
diff
changeset
|
577 lfdirstate._map.reset_state(f) |
20063
8a021cd38719
largefiles: update in two steps, handle interrupted updates better
Mads Kiilerich <madski@unity3d.com>
parents:
20062
diff
changeset
|
578 |
47658
f0cf560475a3
largefiles: replace use of synclfdirstate with drop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
47651
diff
changeset
|
579 statuswriter(_(b'getting changed largefiles\n')) |
f0cf560475a3
largefiles: replace use of synclfdirstate with drop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
47651
diff
changeset
|
580 cachelfiles(ui, repo, None, lfiles) |
47651
40811cc7fa56
largefile: consider `updatelfiles` as a `parentchange`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
581 |
50019
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
582 for lfile in lfiles: |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
583 update1 = 0 |
20063
8a021cd38719
largefiles: update in two steps, handle interrupted updates better
Mads Kiilerich <madski@unity3d.com>
parents:
20062
diff
changeset
|
584 |
50019
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
585 expecthash = update.get(lfile) |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
586 if expecthash: |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
587 if not lfutil.copyfromcache(repo, expecthash, lfile): |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
588 # failed ... but already removed and set to normallookup |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
589 continue |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
590 # Synchronize largefile dirstate to the last modified |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
591 # time of the file |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
592 lfdirstate.hacky_extension_update_file( |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
593 lfile, |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
594 p1_tracked=True, |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
595 wc_tracked=True, |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
596 ) |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
597 update1 = 1 |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
598 |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
599 # copy the exec mode of largefile standin from the repository's |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
600 # dirstate to its state in the lfdirstate. |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
601 standin = lfutil.standin(lfile) |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
602 if wvfs.exists(standin): |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
603 # exec is decided by the users permissions using mask 0o100 |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
604 standinexec = wvfs.stat(standin).st_mode & 0o100 |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
605 st = wvfs.stat(lfile) |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
606 mode = st.st_mode |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
607 if standinexec != mode & 0o100: |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
608 # first remove all X bits, then shift all R bits to X |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
609 mode &= ~0o111 |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
610 if standinexec: |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
611 mode |= (mode >> 2) & 0o111 & ~util.umask |
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
612 wvfs.chmod(lfile, mode) |
20063
8a021cd38719
largefiles: update in two steps, handle interrupted updates better
Mads Kiilerich <madski@unity3d.com>
parents:
20062
diff
changeset
|
613 update1 = 1 |
8a021cd38719
largefiles: update in two steps, handle interrupted updates better
Mads Kiilerich <madski@unity3d.com>
parents:
20062
diff
changeset
|
614 |
50019
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
615 updated += update1 |
20063
8a021cd38719
largefiles: update in two steps, handle interrupted updates better
Mads Kiilerich <madski@unity3d.com>
parents:
20062
diff
changeset
|
616 |
50019
eed104af7401
largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50018
diff
changeset
|
617 lfutil.synclfdirstate(repo, lfdirstate, lfile, normallookup) |
15168 | 618 |
48168
df3021c1f093
largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
48116
diff
changeset
|
619 lfdirstate.write(repo.currenttransaction()) |
23189
fb139f5553d6
largefiles: get function to write status messages via "getstatuswriter()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23139
diff
changeset
|
620 if lfiles: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
621 statuswriter( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
622 _(b'%d largefiles updated, %d removed\n') % (updated, removed) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
623 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
624 |
15168 | 625 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
626 @eh.command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
627 b'lfpull', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
628 [(b'r', b'rev', [], _(b'pull largefiles for these revisions'))] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
629 + cmdutil.remoteopts, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
630 _(b'-r REV... [-e CMD] [--remotecmd CMD] [SOURCE]'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
631 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
632 def lfpull(ui, repo, source=b"default", **opts): |
18976
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
633 """pull largefiles for the specified revisions from the specified source |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
634 |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
635 Pull largefiles that are referenced from local changesets but missing |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
636 locally, pulling from a remote repository to the local cache. |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
637 |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
638 If SOURCE is omitted, the 'default' path will be used. |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
639 See :hg:`help urls` for more information. |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
640 |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
641 .. container:: verbose |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
642 |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
643 Some examples: |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
644 |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
645 - pull largefiles for all branch heads:: |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
646 |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
647 hg lfpull -r "head() and not closed()" |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
648 |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
649 - pull largefiles on the default branch:: |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
650 |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
651 hg lfpull -r "branch(default)" |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
652 """ |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
653 repo.lfpullsource = source |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
654 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
655 revs = opts.get('rev', []) |
18976
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
656 if not revs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
657 raise error.Abort(_(b'no revisions specified')) |
48116
5ced12cfa41b
errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
48106
diff
changeset
|
658 revs = logcmdutil.revrange(repo, revs) |
18976
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
659 |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
660 numcached = 0 |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
661 for rev in revs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
662 ui.note(_(b'pulling largefiles for revision %d\n') % rev) |
18976
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
663 (cached, missing) = cachelfiles(ui, repo, rev) |
6734951e2d24
largefiles: introduce lfpull command for pulling missing largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
664 numcached += len(cached) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
665 ui.status(_(b"%d largefiles cached\n") % numcached) |
35563
4aa6ed598323
largefiles: add a 'debuglfput' command to put largefile into the store
Boris Feld <boris.feld@octobus.net>
parents:
35400
diff
changeset
|
666 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41775
diff
changeset
|
667 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
668 @eh.command(b'debuglfput', [] + cmdutil.remoteopts, _(b'FILE')) |
35563
4aa6ed598323
largefiles: add a 'debuglfput' command to put largefile into the store
Boris Feld <boris.feld@octobus.net>
parents:
35400
diff
changeset
|
669 def debuglfput(ui, repo, filepath, **kwargs): |
4aa6ed598323
largefiles: add a 'debuglfput' command to put largefile into the store
Boris Feld <boris.feld@octobus.net>
parents:
35400
diff
changeset
|
670 hash = lfutil.hashfile(filepath) |
4aa6ed598323
largefiles: add a 'debuglfput' command to put largefile into the store
Boris Feld <boris.feld@octobus.net>
parents:
35400
diff
changeset
|
671 storefactory.openstore(repo).put(filepath, hash) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
672 ui.write(b'%s\n' % hash) |
35563
4aa6ed598323
largefiles: add a 'debuglfput' command to put largefile into the store
Boris Feld <boris.feld@octobus.net>
parents:
35400
diff
changeset
|
673 return 0 |