Mercurial > hg
annotate hgext/largefiles/overrides.py @ 51479:5bd31e68c7a3
stream-clone-test: add title to various test cases
These case are fine as is, but as we are adding title to all the other as we
simplify them, lets add title for all cases.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 08 Mar 2024 10:59:51 +0100 |
parents | d718eddf01d9 |
children | ea3343104f07 |
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 | |
9 '''Overridden Mercurial commands and functions for the largefiles extension''' | |
10 | |
50027
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
11 import contextlib |
15168 | 12 import copy |
29311
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
13 import os |
15168 | 14 |
15 from mercurial.i18n import _ | |
16 | |
43085
eef9a2d67051
py3: manually import pycompat.open into files that need it
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
17 from mercurial.pycompat import open |
eef9a2d67051
py3: manually import pycompat.open into files that need it
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
18 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
19 from mercurial.hgweb import webcommands |
41062
0a7f582f6f1f
largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
41061
diff
changeset
|
20 |
29311
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
21 from mercurial import ( |
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
22 archival, |
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
23 cmdutil, |
41062
0a7f582f6f1f
largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
41061
diff
changeset
|
24 copies as copiesmod, |
50027
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
25 dirstate, |
29311
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
26 error, |
41062
0a7f582f6f1f
largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
41061
diff
changeset
|
27 exchange, |
41578
8d1dc380b026
largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
28 extensions, |
41061
98681293c890
largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40407
diff
changeset
|
29 exthelper, |
41062
0a7f582f6f1f
largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
41061
diff
changeset
|
30 filemerge, |
29311
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
31 hg, |
35885
7625b4f7db70
cmdutil: split functions of log-like commands to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35623
diff
changeset
|
32 logcmdutil, |
29318
2572bb2e06f8
largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents:
29311
diff
changeset
|
33 match as matchmod, |
41062
0a7f582f6f1f
largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
41061
diff
changeset
|
34 merge, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44452
diff
changeset
|
35 mergestate as mergestatemod, |
29311
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
36 pathutil, |
35348
576ba8194fa8
py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35303
diff
changeset
|
37 pycompat, |
29311
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
38 scmutil, |
31023
aea06029919e
revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents:
30215
diff
changeset
|
39 smartset, |
41062
0a7f582f6f1f
largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
41061
diff
changeset
|
40 subrepo, |
0a7f582f6f1f
largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
41061
diff
changeset
|
41 url as urlmod, |
29311
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
42 util, |
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
43 ) |
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
44 |
46047
4b89cf08d8dc
upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45942
diff
changeset
|
45 from mercurial.upgrade_utils import ( |
4b89cf08d8dc
upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45942
diff
changeset
|
46 actions as upgrade_actions, |
4b89cf08d8dc
upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45942
diff
changeset
|
47 ) |
4b89cf08d8dc
upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45942
diff
changeset
|
48 |
29311
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
49 from . import ( |
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
50 lfcommands, |
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
51 lfutil, |
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
52 storefactory, |
b76abae75161
py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
29305
diff
changeset
|
53 ) |
15168 | 54 |
48709
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
55 ACTION_ADD = mergestatemod.ACTION_ADD |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
56 ACTION_DELETED_CHANGED = mergestatemod.ACTION_DELETED_CHANGED |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
57 ACTION_GET = mergestatemod.ACTION_GET |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
58 ACTION_KEEP = mergestatemod.ACTION_KEEP |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
59 ACTION_REMOVE = mergestatemod.ACTION_REMOVE |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
60 |
41061
98681293c890
largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40407
diff
changeset
|
61 eh = exthelper.exthelper() |
98681293c890
largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40407
diff
changeset
|
62 |
43583
73e6d3346e4f
largefiles: move lfstatus context manager to lfutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43506
diff
changeset
|
63 lfstatus = lfutil.lfstatus |
73e6d3346e4f
largefiles: move lfstatus context manager to lfutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43506
diff
changeset
|
64 |
48711
9bc86adf32f6
merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48709
diff
changeset
|
65 MERGE_ACTION_LARGEFILE_MARK_REMOVED = mergestatemod.MergeAction('lfmr') |
45298
a3cd63d6005b
largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45297
diff
changeset
|
66 |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
67 # -- Utility functions: commonly/repeatedly needed functionality --------------- |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
68 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
69 |
23617
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
70 def composelargefilematcher(match, manifest): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
71 """create a matcher that matches only the largefiles in the original |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
72 matcher""" |
23617
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
73 m = copy.copy(match) |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
74 lfile = lambda f: lfutil.standin(f) in manifest |
36311
b9da10f310f4
largfiles: replace filter() with listcomp when result needs to be a list
Augie Fackler <augie@google.com>
parents:
36205
diff
changeset
|
75 m._files = [lf for lf in m._files if lfile(lf)] |
32322
23c9a2a71c6e
match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents:
32308
diff
changeset
|
76 m._fileset = set(m._files) |
32388
4a23cdb32968
largefiles: replace always() method, not _always field
Martin von Zweigbergk <martinvonz@google.com>
parents:
32382
diff
changeset
|
77 m.always = lambda: False |
23617
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
78 origmatchfn = m.matchfn |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
79 m.matchfn = lambda f: lfile(f) and origmatchfn(f) |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
80 return m |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
81 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
82 |
23769
bb3ee61cfaa1
largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23768
diff
changeset
|
83 def composenormalfilematcher(match, manifest, exclude=None): |
bb3ee61cfaa1
largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23768
diff
changeset
|
84 excluded = set() |
bb3ee61cfaa1
largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23768
diff
changeset
|
85 if exclude is not None: |
bb3ee61cfaa1
largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23768
diff
changeset
|
86 excluded.update(exclude) |
bb3ee61cfaa1
largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23768
diff
changeset
|
87 |
23428
b5e3f3d25395
largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23426
diff
changeset
|
88 m = copy.copy(match) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
89 notlfile = lambda f: not ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
90 lfutil.isstandin(f) or lfutil.standin(f) in manifest or f in excluded |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
91 ) |
36311
b9da10f310f4
largfiles: replace filter() with listcomp when result needs to be a list
Augie Fackler <augie@google.com>
parents:
36205
diff
changeset
|
92 m._files = [lf for lf in m._files if notlfile(lf)] |
32322
23c9a2a71c6e
match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents:
32308
diff
changeset
|
93 m._fileset = set(m._files) |
32388
4a23cdb32968
largefiles: replace always() method, not _always field
Martin von Zweigbergk <martinvonz@google.com>
parents:
32382
diff
changeset
|
94 m.always = lambda: False |
23428
b5e3f3d25395
largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23426
diff
changeset
|
95 origmatchfn = m.matchfn |
b5e3f3d25395
largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23426
diff
changeset
|
96 m.matchfn = lambda f: notlfile(f) and origmatchfn(f) |
b5e3f3d25395
largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23426
diff
changeset
|
97 return m |
b5e3f3d25395
largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23426
diff
changeset
|
98 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
99 |
41654
f164076427b2
largefiles: use uipathfn instead of match.{rel,uipath}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41653
diff
changeset
|
100 def addlargefiles(ui, repo, isaddremove, matcher, uipathfn, **opts): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
101 large = opts.get('large') |
15227
a7686abf73a6
largefiles: factor out lfutil.getminsize()
Greg Ward <greg@gerg.ca>
parents:
15224
diff
changeset
|
102 lfsize = lfutil.getminsize( |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
103 ui, lfutil.islfilesrepo(repo), opts.get('lfsize') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
104 ) |
15168 | 105 |
106 lfmatcher = None | |
15739
be55285470cf
largefiles: tiny code clean up
Michal Sznajder <michalsznajder@gmail.com>
parents:
15674
diff
changeset
|
107 if lfutil.islfilesrepo(repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
108 lfpats = ui.configlist(lfutil.longname, b'patterns') |
15168 | 109 if lfpats: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
110 lfmatcher = matchmod.match(repo.root, b'', list(lfpats)) |
15168 | 111 |
112 lfnames = [] | |
25440
1a95c57959f6
largefiles: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25189
diff
changeset
|
113 m = matcher |
1a95c57959f6
largefiles: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25189
diff
changeset
|
114 |
15168 | 115 wctx = repo[None] |
32382
c87db79b9507
cleanup: reuse existing wctx variables instead of calling repo[None]
Martin von Zweigbergk <martinvonz@google.com>
parents:
32361
diff
changeset
|
116 for f in wctx.walk(matchmod.badmatch(m, lambda x, y: None)): |
15168 | 117 exact = m.exact(f) |
118 lfile = lfutil.standin(f) in wctx | |
119 nfile = f in wctx | |
120 exists = lfile or nfile | |
121 | |
122 # Don't warn the user when they attempt to add a normal tracked file. | |
123 # The normal add code will do that for us. | |
124 if exact and exists: | |
125 if lfile: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
126 ui.warn(_(b'%s already a largefile\n') % uipathfn(f)) |
15168 | 127 continue |
128 | |
17232
25248e2ebaee
largefiles: ensure addlargefiles() doesn't add a standin as a largefile
Matt Harbison <matt_harbison@yahoo.com>
parents:
17231
diff
changeset
|
129 if (exact or not exists) and not lfutil.isstandin(f): |
17231
2446b63c89ec
largefiles: fix a traceback when addremove follows a remove (issue3507)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17229
diff
changeset
|
130 # In case the file was removed previously, but not committed |
2446b63c89ec
largefiles: fix a traceback when addremove follows a remove (issue3507)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17229
diff
changeset
|
131 # (issue3507) |
23733
86810cd85eb8
largefiles: convert addlargefiles() to vfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
23726
diff
changeset
|
132 if not repo.wvfs.exists(f): |
17231
2446b63c89ec
largefiles: fix a traceback when addremove follows a remove (issue3507)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17229
diff
changeset
|
133 continue |
2446b63c89ec
largefiles: fix a traceback when addremove follows a remove (issue3507)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17229
diff
changeset
|
134 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
135 abovemin = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
136 lfsize and repo.wvfs.lstat(f).st_size >= lfsize * 1024 * 1024 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
137 ) |
15255
7ab05d752405
largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents:
15254
diff
changeset
|
138 if large or abovemin or (lfmatcher and lfmatcher(f)): |
15168 | 139 lfnames.append(f) |
140 if ui.verbose or not exact: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
141 ui.status(_(b'adding %s as a largefile\n') % uipathfn(f)) |
15168 | 142 |
143 bad = [] | |
144 | |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
145 # Need to lock, otherwise there could be a race condition between |
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
146 # when standins are created and added to the repo. |
27821
bf3bf7158f69
with: use context manager for wlock in addlargefiles
Bryan O'Sullivan <bryano@fb.com>
parents:
27772
diff
changeset
|
147 with repo.wlock(): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
148 if not opts.get('dry_run'): |
23041
a36625ef1f35
largefiles: move initialization of standins variable to clarify its "scope"
Mads Kiilerich <madski@unity3d.com>
parents:
23040
diff
changeset
|
149 standins = [] |
15168 | 150 lfdirstate = lfutil.openlfdirstate(ui, repo) |
151 for f in lfnames: | |
152 standinname = lfutil.standin(f) | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
153 lfutil.writestandin( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
154 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
155 standinname, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
156 hash=b'', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
157 executable=lfutil.getexecutable(repo.wjoin(f)), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
158 ) |
15168 | 159 standins.append(standinname) |
47648
093b1df410c9
largefile: use `set_tracked` in the `hg add` overwrite
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46494
diff
changeset
|
160 lfdirstate.set_tracked(f) |
48168
df3021c1f093
largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
48118
diff
changeset
|
161 lfdirstate.write(repo.currenttransaction()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
162 bad += [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
163 lfutil.splitstandin(f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
164 for f in repo[None].add(standins) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
165 if f in m.files() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
166 ] |
23768
6b1428e55728
largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23767
diff
changeset
|
167 |
6b1428e55728
largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23767
diff
changeset
|
168 added = [f for f in lfnames if f not in bad] |
6b1428e55728
largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23767
diff
changeset
|
169 return added, bad |
15168 | 170 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
171 |
41654
f164076427b2
largefiles: use uipathfn instead of match.{rel,uipath}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41653
diff
changeset
|
172 def removelargefiles(ui, repo, isaddremove, matcher, uipathfn, dryrun, **opts): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
173 after = opts.get('after') |
23741
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
174 m = composelargefilematcher(matcher, repo[None].manifest()) |
43294
03dae1044edd
largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
175 with lfstatus(repo): |
23741
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
176 s = repo.status(match=m, clean=not isaddremove) |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
177 manifest = repo[None].manifest() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
178 modified, added, deleted, clean = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
179 [f for f in list if lfutil.standin(f) in manifest] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
180 for list in (s.modified, s.added, s.deleted, s.clean) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
181 ] |
15168 | 182 |
18066
abe9799a86d6
largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents:
18012
diff
changeset
|
183 def warn(files, msg): |
15168 | 184 for f in files: |
41654
f164076427b2
largefiles: use uipathfn instead of match.{rel,uipath}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41653
diff
changeset
|
185 ui.warn(msg % uipathfn(f)) |
17576
e0081bb5450e
largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
17575
diff
changeset
|
186 return int(len(files) > 0) |
e0081bb5450e
largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
17575
diff
changeset
|
187 |
15786
aca0f2b3c7e3
largefiles: fix confusion upon removal of added largefile (issue3176)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15663
diff
changeset
|
188 if after: |
22630
0290982e5ac7
largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22289
diff
changeset
|
189 remove = deleted |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
190 result = warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
191 modified + added + clean, _(b'not removing %s: file still exists\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
192 ) |
15168 | 193 else: |
22630
0290982e5ac7
largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22289
diff
changeset
|
194 remove = deleted + clean |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
195 result = warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
196 modified, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
197 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
198 b'not removing %s: file is modified (use -f' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
199 b' to force removal)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
200 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
201 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
202 result = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
203 warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
204 added, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
205 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
206 b'not removing %s: file has been marked for add' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
207 b' (use forget to undo)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
208 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
209 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
210 or result |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
211 ) |
15168 | 212 |
213 # Need to lock because standin files are deleted then removed from the | |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
17299
diff
changeset
|
214 # repository and we could race in-between. |
27822
bce0afa1921a
with: use context manager for wlock in removelargefiles
Bryan O'Sullivan <bryano@fb.com>
parents:
27821
diff
changeset
|
215 with repo.wlock(): |
15168 | 216 lfdirstate = lfutil.openlfdirstate(ui, repo) |
23658
55c92618fdd4
largefiles: eliminate a duplicate message when removing files in verbose mode
Matt Harbison <matt_harbison@yahoo.com>
parents:
23653
diff
changeset
|
217 for f in sorted(remove): |
23766
ce0731e58ac9
largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23741
diff
changeset
|
218 if ui.verbose or not m.exact(f): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
219 ui.status(_(b'removing %s\n') % uipathfn(f)) |
23592
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
220 |
37150
335e19c6b7fa
remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37088
diff
changeset
|
221 if not dryrun: |
23592
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
222 if not after: |
31309
8908f985570c
vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents:
31099
diff
changeset
|
223 repo.wvfs.unlinkpath(f, ignoremissing=True) |
23592
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
224 |
37150
335e19c6b7fa
remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
37088
diff
changeset
|
225 if dryrun: |
23592
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
226 return result |
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
227 |
15168 | 228 remove = [lfutil.standin(f) for f in remove] |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
229 # If this is being called by addremove, let the original addremove |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
230 # function handle this. |
23038
3f581bfbb268
largefiles: replace repo._isaddremove hack with a simple function parameter
Mads Kiilerich <madski@unity3d.com>
parents:
22919
diff
changeset
|
231 if not isaddremove: |
18153
51837a31b425
largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents:
18152
diff
changeset
|
232 for f in remove: |
31309
8908f985570c
vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents:
31099
diff
changeset
|
233 repo.wvfs.unlinkpath(f, ignoremissing=True) |
18153
51837a31b425
largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents:
18152
diff
changeset
|
234 repo[None].forget(remove) |
23721
1b3df5ef5949
largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents:
23695
diff
changeset
|
235 |
1b3df5ef5949
largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents:
23695
diff
changeset
|
236 for f in remove: |
47653
00d70f61d856
largefile: directly use set_untracked() for removing files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47652
diff
changeset
|
237 lfdirstate.set_untracked(lfutil.splitstandin(f)) |
23721
1b3df5ef5949
largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents:
23695
diff
changeset
|
238 |
48168
df3021c1f093
largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
48118
diff
changeset
|
239 lfdirstate.write(repo.currenttransaction()) |
15168 | 240 |
17576
e0081bb5450e
largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
17575
diff
changeset
|
241 return result |
e0081bb5450e
largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
17575
diff
changeset
|
242 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
243 |
16449
874a680a3e23
largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents:
16439
diff
changeset
|
244 # For overriding mercurial.hgweb.webcommands so that largefiles will |
874a680a3e23
largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents:
16439
diff
changeset
|
245 # appear at their right place in the manifests. |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
246 @eh.wrapfunction(webcommands, 'decodepath') |
16449
874a680a3e23
largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents:
16439
diff
changeset
|
247 def decodepath(orig, path): |
874a680a3e23
largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents:
16439
diff
changeset
|
248 return lfutil.splitstandin(path) or path |
874a680a3e23
largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents:
16439
diff
changeset
|
249 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
250 |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
251 # -- Wrappers: modify existing commands -------------------------------- |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
252 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
253 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
254 @eh.wrapcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
255 b'add', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
256 opts=[ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
257 (b'', b'large', None, _(b'add as largefile')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
258 (b'', b'normal', None, _(b'add as normal file')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
259 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
260 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
261 b'lfsize', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
262 b'', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
263 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
264 b'add all files above this size (in megabytes) ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
265 b'as largefiles (default: 10)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
266 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
267 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
268 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
269 ) |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
270 def overrideadd(orig, ui, repo, *pats, **opts): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
271 if opts.get('normal') and opts.get('large'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
272 raise error.Abort(_(b'--normal cannot be used with --large')) |
23886
5ce8dcd05dc4
largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents:
23884
diff
changeset
|
273 return orig(ui, repo, *pats, **opts) |
5ce8dcd05dc4
largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents:
23884
diff
changeset
|
274 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
275 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
276 @eh.wrapfunction(cmdutil, 'add') |
41650
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41631
diff
changeset
|
277 def cmdutiladd(orig, ui, repo, matcher, prefix, uipathfn, explicitonly, **opts): |
23886
5ce8dcd05dc4
largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents:
23884
diff
changeset
|
278 # The --normal flag short circuits this override |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
279 if opts.get('normal'): |
41650
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41631
diff
changeset
|
280 return orig(ui, repo, matcher, prefix, uipathfn, explicitonly, **opts) |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
281 |
41654
f164076427b2
largefiles: use uipathfn instead of match.{rel,uipath}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41653
diff
changeset
|
282 ladded, lbad = addlargefiles(ui, repo, False, matcher, uipathfn, **opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
283 normalmatcher = composenormalfilematcher( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
284 matcher, repo[None].manifest(), ladded |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
285 ) |
41650
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41631
diff
changeset
|
286 bad = orig(ui, repo, normalmatcher, prefix, uipathfn, explicitonly, **opts) |
23886
5ce8dcd05dc4
largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents:
23884
diff
changeset
|
287 |
5ce8dcd05dc4
largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents:
23884
diff
changeset
|
288 bad.extend(f for f in lbad) |
5ce8dcd05dc4
largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents:
23884
diff
changeset
|
289 return bad |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
290 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
291 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
292 @eh.wrapfunction(cmdutil, 'remove') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
293 def cmdutilremove( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
294 orig, ui, repo, matcher, prefix, uipathfn, after, force, subrepos, dryrun |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
295 ): |
23782
304e69cb1ee9
largefiles: enable subrepo support for remove
Matt Harbison <matt_harbison@yahoo.com>
parents:
23769
diff
changeset
|
296 normalmatcher = composenormalfilematcher(matcher, repo[None].manifest()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
297 result = orig( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
298 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
299 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
300 normalmatcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
301 prefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
302 uipathfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
303 after, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
304 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
305 subrepos, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
306 dryrun, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
307 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
308 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
309 removelargefiles( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
310 ui, repo, False, matcher, uipathfn, dryrun, after=after, force=force |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
311 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
312 or result |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
313 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
314 |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
315 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
316 @eh.wrapfunction(dirstate.dirstate, '_changing') |
50027
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
317 @contextlib.contextmanager |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
318 def _changing(orig, self, repo, change_type): |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
319 pre = sub_dirstate = getattr(self, '_sub_dirstate', None) |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
320 try: |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
321 lfd = getattr(self, '_large_file_dirstate', False) |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
322 if sub_dirstate is None and not lfd: |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
323 sub_dirstate = lfutil.openlfdirstate(repo.ui, repo) |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
324 self._sub_dirstate = sub_dirstate |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
325 if not lfd: |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
326 assert self._sub_dirstate is not None |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
327 with orig(self, repo, change_type): |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
328 if sub_dirstate is None: |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
329 yield |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
330 else: |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
331 with sub_dirstate._changing(repo, change_type): |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
332 yield |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
333 finally: |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
334 self._sub_dirstate = pre |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
335 |
0b4a6912292e
largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
336 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
337 @eh.wrapfunction(dirstate.dirstate, 'running_status') |
50142
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
338 @contextlib.contextmanager |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
339 def running_status(orig, self, repo): |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
340 pre = sub_dirstate = getattr(self, '_sub_dirstate', None) |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
341 try: |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
342 lfd = getattr(self, '_large_file_dirstate', False) |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
343 if sub_dirstate is None and not lfd: |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
344 sub_dirstate = lfutil.openlfdirstate(repo.ui, repo) |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
345 self._sub_dirstate = sub_dirstate |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
346 if not lfd: |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
347 assert self._sub_dirstate is not None |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
348 with orig(self, repo): |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
349 if sub_dirstate is None: |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
350 yield |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
351 else: |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
352 with sub_dirstate.running_status(repo): |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
353 yield |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
354 finally: |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
355 self._sub_dirstate = pre |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
356 |
308aff0243ae
large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50141
diff
changeset
|
357 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
358 @eh.wrapfunction(subrepo.hgsubrepo, 'status') |
16515
12dabc22de77
largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents:
16449
diff
changeset
|
359 def overridestatusfn(orig, repo, rev2, **opts): |
43294
03dae1044edd
largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
360 with lfstatus(repo._repo): |
16515
12dabc22de77
largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents:
16449
diff
changeset
|
361 return orig(repo, rev2, **opts) |
12dabc22de77
largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents:
16449
diff
changeset
|
362 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
363 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
364 @eh.wrapcommand(b'status') |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
365 def overridestatus(orig, ui, repo, *pats, **opts): |
43294
03dae1044edd
largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
366 with lfstatus(repo): |
15168 | 367 return orig(ui, repo, *pats, **opts) |
368 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
369 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
370 @eh.wrapfunction(subrepo.hgsubrepo, 'dirty') |
33364
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32945
diff
changeset
|
371 def overridedirty(orig, repo, ignoreupdate=False, missing=False): |
43294
03dae1044edd
largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
372 with lfstatus(repo._repo): |
33364
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32945
diff
changeset
|
373 return orig(repo, ignoreupdate=ignoreupdate, missing=missing) |
16516
597ddcb41b32
largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
16515
diff
changeset
|
374 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
375 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
376 @eh.wrapcommand(b'log') |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
377 def overridelog(orig, ui, repo, *pats, **opts): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
378 def overridematchandpats( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
379 orig, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
380 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
381 pats=(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
382 opts=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
383 globbed=False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
384 default=b'relpath', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
385 badfn=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
386 ): |
18341
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
387 """Matcher that merges root directory with .hglf, suitable for log. |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
388 It is still possible to match .hglf directly. |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
389 For any listed files run log on the standin too. |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
390 matchfn tries both the given filename and with .hglf stripped. |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
391 """ |
26339
4afdd4283d3e
largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26338
diff
changeset
|
392 if opts is None: |
4afdd4283d3e
largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26338
diff
changeset
|
393 opts = {} |
41578
8d1dc380b026
largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
394 matchandpats = orig(ctx, pats, opts, globbed, default, badfn=badfn) |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
395 m, p = copy.copy(matchandpats) |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
396 |
22170
0e1b02f984c7
largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22169
diff
changeset
|
397 if m.always(): |
0e1b02f984c7
largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22169
diff
changeset
|
398 # We want to match everything anyway, so there's no benefit trying |
0e1b02f984c7
largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22169
diff
changeset
|
399 # to add standins. |
0e1b02f984c7
largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22169
diff
changeset
|
400 return matchandpats |
0e1b02f984c7
largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22169
diff
changeset
|
401 |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
402 pats = set(p) |
24206
13c1e66f9653
largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24172
diff
changeset
|
403 |
13c1e66f9653
largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24172
diff
changeset
|
404 def fixpats(pat, tostandin=lfutil.standin): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
405 if pat.startswith(b'set:'): |
24813
2553ef7355ab
largefiles: don't mangle filesets when fixing up the log matcher
Matt Harbison <matt_harbison@yahoo.com>
parents:
24812
diff
changeset
|
406 return pat |
2553ef7355ab
largefiles: don't mangle filesets when fixing up the log matcher
Matt Harbison <matt_harbison@yahoo.com>
parents:
24812
diff
changeset
|
407 |
29318
2572bb2e06f8
largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents:
29311
diff
changeset
|
408 kindpat = matchmod._patsplit(pat, None) |
24206
13c1e66f9653
largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24172
diff
changeset
|
409 |
13c1e66f9653
largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24172
diff
changeset
|
410 if kindpat[0] is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
411 return kindpat[0] + b':' + tostandin(kindpat[1]) |
24206
13c1e66f9653
largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24172
diff
changeset
|
412 return tostandin(kindpat[1]) |
13c1e66f9653
largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24172
diff
changeset
|
413 |
41667
8fa1a5fb8a28
largefiles: get cwd and relative paths from repo instead of matcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
41654
diff
changeset
|
414 cwd = repo.getcwd() |
8fa1a5fb8a28
largefiles: get cwd and relative paths from repo instead of matcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
41654
diff
changeset
|
415 if cwd: |
24208
e6b0de02a02e
largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24207
diff
changeset
|
416 hglf = lfutil.shortname |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
417 back = util.pconvert(repo.pathto(hglf)[: -len(hglf)]) |
24206
13c1e66f9653
largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24172
diff
changeset
|
418 |
13c1e66f9653
largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24172
diff
changeset
|
419 def tostandin(f): |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26607
diff
changeset
|
420 # The file may already be a standin, so truncate the back |
24208
e6b0de02a02e
largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24207
diff
changeset
|
421 # prefix and test before mangling it. This avoids turning |
24207
d90e3faf96a9
largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents:
24206
diff
changeset
|
422 # 'glob:../.hglf/foo*' into 'glob:../.hglf/../.hglf/foo*'. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
423 if f.startswith(back) and lfutil.splitstandin(f[len(back) :]): |
24207
d90e3faf96a9
largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents:
24206
diff
changeset
|
424 return f |
d90e3faf96a9
largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents:
24206
diff
changeset
|
425 |
24208
e6b0de02a02e
largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24207
diff
changeset
|
426 # An absolute path is from outside the repo, so truncate the |
e6b0de02a02e
largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24207
diff
changeset
|
427 # path to the root before building the standin. Otherwise cwd |
e6b0de02a02e
largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24207
diff
changeset
|
428 # is somewhere in the repo, relative to root, and needs to be |
e6b0de02a02e
largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24207
diff
changeset
|
429 # prepended before building the standin. |
41667
8fa1a5fb8a28
largefiles: get cwd and relative paths from repo instead of matcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
41654
diff
changeset
|
430 if os.path.isabs(cwd): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
431 f = f[len(back) :] |
24208
e6b0de02a02e
largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24207
diff
changeset
|
432 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
433 f = cwd + b'/' + f |
24208
e6b0de02a02e
largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24207
diff
changeset
|
434 return back + lfutil.standin(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
435 |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
436 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
437 |
24207
d90e3faf96a9
largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents:
24206
diff
changeset
|
438 def tostandin(f): |
31614
d5d0e6ca62ad
largefiles: replace splitstandin() by isstandin() to omit str creation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31613
diff
changeset
|
439 if lfutil.isstandin(f): |
24207
d90e3faf96a9
largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents:
24206
diff
changeset
|
440 return f |
d90e3faf96a9
largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents:
24206
diff
changeset
|
441 return lfutil.standin(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
442 |
32301
8a87bfc5bebb
largefiles: move identical statement to after if/else
Martin von Zweigbergk <martinvonz@google.com>
parents:
32157
diff
changeset
|
443 pats.update(fixpats(f, tostandin) for f in p) |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
444 |
19472
32e502b26983
largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents:
19226
diff
changeset
|
445 for i in range(0, len(m._files)): |
24206
13c1e66f9653
largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24172
diff
changeset
|
446 # Don't add '.hglf' to m.files, since that is already covered by '.' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
447 if m._files[i] == b'.': |
24206
13c1e66f9653
largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24172
diff
changeset
|
448 continue |
19472
32e502b26983
largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents:
19226
diff
changeset
|
449 standin = lfutil.standin(m._files[i]) |
23976
344939126579
largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents:
23893
diff
changeset
|
450 # If the "standin" is a directory, append instead of replace to |
344939126579
largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents:
23893
diff
changeset
|
451 # support naming a directory on the command line with only |
344939126579
largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents:
23893
diff
changeset
|
452 # largefiles. The original directory is kept to support normal |
344939126579
largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents:
23893
diff
changeset
|
453 # files. |
31655
9d075911df49
largefiles: avoid meaningless changectx looking up
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31654
diff
changeset
|
454 if standin in ctx: |
19472
32e502b26983
largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents:
19226
diff
changeset
|
455 m._files[i] = standin |
31655
9d075911df49
largefiles: avoid meaningless changectx looking up
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31654
diff
changeset
|
456 elif m._files[i] not in ctx and repo.wvfs.isdir(standin): |
21275
c7e9fb881a5a
largefiles: include largefiles when doing log on a directory (issue4241)
Mads Kiilerich <madski@unity3d.com>
parents:
21209
diff
changeset
|
457 m._files.append(standin) |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
458 |
32322
23c9a2a71c6e
match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents:
32308
diff
changeset
|
459 m._fileset = set(m._files) |
32388
4a23cdb32968
largefiles: replace always() method, not _always field
Martin von Zweigbergk <martinvonz@google.com>
parents:
32382
diff
changeset
|
460 m.always = lambda: False |
18341
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
461 origmatchfn = m.matchfn |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
462 |
18341
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
463 def lfmatchfn(f): |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
464 lf = lfutil.splitstandin(f) |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
465 if lf is not None and origmatchfn(lf): |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
466 return True |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
467 r = origmatchfn(f) |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
468 return r |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
469 |
18341
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
470 m.matchfn = lfmatchfn |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
471 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
472 ui.debug(b'updated patterns: %s\n' % b', '.join(sorted(pats))) |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
473 return m, pats |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
474 |
22169
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
475 # For hg log --patch, the match object is used in two different senses: |
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
476 # (1) to determine what revisions should be printed out, and |
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
477 # (2) to determine what files to print out diffs for. |
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
478 # The magic matchandpats override should be used for case (1) but not for |
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
479 # case (2). |
41578
8d1dc380b026
largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
480 oldmatchandpats = scmutil.matchandpats |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
481 |
41578
8d1dc380b026
largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
482 def overridemakefilematcher(orig, repo, pats, opts, badfn=None): |
24534
1925769b4ff8
log: prefer 'wctx' over 'pctx' for working context
Martin von Zweigbergk <martinvonz@google.com>
parents:
24474
diff
changeset
|
483 wctx = repo[None] |
25467
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25440
diff
changeset
|
484 match, pats = oldmatchandpats(wctx, pats, opts, badfn=badfn) |
36002
f8ad57d24252
log: pass ctx to makefilematcher() and makehunksfilter() functions
Yuya Nishihara <yuya@tcha.org>
parents:
35887
diff
changeset
|
485 return lambda ctx: match |
22169
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
486 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
487 wrappedmatchandpats = extensions.wrappedfunction( |
50787
584fc92dd8d7
wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50785
diff
changeset
|
488 scmutil, 'matchandpats', overridematchandpats |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
489 ) |
41578
8d1dc380b026
largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
490 wrappedmakefilematcher = extensions.wrappedfunction( |
50787
584fc92dd8d7
wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50785
diff
changeset
|
491 logcmdutil, '_makenofollowfilematcher', overridemakefilematcher |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
492 ) |
41578
8d1dc380b026
largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
493 with wrappedmatchandpats, wrappedmakefilematcher: |
17577
0f39e9355d3c
largefiles: preserve the exit status of the log command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17576
diff
changeset
|
494 return orig(ui, repo, *pats, **opts) |
15168 | 495 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
496 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
497 @eh.wrapcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
498 b'verify', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
499 opts=[ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
500 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
501 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
502 b'large', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
503 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
504 _(b'verify that all largefiles in current revision exists'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
505 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
506 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
507 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
508 b'lfa', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
509 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
510 _(b'verify largefiles in all revisions, not just current'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
511 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
512 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
513 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
514 b'lfc', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
515 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
516 _(b'verify local largefile contents, not just existence'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
517 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
518 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
519 ) |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
520 def overrideverify(orig, ui, repo, *pats, **opts): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
521 large = opts.pop('large', False) |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
522 all = opts.pop('lfa', False) |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
523 contents = opts.pop('lfc', False) |
15168 | 524 |
525 result = orig(ui, repo, *pats, **opts) | |
18547
2e3ec9e6ee6e
largefiles: make verify --lfa and --lfc work without --large
Mads Kiilerich <madski@unity3d.com>
parents:
18541
diff
changeset
|
526 if large or all or contents: |
15168 | 527 result = result or lfcommands.verifylfiles(ui, repo, all, contents) |
528 return result | |
529 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
530 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
531 @eh.wrapcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
532 b'debugstate', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
533 opts=[(b'', b'large', None, _(b'display largefiles dirstate'))], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
534 ) |
18144
e16982a74bf7
largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents:
18142
diff
changeset
|
535 def overridedebugstate(orig, ui, repo, *pats, **opts): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
536 large = opts.pop('large', False) |
18144
e16982a74bf7
largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents:
18142
diff
changeset
|
537 if large: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
538 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
539 class fakerepo: |
21088
e095626e8676
largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
21087
diff
changeset
|
540 dirstate = lfutil.openlfdirstate(ui, repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
541 |
21088
e095626e8676
largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
21087
diff
changeset
|
542 orig(ui, fakerepo, *pats, **opts) |
18144
e16982a74bf7
largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents:
18142
diff
changeset
|
543 else: |
e16982a74bf7
largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents:
18142
diff
changeset
|
544 orig(ui, repo, *pats, **opts) |
e16982a74bf7
largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents:
18142
diff
changeset
|
545 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
546 |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
547 # Before starting the manifest merge, merge.updates will call |
23543
4dd8a6a1240d
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23541
diff
changeset
|
548 # _checkunknownfile to check if there are any files in the merged-in |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
549 # changeset that collide with unknown files in the working copy. |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
550 # |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
551 # The largefiles are seen as unknown, so this prevents us from merging |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
552 # in a file 'foo' if we already have a largefile with the same name. |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
553 # |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
554 # The overridden function filters the unknown files by removing any |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
555 # largefiles. This makes the merge proceed and we can then handle this |
23307
9dd0d0d61a24
largefiles: update comments to refer to the right overridden method
Martin von Zweigbergk <martinvonz@google.com>
parents:
23276
diff
changeset
|
556 # case further in the overridden calculateupdates function below. |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
557 @eh.wrapfunction(merge, '_checkunknownfile') |
49910
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49854
diff
changeset
|
558 def overridecheckunknownfile( |
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49854
diff
changeset
|
559 origfn, dirstate, wvfs, dircache, wctx, mctx, f, f2=None |
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49854
diff
changeset
|
560 ): |
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49854
diff
changeset
|
561 if lfutil.standin(dirstate.normalize(f)) in wctx: |
16093
7e30f5f2285f
merge: refactor unknown file conflict checking
Matt Mackall <mpm@selenic.com>
parents:
16075
diff
changeset
|
562 return False |
49910
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49854
diff
changeset
|
563 return origfn(dirstate, wvfs, dircache, wctx, mctx, f, f2) |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
564 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
565 |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
566 # The manifest merge handles conflicts on the manifest level. We want |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
567 # to handle changes in largefile-ness of files at this level too. |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
568 # |
23307
9dd0d0d61a24
largefiles: update comments to refer to the right overridden method
Martin von Zweigbergk <martinvonz@google.com>
parents:
23276
diff
changeset
|
569 # The strategy is to run the original calculateupdates and then process |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
570 # the action list it outputs. There are two cases we need to deal with: |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
571 # |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
572 # 1. Normal file in p1, largefile in p2. Here the largefile is |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
573 # detected via its standin file, which will enter the working copy |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
574 # with a "get" action. It is not "merge" since the standin is all |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
575 # Mercurial is concerned with at this level -- the link to the |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
576 # existing normal file is not relevant here. |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
577 # |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
578 # 2. Largefile in p1, normal file in p2. Here we get a "merge" action |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
579 # since the largefile will be present in the working copy and |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
580 # different from the normal file in p2. Mercurial therefore |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
581 # triggers a merge action. |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
582 # |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
583 # In both cases, we prompt the user and emit new actions to either |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
584 # remove the standin (if the normal file was kept) or to remove the |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
585 # normal file and get the standin (if the largefile was kept). The |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
586 # default prompt answer is to use the largefile version since it was |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
587 # presumably changed on purpose. |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
588 # |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
589 # Finally, the merge.applyupdates function will then take care of |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
590 # writing the files into the working copy and lfcommands.updatelfiles |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
591 # will update the largefiles. |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
592 @eh.wrapfunction(merge, 'calculateupdates') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
593 def overridecalculateupdates( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
594 origfn, repo, p1, p2, pas, branchmerge, force, acceptremote, *args, **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
595 ): |
18605
bcf29565d89f
manifestmerge: pass in branchmerge and force separately
Siddharth Agarwal <sid0@fb.com>
parents:
18600
diff
changeset
|
596 overwrite = force and not branchmerge |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
597 mresult = origfn( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
598 repo, p1, p2, pas, branchmerge, force, acceptremote, *args, **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
599 ) |
19952
8eb99e5cec4a
largefiles: don't process merge actions at all when overwriting
Mads Kiilerich <madski@unity3d.com>
parents:
19805
diff
changeset
|
600 |
8eb99e5cec4a
largefiles: don't process merge actions at all when overwriting
Mads Kiilerich <madski@unity3d.com>
parents:
19805
diff
changeset
|
601 if overwrite: |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
602 return mresult |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
603 |
23529
38e55e55ae4d
largefiles: rewrite merge code using dictionary with entry per file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23528
diff
changeset
|
604 # Convert to dictionary with filename as key and action as value. |
23530
42ae1b1f048f
largefiles: start by finding files of interest
Martin von Zweigbergk <martinvonz@google.com>
parents:
23529
diff
changeset
|
605 lfiles = set() |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
606 for f in mresult.files(): |
27905
27f2f5c1d499
largefiles: actions will now always have a file - drop check
Mads Kiilerich <madski@unity3d.com>
parents:
27904
diff
changeset
|
607 splitstandin = lfutil.splitstandin(f) |
42755
749ef8c31187
rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42587
diff
changeset
|
608 if splitstandin is not None and splitstandin in p1: |
23641
a7a0f32a383f
merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23635
diff
changeset
|
609 lfiles.add(splitstandin) |
a7a0f32a383f
merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23635
diff
changeset
|
610 elif lfutil.standin(f) in p1: |
a7a0f32a383f
merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23635
diff
changeset
|
611 lfiles.add(f) |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
612 |
27904
ee3123e19db9
largefiles: make prompt order deterministic
Mads Kiilerich <madski@unity3d.com>
parents:
27826
diff
changeset
|
613 for lfile in sorted(lfiles): |
23530
42ae1b1f048f
largefiles: start by finding files of interest
Martin von Zweigbergk <martinvonz@google.com>
parents:
23529
diff
changeset
|
614 standin = lfutil.standin(lfile) |
45344
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45298
diff
changeset
|
615 (lm, largs, lmsg) = mresult.getfile(lfile, (None, None, None)) |
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45298
diff
changeset
|
616 (sm, sargs, smsg) = mresult.getfile(standin, (None, None, None)) |
48709
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
617 |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
618 if sm in (ACTION_GET, ACTION_DELETED_CHANGED) and lm != ACTION_REMOVE: |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
619 if sm == ACTION_DELETED_CHANGED: |
26962
fa2daf0e61ab
merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents:
26781
diff
changeset
|
620 f1, f2, fa, move, anc = sargs |
27655
af13eaf9ab8c
merge: add a new 'backup' argument to get actions
Siddharth Agarwal <sid0@fb.com>
parents:
27586
diff
changeset
|
621 sargs = (p2[f2].flags(), False) |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
622 # Case 1: normal file in the working copy, largefile in |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
623 # the second parent |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
624 usermsg = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
625 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
626 b'remote turned local normal file %s into a largefile\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
627 b'use (l)argefile or keep (n)ormal file?' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
628 b'$$ &Largefile $$ &Normal file' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
629 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
630 % lfile |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
631 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
632 if repo.ui.promptchoice(usermsg, 0) == 0: # pick remote largefile |
48709
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
633 mresult.addfile( |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
634 lfile, ACTION_REMOVE, None, b'replaced by standin' |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
635 ) |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
636 mresult.addfile(standin, ACTION_GET, sargs, b'replaces standin') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
637 else: # keep local normal file |
48709
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
638 mresult.addfile(lfile, ACTION_KEEP, None, b'replaces standin') |
23493
28f01c318c05
largefiles: don't use 'r' action for standin that doesn't exist
Martin von Zweigbergk <martinvonz@google.com>
parents:
23492
diff
changeset
|
639 if branchmerge: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
640 mresult.addfile( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
641 standin, |
48709
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
642 ACTION_KEEP, |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
643 None, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
644 b'replaced by non-standin', |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
645 ) |
23493
28f01c318c05
largefiles: don't use 'r' action for standin that doesn't exist
Martin von Zweigbergk <martinvonz@google.com>
parents:
23492
diff
changeset
|
646 else: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
647 mresult.addfile( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
648 standin, |
48709
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
649 ACTION_REMOVE, |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
650 None, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
651 b'replaced by non-standin', |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
652 ) |
48709
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
653 if lm in (ACTION_GET, ACTION_DELETED_CHANGED) and sm != ACTION_REMOVE: |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
654 if lm == ACTION_DELETED_CHANGED: |
26962
fa2daf0e61ab
merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents:
26781
diff
changeset
|
655 f1, f2, fa, move, anc = largs |
27655
af13eaf9ab8c
merge: add a new 'backup' argument to get actions
Siddharth Agarwal <sid0@fb.com>
parents:
27586
diff
changeset
|
656 largs = (p2[f2].flags(), False) |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
657 # Case 2: largefile in the working copy, normal file in |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
658 # the second parent |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
659 usermsg = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
660 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
661 b'remote turned local largefile %s into a normal file\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
662 b'keep (l)argefile or use (n)ormal file?' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
663 b'$$ &Largefile $$ &Normal file' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
664 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
665 % lfile |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
666 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
667 if repo.ui.promptchoice(usermsg, 0) == 0: # keep local largefile |
22196
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
668 if branchmerge: |
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
669 # largefile can be restored from standin safely |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
670 mresult.addfile( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
671 lfile, |
48709
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
672 ACTION_KEEP, |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
673 None, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
674 b'replaced by standin', |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
675 ) |
48709
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
676 mresult.addfile( |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
677 standin, ACTION_KEEP, None, b'replaces standin' |
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
678 ) |
22196
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
679 else: |
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
680 # "lfile" should be marked as "removed" without |
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
681 # removal of itself |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
682 mresult.addfile( |
45298
a3cd63d6005b
largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45297
diff
changeset
|
683 lfile, |
a3cd63d6005b
largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45297
diff
changeset
|
684 MERGE_ACTION_LARGEFILE_MARK_REMOVED, |
a3cd63d6005b
largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45297
diff
changeset
|
685 None, |
a3cd63d6005b
largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45297
diff
changeset
|
686 b'forget non-standin largefile', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
687 ) |
22196
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
688 |
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
689 # linear-merge should treat this largefile as 're-added' |
48709
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
690 mresult.addfile(standin, ACTION_ADD, None, b'keep standin') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
691 else: # pick remote normal file |
48709
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
692 mresult.addfile(lfile, ACTION_GET, largs, b'replaces standin') |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
693 mresult.addfile( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
694 standin, |
48709
d536d4afe003
large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48506
diff
changeset
|
695 ACTION_REMOVE, |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
696 None, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
697 b'replaced by non-standin', |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
698 ) |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
699 |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44856
diff
changeset
|
700 return mresult |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
701 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
702 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
703 @eh.wrapfunction(mergestatemod, 'recordupdates') |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
41760
diff
changeset
|
704 def mergerecordupdates(orig, repo, actions, branchmerge, getfiledata): |
45298
a3cd63d6005b
largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45297
diff
changeset
|
705 if MERGE_ACTION_LARGEFILE_MARK_REMOVED in actions: |
23695
997a96cf6344
largefiles: mark lfile as added in lfdirstate when the standin is added
Mads Kiilerich <madski@unity3d.com>
parents:
23619
diff
changeset
|
706 lfdirstate = lfutil.openlfdirstate(repo.ui, repo) |
50048
c3c8ac540513
largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
707 for lfile, args, msg in actions[MERGE_ACTION_LARGEFILE_MARK_REMOVED]: |
c3c8ac540513
largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
708 # this should be executed before 'orig', to execute 'remove' |
c3c8ac540513
largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
709 # before all other actions |
c3c8ac540513
largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
710 repo.dirstate.update_file(lfile, p1_tracked=True, wc_tracked=False) |
c3c8ac540513
largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
711 # make sure lfile doesn't get synclfdirstate'd as normal |
c3c8ac540513
largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50029
diff
changeset
|
712 lfdirstate.update_file(lfile, p1_tracked=False, wc_tracked=True) |
22196
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
713 |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
41760
diff
changeset
|
714 return orig(repo, actions, branchmerge, getfiledata) |
22196
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
715 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
716 |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
717 # Override filemerge to prompt the user about how they wish to merge |
20295
36333ff8c54d
largefiles: drop redundant special handling of merges of renames
Mads Kiilerich <madski@unity3d.com>
parents:
20156
diff
changeset
|
718 # largefiles. This will handle identical edits without prompting the user. |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
719 @eh.wrapfunction(filemerge, 'filemerge') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
720 def overridefilemerge( |
48431
6b1049d71c3e
filemerge: make `_filemerge()` do both premerge and merge
Martin von Zweigbergk <martinvonz@google.com>
parents:
48390
diff
changeset
|
721 origfn, repo, wctx, mynode, orig, fcd, fco, fca, labels=None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
722 ): |
27050
df9b73d2d444
largefiles: fall back to the original for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27034
diff
changeset
|
723 if not lfutil.isstandin(orig) or fcd.isabsent() or fco.isabsent(): |
48431
6b1049d71c3e
filemerge: make `_filemerge()` do both premerge and merge
Martin von Zweigbergk <martinvonz@google.com>
parents:
48390
diff
changeset
|
724 return origfn(repo, wctx, mynode, orig, fcd, fco, fca, labels=labels) |
20298
9d350fa0708e
largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents:
20297
diff
changeset
|
725 |
31740
a40e979b9d97
largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31735
diff
changeset
|
726 ahash = lfutil.readasstandin(fca).lower() |
a40e979b9d97
largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31735
diff
changeset
|
727 dhash = lfutil.readasstandin(fcd).lower() |
a40e979b9d97
largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31735
diff
changeset
|
728 ohash = lfutil.readasstandin(fco).lower() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
729 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
730 ohash != ahash |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
731 and ohash != dhash |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
732 and ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
733 dhash == ahash |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
734 or repo.ui.promptchoice( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
735 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
736 b'largefile %s has a merge conflict\nancestor was %s\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
737 b'you can keep (l)ocal %s or take (o)ther %s.\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
738 b'what do you want to do?' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
739 b'$$ &Local $$ &Other' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
740 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
741 % (lfutil.splitstandin(orig), ahash, dhash, ohash), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
742 0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
743 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
744 == 1 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
745 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
746 ): |
20298
9d350fa0708e
largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents:
20297
diff
changeset
|
747 repo.wwrite(fcd.path(), fco.data(), fco.flags()) |
48506
608a35db186c
filemerge: stop returning always-`True` value
Martin von Zweigbergk <martinvonz@google.com>
parents:
48432
diff
changeset
|
748 return 0, False |
15168 | 749 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
750 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
751 @eh.wrapfunction(copiesmod, 'pathcopies') |
24782
4906dc0e038c
copies: add matcher parameter to copy logic
Durham Goode <durham@fb.com>
parents:
24680
diff
changeset
|
752 def copiespathcopies(orig, ctx1, ctx2, match=None): |
4906dc0e038c
copies: add matcher parameter to copy logic
Durham Goode <durham@fb.com>
parents:
24680
diff
changeset
|
753 copies = orig(ctx1, ctx2, match=match) |
24230
23438bceba04
largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents:
24208
diff
changeset
|
754 updated = {} |
23438bceba04
largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents:
24208
diff
changeset
|
755 |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
756 for k, v in copies.items(): |
24230
23438bceba04
largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents:
24208
diff
changeset
|
757 updated[lfutil.splitstandin(k) or k] = lfutil.splitstandin(v) or v |
23438bceba04
largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents:
24208
diff
changeset
|
758 |
23438bceba04
largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents:
24208
diff
changeset
|
759 return updated |
23438bceba04
largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents:
24208
diff
changeset
|
760 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
761 |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
762 # Copy first changes the matchers to match standins instead of |
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
763 # largefiles. Then it overrides util.copyfile in that function it |
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
764 # checks if the destination largefile already exists. It also keeps a |
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
765 # list of copied files so that the largefiles can be copied and the |
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
766 # dirstate updated. |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
767 @eh.wrapfunction(cmdutil, 'copy') |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
768 def overridecopy(orig, ui, repo, pats, opts, rename=False): |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
769 # doesn't remove largefile on rename |
15168 | 770 if len(pats) < 2: |
771 # this isn't legal, let the original function deal with it | |
772 return orig(ui, repo, pats, opts, rename) | |
773 | |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
774 # This could copy both lfiles and normal files in one command, |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
775 # but we don't want to do that. First replace their matcher to |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
776 # only match normal files and run it, then replace it to just |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
777 # match largefiles and run it again. |
15168 | 778 nonormalfiles = False |
779 nolfiles = False | |
41581
d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41580
diff
changeset
|
780 manifest = repo[None].manifest() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
781 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
782 def normalfilesmatchfn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
783 orig, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
784 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
785 pats=(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
786 opts=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
787 globbed=False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
788 default=b'relpath', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
789 badfn=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
790 ): |
41581
d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41580
diff
changeset
|
791 if opts is None: |
d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41580
diff
changeset
|
792 opts = {} |
d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41580
diff
changeset
|
793 match = orig(ctx, pats, opts, globbed, default, badfn=badfn) |
d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41580
diff
changeset
|
794 return composenormalfilematcher(match, manifest) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
795 |
50787
584fc92dd8d7
wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50785
diff
changeset
|
796 with extensions.wrappedfunction(scmutil, 'match', normalfilesmatchfn): |
41581
d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41580
diff
changeset
|
797 try: |
d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41580
diff
changeset
|
798 result = orig(ui, repo, pats, opts, rename) |
d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41580
diff
changeset
|
799 except error.Abort as e: |
45682
d2e1dcd4490d
errors: name arguments to Abort constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
800 if e.message != _(b'no files to copy'): |
41581
d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41580
diff
changeset
|
801 raise e |
d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41580
diff
changeset
|
802 else: |
d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41580
diff
changeset
|
803 nonormalfiles = True |
d9fd2f74d683
largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41580
diff
changeset
|
804 result = 0 |
15168 | 805 |
806 # The first rename can cause our current working directory to be removed. | |
807 # In that case there is nothing left to copy/rename so just quit. | |
808 try: | |
809 repo.getcwd() | |
810 except OSError: | |
811 return result | |
812 | |
24006
42fa7eeb858e
largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23976
diff
changeset
|
813 def makestandin(relpath): |
42fa7eeb858e
largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23976
diff
changeset
|
814 path = pathutil.canonpath(repo.root, repo.getcwd(), relpath) |
28715
a7f7b7acf489
largefiles: replace invocation of os.path module by vfs in overrides.py
liscju <piotr.listkiewicz@gmail.com>
parents:
28394
diff
changeset
|
815 return repo.wvfs.join(lfutil.standin(path)) |
24006
42fa7eeb858e
largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23976
diff
changeset
|
816 |
42fa7eeb858e
largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23976
diff
changeset
|
817 fullpats = scmutil.expandpats(pats) |
42fa7eeb858e
largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23976
diff
changeset
|
818 dest = fullpats[-1] |
42fa7eeb858e
largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23976
diff
changeset
|
819 |
42fa7eeb858e
largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23976
diff
changeset
|
820 if os.path.isdir(dest): |
42fa7eeb858e
largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23976
diff
changeset
|
821 if not os.path.isdir(makestandin(dest)): |
42fa7eeb858e
largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23976
diff
changeset
|
822 os.makedirs(makestandin(dest)) |
42fa7eeb858e
largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23976
diff
changeset
|
823 |
15168 | 824 try: |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
825 # When we call orig below it creates the standins but we don't add |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
826 # them to the dir state until later so lock during that time. |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
827 wlock = repo.wlock() |
15168 | 828 |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
829 manifest = repo[None].manifest() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
830 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
831 def overridematch( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
832 orig, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
833 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
834 pats=(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
835 opts=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
836 globbed=False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
837 default=b'relpath', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
838 badfn=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
839 ): |
26341
f46e7f3b70af
largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26340
diff
changeset
|
840 if opts is None: |
f46e7f3b70af
largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26340
diff
changeset
|
841 opts = {} |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
842 newpats = [] |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
843 # The patterns were previously mangled to add the standin |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
844 # directory; we need to remove that now |
15168 | 845 for pat in pats: |
29318
2572bb2e06f8
largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents:
29311
diff
changeset
|
846 if matchmod.patkind(pat) is None and lfutil.shortname in pat: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
847 newpats.append(pat.replace(lfutil.shortname, b'')) |
15168 | 848 else: |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
849 newpats.append(pat) |
41580
9f11759fc5f5
largefiles: use wrappedfunction() for match() override in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41579
diff
changeset
|
850 match = orig(ctx, newpats, opts, globbed, default, badfn=badfn) |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
851 m = copy.copy(match) |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
852 lfile = lambda f: lfutil.standin(f) in manifest |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
853 m._files = [lfutil.standin(f) for f in m._files if lfile(f)] |
32322
23c9a2a71c6e
match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents:
32308
diff
changeset
|
854 m._fileset = set(m._files) |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
855 origmatchfn = m.matchfn |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
856 |
31613
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
857 def matchfn(f): |
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
858 lfile = lfutil.splitstandin(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
859 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
860 lfile is not None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
861 and (f in manifest) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
862 and origmatchfn(lfile) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
863 or None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
864 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
865 |
31613
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
866 m.matchfn = matchfn |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
867 return m |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
868 |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
869 listpats = [] |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
870 for pat in pats: |
29318
2572bb2e06f8
largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents:
29311
diff
changeset
|
871 if matchmod.patkind(pat) is not None: |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
872 listpats.append(pat) |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
873 else: |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
874 listpats.append(makestandin(pat)) |
15168 | 875 |
41579
028bb170e74d
largefiles: use wrappedfunction() for util.copyfile() override
Martin von Zweigbergk <martinvonz@google.com>
parents:
41578
diff
changeset
|
876 copiedfiles = [] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
877 |
41579
028bb170e74d
largefiles: use wrappedfunction() for util.copyfile() override
Martin von Zweigbergk <martinvonz@google.com>
parents:
41578
diff
changeset
|
878 def overridecopyfile(orig, src, dest, *args, **kwargs): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
879 if lfutil.shortname in src and dest.startswith( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
880 repo.wjoin(lfutil.shortname) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
881 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
882 destlfile = dest.replace(lfutil.shortname, b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
883 if not opts[b'force'] and os.path.exists(destlfile): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
884 raise IOError( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
885 b'', _(b'destination largefile already exists') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
886 ) |
41579
028bb170e74d
largefiles: use wrappedfunction() for util.copyfile() override
Martin von Zweigbergk <martinvonz@google.com>
parents:
41578
diff
changeset
|
887 copiedfiles.append((src, dest)) |
028bb170e74d
largefiles: use wrappedfunction() for util.copyfile() override
Martin von Zweigbergk <martinvonz@google.com>
parents:
41578
diff
changeset
|
888 orig(src, dest, *args, **kwargs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
889 |
50787
584fc92dd8d7
wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50785
diff
changeset
|
890 with extensions.wrappedfunction(util, 'copyfile', overridecopyfile): |
584fc92dd8d7
wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50785
diff
changeset
|
891 with extensions.wrappedfunction(scmutil, 'match', overridematch): |
41760
1eb2fc21da12
cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents:
41676
diff
changeset
|
892 result += orig(ui, repo, listpats, opts, rename) |
21196
5c0d5b95b824
largefiles: remove directories emptied after their files are moved (issue3515)
Matt Harbison <matt_harbison@yahoo.com>
parents:
21110
diff
changeset
|
893 |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
894 lfdirstate = lfutil.openlfdirstate(ui, repo) |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
895 for (src, dest) in copiedfiles: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
896 if lfutil.shortname in src and dest.startswith( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
897 repo.wjoin(lfutil.shortname) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
898 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
899 srclfile = src.replace(repo.wjoin(lfutil.standin(b'')), b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
900 destlfile = dest.replace(repo.wjoin(lfutil.standin(b'')), b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
901 destlfiledir = repo.wvfs.dirname(repo.wjoin(destlfile)) or b'.' |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
902 if not os.path.isdir(destlfiledir): |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
903 os.makedirs(destlfiledir) |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
904 if rename: |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
905 os.rename(repo.wjoin(srclfile), repo.wjoin(destlfile)) |
17245
6e84171a61c8
largefiles: fix path handling for cp/mv (issue3516)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17232
diff
changeset
|
906 |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
907 # The file is gone, but this deletes any empty parent |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
908 # directories as a side-effect. |
31309
8908f985570c
vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents:
31099
diff
changeset
|
909 repo.wvfs.unlinkpath(srclfile, ignoremissing=True) |
47655
0ab58b1f228f
largefile: use `set_untracked` in the override of copy/rename
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47654
diff
changeset
|
910 lfdirstate.set_untracked(srclfile) |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
911 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
912 util.copyfile(repo.wjoin(srclfile), repo.wjoin(destlfile)) |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
913 |
47650
1e5a9783bba8
largefile: use `set_tracked` in the `hg copy` overwrite
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47649
diff
changeset
|
914 lfdirstate.set_tracked(destlfile) |
48168
df3021c1f093
largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
48118
diff
changeset
|
915 lfdirstate.write(repo.currenttransaction()) |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26427
diff
changeset
|
916 except error.Abort as e: |
45682
d2e1dcd4490d
errors: name arguments to Abort constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
917 if e.message != _(b'no files to copy'): |
25079
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
918 raise e |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
919 else: |
bee00e0c2e45
largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24954
diff
changeset
|
920 nolfiles = True |
15168 | 921 finally: |
922 wlock.release() | |
923 | |
924 if nolfiles and nonormalfiles: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
925 raise error.Abort(_(b'no files to copy')) |
15168 | 926 |
927 return result | |
928 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
929 |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
930 # When the user calls revert, we have to be careful to not revert any |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
931 # changes to other largefiles accidentally. This means we have to keep |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
932 # track of the largefiles that are being reverted so we only pull down |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
933 # the necessary largefiles. |
15168 | 934 # |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
935 # Standins are only updated (to match the hash of largefiles) before |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
936 # commits. Update the standins then run the original revert, changing |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
937 # the matcher to hit standins instead of largefiles. Based on the |
21094
4643bfec2485
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents:
21093
diff
changeset
|
938 # resulting standins update the largefiles. |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
939 @eh.wrapfunction(cmdutil, 'revert') |
45375
8c466bcb0879
revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents:
45348
diff
changeset
|
940 def overriderevert(orig, ui, repo, ctx, *pats, **opts): |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
941 # Because we put the standins in a bad state (by updating them) |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
942 # and then return them to a correct state we need to lock to |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
943 # prevent others from changing them in their incorrect state. |
50138
270dc01481af
large-files: use `running_status` in `overriderevert`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50103
diff
changeset
|
944 with repo.wlock(), repo.dirstate.running_status(repo): |
15168 | 945 lfdirstate = lfutil.openlfdirstate(ui, repo) |
23039
1350b9170089
largefiles: remove confusing rev parameter for lfdirstatestatus
Mads Kiilerich <madski@unity3d.com>
parents:
23038
diff
changeset
|
946 s = lfutil.lfdirstatestatus(lfdirstate, repo) |
48168
df3021c1f093
largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
48118
diff
changeset
|
947 lfdirstate.write(repo.currenttransaction()) |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
948 for lfile in s.modified: |
31659
0eec36112e58
largefiles: add lfile argument to updatestandin() for efficiency (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31656
diff
changeset
|
949 lfutil.updatestandin(repo, lfile, lfutil.standin(lfile)) |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
950 for lfile in s.deleted: |
31618
8228bc8fed8c
largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31617
diff
changeset
|
951 fstandin = lfutil.standin(lfile) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
952 if repo.wvfs.exists(fstandin): |
31618
8228bc8fed8c
largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31617
diff
changeset
|
953 repo.wvfs.unlink(fstandin) |
15168 | 954 |
21094
4643bfec2485
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents:
21093
diff
changeset
|
955 oldstandins = lfutil.getstandinsstate(repo) |
4643bfec2485
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents:
21093
diff
changeset
|
956 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
957 def overridematch( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
958 orig, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
959 mctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
960 pats=(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
961 opts=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
962 globbed=False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
963 default=b'relpath', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
964 badfn=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
965 ): |
26343
019559aa2e80
largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26342
diff
changeset
|
966 if opts is None: |
019559aa2e80
largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26342
diff
changeset
|
967 opts = {} |
41582
7b2580e0dbbd
largefiles: use wrappedfunction() in overriderevert()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41581
diff
changeset
|
968 match = orig(mctx, pats, opts, globbed, default, badfn=badfn) |
21095
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
969 m = copy.copy(match) |
24133
79c2c29c71ae
largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents:
24029
diff
changeset
|
970 |
79c2c29c71ae
largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents:
24029
diff
changeset
|
971 # revert supports recursing into subrepos, and though largefiles |
79c2c29c71ae
largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents:
24029
diff
changeset
|
972 # currently doesn't work correctly in that case, this match is |
79c2c29c71ae
largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents:
24029
diff
changeset
|
973 # called, so the lfdirstate above may not be the correct one for |
79c2c29c71ae
largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents:
24029
diff
changeset
|
974 # this invocation of match. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
975 lfdirstate = lfutil.openlfdirstate( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
976 mctx.repo().ui, mctx.repo(), False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
977 ) |
24133
79c2c29c71ae
largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents:
24029
diff
changeset
|
978 |
31654
1af4a1641bdb
largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31653
diff
changeset
|
979 wctx = repo[None] |
31656
0192aa8626c1
largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31655
diff
changeset
|
980 matchfiles = [] |
0192aa8626c1
largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31655
diff
changeset
|
981 for f in m._files: |
24437
2703eb73a3af
largefiles: extract and reuse 'standin' variable in overriderevert()
Martin von Zweigbergk <martinvonz@google.com>
parents:
24436
diff
changeset
|
982 standin = lfutil.standin(f) |
24438
5b85a5bc5bbb
revert: evaluate filesets against working directory (issue4497)
Martin von Zweigbergk <martinvonz@google.com>
parents:
24437
diff
changeset
|
983 if standin in ctx or standin in mctx: |
31656
0192aa8626c1
largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31655
diff
changeset
|
984 matchfiles.append(standin) |
48106
82e142b9ad18
dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48063
diff
changeset
|
985 elif standin in wctx or lfdirstate.get_entry(f).removed: |
31656
0192aa8626c1
largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31655
diff
changeset
|
986 continue |
0192aa8626c1
largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31655
diff
changeset
|
987 else: |
0192aa8626c1
largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31655
diff
changeset
|
988 matchfiles.append(f) |
0192aa8626c1
largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31655
diff
changeset
|
989 m._files = matchfiles |
32322
23c9a2a71c6e
match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents:
32308
diff
changeset
|
990 m._fileset = set(m._files) |
21095
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
991 origmatchfn = m.matchfn |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
992 |
21095
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
993 def matchfn(f): |
31613
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
994 lfile = lfutil.splitstandin(f) |
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
995 if lfile is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
996 return origmatchfn(lfile) and (f in ctx or f in mctx) |
21095
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
997 return origmatchfn(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
998 |
21095
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
999 m.matchfn = matchfn |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
1000 return m |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1001 |
50787
584fc92dd8d7
wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50785
diff
changeset
|
1002 with extensions.wrappedfunction(scmutil, 'match', overridematch): |
45375
8c466bcb0879
revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents:
45348
diff
changeset
|
1003 orig(ui, repo, ctx, *pats, **opts) |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
1004 |
21094
4643bfec2485
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents:
21093
diff
changeset
|
1005 newstandins = lfutil.getstandinsstate(repo) |
4643bfec2485
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents:
21093
diff
changeset
|
1006 filelist = lfutil.getlfilestoupdate(oldstandins, newstandins) |
21934
0cb34b3991f8
largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21884
diff
changeset
|
1007 # lfdirstate should be 'normallookup'-ed for updated files, |
0cb34b3991f8
largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21884
diff
changeset
|
1008 # because reverting doesn't touch dirstate for 'normal' files |
0cb34b3991f8
largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21884
diff
changeset
|
1009 # when target revision is explicitly specified: in such case, |
0cb34b3991f8
largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21884
diff
changeset
|
1010 # 'n' and valid timestamp in dirstate doesn't ensure 'clean' |
0cb34b3991f8
largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21884
diff
changeset
|
1011 # of target (standin) file. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1012 lfcommands.updatelfiles( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1013 ui, repo, filelist, printmessage=False, normallookup=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1014 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1015 |
21094
4643bfec2485
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents:
21093
diff
changeset
|
1016 |
23183
51c9196a6bd0
largefiles: remove meaningless code path for "hg pull --rebase"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23145
diff
changeset
|
1017 # after pulling changesets, we need to take some extra care to get |
51c9196a6bd0
largefiles: remove meaningless code path for "hg pull --rebase"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23145
diff
changeset
|
1018 # largefiles updated remotely |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1019 @eh.wrapcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1020 b'pull', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1021 opts=[ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1022 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1023 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1024 b'all-largefiles', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1025 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1026 _(b'download all pulled versions of largefiles (DEPRECATED)'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1027 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1028 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1029 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1030 b'lfrev', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1031 [], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1032 _(b'download largefiles for these revisions'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1033 _(b'REV'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1034 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1035 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1036 ) |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
1037 def overridepull(orig, ui, repo, source=None, **opts): |
16692
b9969574540a
largefiles: add --all-largefiles flag to pull
Na'Tosha Bard <natosha@unity3d.com>
parents:
16691
diff
changeset
|
1038 revsprepull = len(repo) |
18977
864232481e76
largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
1039 if not source: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1040 source = b'default' |
18977
864232481e76
largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
1041 repo.lfpullsource = source |
23183
51c9196a6bd0
largefiles: remove meaningless code path for "hg pull --rebase"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23145
diff
changeset
|
1042 result = orig(ui, repo, source, **opts) |
18977
864232481e76
largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
1043 revspostpull = len(repo) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
1044 lfrevs = opts.get('lfrev', []) |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
1045 if opts.get('all_largefiles'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1046 lfrevs.append(b'pulled()') |
18978
8abaadab9abb
largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents:
18977
diff
changeset
|
1047 if lfrevs and revspostpull > revsprepull: |
8abaadab9abb
largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents:
18977
diff
changeset
|
1048 numcached = 0 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1049 repo.firstpulled = revsprepull # for pulled() revset expression |
18979
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1050 try: |
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
|
1051 for rev in logcmdutil.revrange(repo, lfrevs): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1052 ui.note(_(b'pulling largefiles for revision %d\n') % rev) |
18979
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1053 (cached, missing) = lfcommands.cachelfiles(ui, repo, rev) |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1054 numcached += len(cached) |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1055 finally: |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1056 del repo.firstpulled |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1057 ui.status(_(b"%d largefiles cached\n") % numcached) |
15168 | 1058 return result |
1059 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1060 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1061 @eh.wrapcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1062 b'push', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1063 opts=[ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1064 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1065 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1066 b'lfrev', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1067 [], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1068 _(b'upload largefiles for these revisions'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1069 _(b'REV'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1070 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1071 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1072 ) |
28878
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28715
diff
changeset
|
1073 def overridepush(orig, ui, repo, *args, **kwargs): |
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28715
diff
changeset
|
1074 """Override push command and store --lfrev parameters in opargs""" |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
1075 lfrevs = kwargs.pop('lfrev', None) |
28878
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28715
diff
changeset
|
1076 if lfrevs: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
1077 opargs = kwargs.setdefault('opargs', {}) |
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
|
1078 opargs[b'lfrevs'] = logcmdutil.revrange(repo, lfrevs) |
28878
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28715
diff
changeset
|
1079 return orig(ui, repo, *args, **kwargs) |
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28715
diff
changeset
|
1080 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1081 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1082 @eh.wrapfunction(exchange, 'pushoperation') |
28878
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28715
diff
changeset
|
1083 def exchangepushoperation(orig, *args, **kwargs): |
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28715
diff
changeset
|
1084 """Override pushoperation constructor and store lfrevs parameter""" |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
1085 lfrevs = kwargs.pop('lfrevs', None) |
28878
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28715
diff
changeset
|
1086 pushop = orig(*args, **kwargs) |
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28715
diff
changeset
|
1087 pushop.lfrevs = lfrevs |
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28715
diff
changeset
|
1088 return pushop |
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28715
diff
changeset
|
1089 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1090 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1091 @eh.revsetpredicate(b'pulled()') |
18979
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1092 def pulledrevsetsymbol(repo, subset, x): |
27586
42910f9fffeb
revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27345
diff
changeset
|
1093 """Changesets that just has been pulled. |
18979
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1094 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1095 Only available with largefiles from pull --lfrev expressions. |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1096 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1097 .. container:: verbose |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1098 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1099 Some examples: |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1100 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1101 - pull largefiles for all new changesets:: |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1102 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1103 hg pull -lfrev "pulled()" |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1104 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1105 - pull largefiles for all new branch heads:: |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1106 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1107 hg pull -lfrev "head(pulled()) and not closed()" |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1108 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1109 """ |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1110 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1111 try: |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1112 firstpulled = repo.firstpulled |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1113 except AttributeError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1114 raise error.Abort(_(b"pulled() only available in --lfrev")) |
31023
aea06029919e
revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents:
30215
diff
changeset
|
1115 return smartset.baseset([r for r in subset if r >= firstpulled]) |
18979
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
1116 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1117 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1118 @eh.wrapcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1119 b'clone', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1120 opts=[ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1121 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1122 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1123 b'all-largefiles', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1124 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1125 _(b'download all versions of all largefiles'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1126 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1127 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1128 ) |
16644
98a9266db803
largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16642
diff
changeset
|
1129 def overrideclone(orig, ui, source, dest=None, **opts): |
17600
3a1c6b64e052
largefiles: don't convert dest=None to dest=hg.defaultdest() in clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17599
diff
changeset
|
1130 d = dest |
3a1c6b64e052
largefiles: don't convert dest=None to dest=hg.defaultdest() in clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17599
diff
changeset
|
1131 if d is None: |
3a1c6b64e052
largefiles: don't convert dest=None to dest=hg.defaultdest() in clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17599
diff
changeset
|
1132 d = hg.defaultdest(source) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
1133 if opts.get('all_largefiles') and not hg.islocal(d): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1134 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1135 _(b'--all-largefiles is incompatible with non-local destination %s') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1136 % d |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1137 ) |
17601
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
1138 |
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
1139 return orig(ui, source, dest, **opts) |
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
1140 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1141 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1142 @eh.wrapfunction(hg, 'clone') |
17601
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
1143 def hgclone(orig, ui, opts, *args, **kwargs): |
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
1144 result = orig(ui, opts, *args, **kwargs) |
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
1145 |
17824
221c9c3146eb
largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents:
17702
diff
changeset
|
1146 if result is not None: |
16644
98a9266db803
largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16642
diff
changeset
|
1147 sourcerepo, destrepo = result |
17599
56136786000f
largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents:
17598
diff
changeset
|
1148 repo = destrepo.local() |
56136786000f
largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents:
17598
diff
changeset
|
1149 |
24812
e4e69cebeedd
largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
1150 # When cloning to a remote repo (like through SSH), no repo is available |
e4e69cebeedd
largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
1151 # from the peer. Therefore the largefiles can't be downloaded and the |
e4e69cebeedd
largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
1152 # hgrc can't be updated. |
e4e69cebeedd
largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
1153 if not repo: |
e4e69cebeedd
largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
1154 return result |
e4e69cebeedd
largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24788
diff
changeset
|
1155 |
17599
56136786000f
largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents:
17598
diff
changeset
|
1156 # Caching is implicitly limited to 'rev' option, since the dest repo was |
17824
221c9c3146eb
largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents:
17702
diff
changeset
|
1157 # truncated at that point. The user may expect a download count with |
221c9c3146eb
largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents:
17702
diff
changeset
|
1158 # this option, so attempt whether or not this is a largefile repo. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1159 if opts.get(b'all_largefiles'): |
45453
39ddb1121c4e
largefiles: remove unused 'rev' parameter from downloadlfiles()
Yuya Nishihara <yuya@tcha.org>
parents:
45375
diff
changeset
|
1160 success, missing = lfcommands.downloadlfiles(ui, repo) |
17601
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
1161 |
17824
221c9c3146eb
largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents:
17702
diff
changeset
|
1162 if missing != 0: |
221c9c3146eb
largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents:
17702
diff
changeset
|
1163 return None |
17601
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
1164 |
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
1165 return result |
16644
98a9266db803
largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16642
diff
changeset
|
1166 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1167 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1168 @eh.wrapcommand(b'rebase', extension=b'rebase') |
45545
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1169 def overriderebasecmd(orig, ui, repo, **opts): |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50892
diff
changeset
|
1170 if not hasattr(repo, '_largefilesenabled'): |
24158
d414c28db84d
largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23976
diff
changeset
|
1171 return orig(ui, repo, **opts) |
d414c28db84d
largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23976
diff
changeset
|
1172 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
1173 resuming = opts.get('continue') |
23187
f726b05ecfe6
largefiles: update standins only at the 1st commit of "hg rebase --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23183
diff
changeset
|
1174 repo._lfcommithooks.append(lfutil.automatedcommithook(resuming)) |
23190
383ff455cab8
largefiles: avoid printing messages while rebasing by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23189
diff
changeset
|
1175 repo._lfstatuswriters.append(lambda *msg, **opts: None) |
15168 | 1176 try: |
45545
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1177 with ui.configoverride( |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1178 {(b'rebase', b'experimental.inmemory'): False}, b"largefiles" |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1179 ): |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1180 return orig(ui, repo, **opts) |
15168 | 1181 finally: |
23190
383ff455cab8
largefiles: avoid printing messages while rebasing by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23189
diff
changeset
|
1182 repo._lfstatuswriters.pop() |
23187
f726b05ecfe6
largefiles: update standins only at the 1st commit of "hg rebase --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23183
diff
changeset
|
1183 repo._lfcommithooks.pop() |
15168 | 1184 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1185 |
45545
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1186 @eh.extsetup |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1187 def overriderebase(ui): |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1188 try: |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1189 rebase = extensions.find(b'rebase') |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1190 except KeyError: |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1191 pass |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1192 else: |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1193 |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1194 def _dorebase(orig, *args, **kwargs): |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1195 kwargs['inmemory'] = False |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1196 return orig(*args, **kwargs) |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1197 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1198 extensions.wrapfunction(rebase, '_dorebase', _dorebase) |
45545
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1199 |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1200 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1201 @eh.wrapcommand(b'archive') |
25811
7699d3212994
largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
25660
diff
changeset
|
1202 def overridearchivecmd(orig, ui, repo, dest, **opts): |
43294
03dae1044edd
largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
1203 with lfstatus(repo.unfiltered()): |
25811
7699d3212994
largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
25660
diff
changeset
|
1204 return orig(ui, repo.unfiltered(), dest, **opts) |
7699d3212994
largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
25660
diff
changeset
|
1205 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1206 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1207 @eh.wrapfunction(webcommands, 'archive') |
36887
4daa22071d5d
hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36736
diff
changeset
|
1208 def hgwebarchive(orig, web): |
43294
03dae1044edd
largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
1209 with lfstatus(web.repo): |
36887
4daa22071d5d
hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36736
diff
changeset
|
1210 return orig(web) |
26417
9a466b9f9792
largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25811
diff
changeset
|
1211 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1212 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1213 @eh.wrapfunction(archival, 'archive') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1214 def overridearchive( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1215 orig, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1216 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1217 dest, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1218 node, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1219 kind, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1220 decode=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1221 match=None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1222 prefix=b'', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1223 mtime=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1224 subrepos=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1225 ): |
26417
9a466b9f9792
largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25811
diff
changeset
|
1226 # For some reason setting repo.lfstatus in hgwebarchive only changes the |
9a466b9f9792
largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25811
diff
changeset
|
1227 # unfiltered repo's attr, so check that as well. |
9a466b9f9792
largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25811
diff
changeset
|
1228 if not repo.lfstatus and not repo.unfiltered().lfstatus: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1229 return orig( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1230 repo, dest, node, kind, decode, match, prefix, mtime, subrepos |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1231 ) |
25811
7699d3212994
largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
25660
diff
changeset
|
1232 |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
1233 # No need to lock because we are only reading history and |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
1234 # largefile caches, neither of which are modified. |
25601
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1235 if node is not None: |
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1236 lfcommands.cachelfiles(repo.ui, repo, node) |
15168 | 1237 |
1238 if kind not in archival.archivers: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1239 raise error.Abort(_(b"unknown archive type '%s'") % kind) |
15168 | 1240 |
1241 ctx = repo[node] | |
1242 | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1243 if kind == b'files': |
15224
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
1244 if prefix: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1245 raise error.Abort(_(b'cannot give prefix when archiving to files')) |
15224
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
1246 else: |
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
1247 prefix = archival.tidyprefix(dest, kind, prefix) |
15168 | 1248 |
15224
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
1249 def write(name, mode, islink, getdata): |
40407
3d76a8e627a6
archive: change "matcnfn" argument to a real matcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
39854
diff
changeset
|
1250 if match and not match(name): |
15224
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
1251 return |
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
1252 data = getdata() |
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
1253 if decode: |
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
1254 data = repo.wwritedata(name, data) |
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
1255 archiver.addfile(prefix + name, mode, islink, data) |
15168 | 1256 |
15224
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
1257 archiver = archival.archivers[kind](dest, mtime or ctx.date()[0]) |
15168 | 1258 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1259 if repo.ui.configbool(b"ui", b"archivemeta"): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1260 write( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1261 b'.hg_archival.txt', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1262 0o644, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1263 False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1264 lambda: archival.buildmetadata(ctx), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1265 ) |
15168 | 1266 |
1267 for f in ctx: | |
1268 ff = ctx.flags(f) | |
1269 getdata = ctx[f].data | |
31613
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1270 lfile = lfutil.splitstandin(f) |
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1271 if lfile is not None: |
25601
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1272 if node is not None: |
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1273 path = lfutil.findfile(repo, getdata().strip()) |
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1274 |
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1275 if path is None: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26427
diff
changeset
|
1276 raise error.Abort( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1277 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1278 b'largefile %s not found in repo store or system cache' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1279 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1280 % lfile |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1281 ) |
25601
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1282 else: |
31613
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1283 path = lfile |
25601
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1284 |
31613
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1285 f = lfile |
15168 | 1286 |
27772
00bd72629a45
largefiles: use util.readfile in overrides
Bryan O'Sullivan <bryano@fb.com>
parents:
27655
diff
changeset
|
1287 getdata = lambda: util.readfile(path) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1288 write(f, b'x' in ff and 0o755 or 0o644, b'l' in ff, getdata) |
15168 | 1289 |
1290 if subrepos: | |
18364
6252b4f1c4b4
subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
18341
diff
changeset
|
1291 for subpath in sorted(ctx.substate): |
25601
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1292 sub = ctx.workingsub(subpath) |
40407
3d76a8e627a6
archive: change "matcnfn" argument to a real matcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
39854
diff
changeset
|
1293 submatch = matchmod.subdirmatcher(subpath, match) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1294 subprefix = prefix + subpath + b'/' |
44015
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1295 |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1296 # TODO: Only hgsubrepo instances have `_repo`, so figure out how to |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1297 # infer and possibly set lfstatus in hgsubrepoarchive. That would |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1298 # allow only hgsubrepos to set this, instead of the current scheme |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1299 # where the parent sets this for the child. |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1300 with ( |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50892
diff
changeset
|
1301 hasattr(sub, '_repo') |
44015
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1302 and lfstatus(sub._repo) |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1303 or util.nullcontextmanager() |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1304 ): |
43296
2cb787b65cf2
largefiles: use context manager for setting "lfstatus" on subrepos too
Martin von Zweigbergk <martinvonz@google.com>
parents:
43295
diff
changeset
|
1305 sub.archive(archiver, subprefix, submatch) |
15168 | 1306 |
1307 archiver.done() | |
1308 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1309 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1310 @eh.wrapfunction(subrepo.hgsubrepo, 'archive') |
31099
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
31023
diff
changeset
|
1311 def hgsubrepoarchive(orig, repo, archiver, prefix, match=None, decode=True): |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50892
diff
changeset
|
1312 lfenabled = hasattr(repo._repo, '_largefilesenabled') |
32827
d3ab31bf9c0e
largefiles: avoid a crash when archiving a subrepo with largefiles disabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
31892
diff
changeset
|
1313 if not lfenabled or not repo._repo.lfstatus: |
31099
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
31023
diff
changeset
|
1314 return orig(repo, archiver, prefix, match, decode) |
25811
7699d3212994
largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
25660
diff
changeset
|
1315 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1316 repo._get(repo._state + (b'hg',)) |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1317 rev = repo._state[1] |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1318 ctx = repo._repo[rev] |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1319 |
25601
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1320 if ctx.node() is not None: |
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1321 lfcommands.cachelfiles(repo.ui, repo._repo, ctx.node()) |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1322 |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1323 def write(name, mode, islink, getdata): |
17108
1894dac619de
subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17107
diff
changeset
|
1324 # At this point, the standin has been replaced with the largefile name, |
1894dac619de
subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17107
diff
changeset
|
1325 # so the normal matcher works here without the lfutil variants. |
1894dac619de
subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17107
diff
changeset
|
1326 if match and not match(f): |
1894dac619de
subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17107
diff
changeset
|
1327 return |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1328 data = getdata() |
31099
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
31023
diff
changeset
|
1329 if decode: |
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
31023
diff
changeset
|
1330 data = repo._repo.wwritedata(name, data) |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1331 |
41631
3d9d5e612e67
subrepo: adjust subrepo prefix before calling subrepo.archive() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41582
diff
changeset
|
1332 archiver.addfile(prefix + name, mode, islink, data) |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1333 |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1334 for f in ctx: |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1335 ff = ctx.flags(f) |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1336 getdata = ctx[f].data |
31613
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1337 lfile = lfutil.splitstandin(f) |
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1338 if lfile is not None: |
25601
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1339 if ctx.node() is not None: |
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1340 path = lfutil.findfile(repo._repo, getdata().strip()) |
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1341 |
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1342 if path is None: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26427
diff
changeset
|
1343 raise error.Abort( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1344 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1345 b'largefile %s not found in repo store or system cache' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1346 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1347 % lfile |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1348 ) |
25601
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1349 else: |
31613
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1350 path = lfile |
25601
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1351 |
31613
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1352 f = lfile |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1353 |
27772
00bd72629a45
largefiles: use util.readfile in overrides
Bryan O'Sullivan <bryano@fb.com>
parents:
27655
diff
changeset
|
1354 getdata = lambda: util.readfile(os.path.join(prefix, path)) |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1355 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1356 write(f, b'x' in ff and 0o755 or 0o644, b'l' in ff, getdata) |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1357 |
18364
6252b4f1c4b4
subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
18341
diff
changeset
|
1358 for subpath in sorted(ctx.substate): |
25601
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25467
diff
changeset
|
1359 sub = ctx.workingsub(subpath) |
29318
2572bb2e06f8
largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents:
29311
diff
changeset
|
1360 submatch = matchmod.subdirmatcher(subpath, match) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1361 subprefix = prefix + subpath + b'/' |
44015
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1362 # TODO: Only hgsubrepo instances have `_repo`, so figure out how to |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1363 # infer and possibly set lfstatus at the top of this function. That |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1364 # would allow only hgsubrepos to set this, instead of the current scheme |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1365 # where the parent sets this for the child. |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1366 with ( |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50892
diff
changeset
|
1367 hasattr(sub, '_repo') |
44015
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1368 and lfstatus(sub._repo) |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1369 or util.nullcontextmanager() |
7ca8aa8840c0
subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
43296
diff
changeset
|
1370 ): |
43296
2cb787b65cf2
largefiles: use context manager for setting "lfstatus" on subrepos too
Martin von Zweigbergk <martinvonz@google.com>
parents:
43295
diff
changeset
|
1371 sub.archive(archiver, subprefix, submatch, decode) |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
1372 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1373 |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
1374 # If a largefile is modified, the change is not reflected in its |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
1375 # standin until a commit. cmdutil.bailifchanged() raises an exception |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
1376 # if the repo has uncommitted changes. Wrap it to also check if |
23441
d289ba74dba3
largefiles: drop the override for 'fetch'
Matt Harbison <matt_harbison@yahoo.com>
parents:
23428
diff
changeset
|
1377 # largefiles were changed. This is used by bisect, backout and fetch. |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1378 @eh.wrapfunction(cmdutil, 'bailifchanged') |
24472
1bf71faf042e
cmdutil: allow bailifchanged to ignore merging in progress
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24438
diff
changeset
|
1379 def overridebailifchanged(orig, repo, *args, **kwargs): |
1bf71faf042e
cmdutil: allow bailifchanged to ignore merging in progress
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24438
diff
changeset
|
1380 orig(repo, *args, **kwargs) |
43294
03dae1044edd
largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
1381 with lfstatus(repo): |
03dae1044edd
largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
1382 s = repo.status() |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1383 if s.modified or s.added or s.removed or s.deleted: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1384 raise error.Abort(_(b'uncommitted changes')) |
15168 | 1385 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1386 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1387 @eh.wrapfunction(cmdutil, 'postcommitstatus') |
27944
4511e8dac4c7
largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents:
27905
diff
changeset
|
1388 def postcommitstatus(orig, repo, *args, **kwargs): |
43294
03dae1044edd
largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
1389 with lfstatus(repo): |
27944
4511e8dac4c7
largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents:
27905
diff
changeset
|
1390 return orig(repo, *args, **kwargs) |
4511e8dac4c7
largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents:
27905
diff
changeset
|
1391 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1392 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1393 @eh.wrapfunction(cmdutil, 'forget') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1394 def cmdutilforget( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1395 orig, ui, repo, match, prefix, uipathfn, explicitonly, dryrun, interactive |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1396 ): |
23837
2b79d124a12f
largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents:
23782
diff
changeset
|
1397 normalmatcher = composenormalfilematcher(match, repo[None].manifest()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1398 bad, forgot = orig( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1399 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1400 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1401 normalmatcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1402 prefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1403 uipathfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1404 explicitonly, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1405 dryrun, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1406 interactive, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1407 ) |
23837
2b79d124a12f
largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents:
23782
diff
changeset
|
1408 m = composelargefilematcher(match, repo[None].manifest()) |
15168 | 1409 |
43294
03dae1044edd
largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
1410 with lfstatus(repo): |
15168 | 1411 s = repo.status(match=m, clean=True) |
31654
1af4a1641bdb
largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31653
diff
changeset
|
1412 manifest = repo[None].manifest() |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1413 forget = sorted(s.modified + s.added + s.deleted + s.clean) |
31654
1af4a1641bdb
largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31653
diff
changeset
|
1414 forget = [f for f in forget if lfutil.standin(f) in manifest] |
15168 | 1415 |
1416 for f in forget: | |
31618
8228bc8fed8c
largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31617
diff
changeset
|
1417 fstandin = lfutil.standin(f) |
8228bc8fed8c
largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31617
diff
changeset
|
1418 if fstandin not in repo.dirstate and not repo.wvfs.isdir(fstandin): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1419 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1420 _(b'not removing %s: file is already untracked\n') % uipathfn(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1421 ) |
23837
2b79d124a12f
largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents:
23782
diff
changeset
|
1422 bad.append(f) |
15168 | 1423 |
1424 for f in forget: | |
1425 if ui.verbose or not m.exact(f): | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1426 ui.status(_(b'removing %s\n') % uipathfn(f)) |
15168 | 1427 |
1428 # Need to lock because standin files are deleted then removed from the | |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
17299
diff
changeset
|
1429 # repository and we could race in-between. |
27824
0e55e93b50b5
with: use context manager for wlock in cmdutilforget
Bryan O'Sullivan <bryano@fb.com>
parents:
27823
diff
changeset
|
1430 with repo.wlock(): |
15168 | 1431 lfdirstate = lfutil.openlfdirstate(ui, repo) |
1432 for f in forget: | |
47654
2af9709ea13c
largefile: use `set_untracked` in the `forget` override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47653
diff
changeset
|
1433 lfdirstate.set_untracked(f) |
48168
df3021c1f093
largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
48118
diff
changeset
|
1434 lfdirstate.write(repo.currenttransaction()) |
18153
51837a31b425
largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents:
18152
diff
changeset
|
1435 standins = [lfutil.standin(f) for f in forget] |
51837a31b425
largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents:
18152
diff
changeset
|
1436 for f in standins: |
31309
8908f985570c
vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents:
31099
diff
changeset
|
1437 repo.wvfs.unlinkpath(f, ignoremissing=True) |
23837
2b79d124a12f
largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents:
23782
diff
changeset
|
1438 rejected = repo[None].forget(standins) |
15168 | 1439 |
23837
2b79d124a12f
largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents:
23782
diff
changeset
|
1440 bad.extend(f for f in rejected if f in m.files()) |
2b79d124a12f
largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents:
23782
diff
changeset
|
1441 forgot.extend(f for f in forget if f not in rejected) |
2b79d124a12f
largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents:
23782
diff
changeset
|
1442 return bad, forgot |
17579
cbacb5a813dd
largefiles: preserve the exit status of the forget command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17578
diff
changeset
|
1443 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1444 |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1445 def _getoutgoings(repo, other, missing, addfunc): |
21882
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1446 """get pairs of filename and largefile hash in outgoing revisions |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1447 in 'missing'. |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1448 |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1449 largefiles already existing on 'other' repository are ignored. |
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1450 |
21882
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1451 'addfunc' is invoked with each unique pairs of filename and |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1452 largefile hash value. |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1453 """ |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1454 knowns = set() |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1455 lfhashes = set() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1456 |
21882
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1457 def dedup(fn, lfhash): |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1458 k = (fn, lfhash) |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1459 if k not in knowns: |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1460 knowns.add(k) |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1461 lfhashes.add(lfhash) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1462 |
21882
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1463 lfutil.getlfilestoupload(repo, missing, dedup) |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1464 if lfhashes: |
29355
85868ecf2c0d
largefiles: make storefactory._openstore public
liscju <piotr.listkiewicz@gmail.com>
parents:
29318
diff
changeset
|
1465 lfexists = storefactory.openstore(repo, other).exists(lfhashes) |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1466 for fn, lfhash in knowns: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1467 if not lfexists[lfhash]: # lfhash doesn't exist on "other" |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1468 addfunc(fn, lfhash) |
21882
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1469 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1470 |
21052
cde32cb5a565
largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21048
diff
changeset
|
1471 def outgoinghook(ui, repo, other, opts, missing): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1472 if opts.pop(b'large', None): |
21883
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1473 lfhashes = set() |
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1474 if ui.debugflag: |
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1475 toupload = {} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1476 |
21883
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1477 def addfunc(fn, lfhash): |
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1478 if fn not in toupload: |
49854
cb3918e5bc77
typing: disable [unsupported-operands] warning in the largefiles outgoing hook
Matt Harbison <matt_harbison@yahoo.com>
parents:
48946
diff
changeset
|
1479 toupload[fn] = [] # pytype: disable=unsupported-operands |
21883
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1480 toupload[fn].append(lfhash) |
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1481 lfhashes.add(lfhash) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1482 |
21883
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1483 def showhashes(fn): |
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1484 for lfhash in sorted(toupload[fn]): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1485 ui.debug(b' %s\n' % lfhash) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1486 |
21883
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1487 else: |
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1488 toupload = set() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1489 |
21883
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1490 def addfunc(fn, lfhash): |
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1491 toupload.add(fn) |
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1492 lfhashes.add(lfhash) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1493 |
21883
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1494 def showhashes(fn): |
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1495 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1496 |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1497 _getoutgoings(repo, other, missing, addfunc) |
21883
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1498 |
21052
cde32cb5a565
largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21048
diff
changeset
|
1499 if not toupload: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1500 ui.status(_(b'largefiles: no files to upload\n')) |
15168 | 1501 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1502 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1503 _(b'largefiles to upload (%d entities):\n') % (len(lfhashes)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1504 ) |
21052
cde32cb5a565
largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21048
diff
changeset
|
1505 for file in sorted(toupload): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1506 ui.status(lfutil.splitstandin(file) + b'\n') |
21883
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1507 showhashes(file) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1508 ui.status(b'\n') |
15168 | 1509 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1510 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1511 @eh.wrapcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1512 b'outgoing', opts=[(b'', b'large', None, _(b'display outgoing largefiles'))] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1513 ) |
41061
98681293c890
largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40407
diff
changeset
|
1514 def _outgoingcmd(orig, *args, **kwargs): |
98681293c890
largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40407
diff
changeset
|
1515 # Nothing to do here other than add the extra help option- the hook above |
98681293c890
largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40407
diff
changeset
|
1516 # processes it. |
98681293c890
largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40407
diff
changeset
|
1517 return orig(*args, **kwargs) |
98681293c890
largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40407
diff
changeset
|
1518 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1519 |
21048
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1520 def summaryremotehook(ui, repo, opts, changes): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1521 largeopt = opts.get(b'large', False) |
21048
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1522 if changes is None: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1523 if largeopt: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1524 return (False, True) # only outgoing check is needed |
21048
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1525 else: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1526 return (False, False) |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1527 elif largeopt: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1528 url, branch, peer, outgoing = changes[1] |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1529 if peer is None: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1530 # i18n: column positioning for "hg summary" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1531 ui.status(_(b'largefiles: (no remote repo)\n')) |
21048
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1532 return |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1533 |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1534 toupload = set() |
21882
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1535 lfhashes = set() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1536 |
21882
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1537 def addfunc(fn, lfhash): |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1538 toupload.add(fn) |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1539 lfhashes.add(lfhash) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1540 |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1541 _getoutgoings(repo, peer, outgoing.missing, addfunc) |
21882
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1542 |
21048
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1543 if not toupload: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1544 # i18n: column positioning for "hg summary" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1545 ui.status(_(b'largefiles: (no files to upload)\n')) |
21048
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1546 else: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1547 # i18n: column positioning for "hg summary" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1548 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1549 _(b'largefiles: %d entities for %d files to upload\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1550 % (len(lfhashes), len(toupload)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1551 ) |
21048
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1552 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1553 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1554 @eh.wrapcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1555 b'summary', opts=[(b'', b'large', None, _(b'display outgoing largefiles'))] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1556 ) |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
1557 def overridesummary(orig, ui, repo, *pats, **opts): |
43294
03dae1044edd
largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
1558 with lfstatus(repo): |
15787
0c7b83a057aa
largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15786
diff
changeset
|
1559 orig(ui, repo, *pats, **opts) |
15168 | 1560 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1561 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1562 @eh.wrapfunction(scmutil, 'addremove') |
50029
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50027
diff
changeset
|
1563 def scmutiladdremove( |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50027
diff
changeset
|
1564 orig, |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50027
diff
changeset
|
1565 repo, |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50027
diff
changeset
|
1566 matcher, |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50027
diff
changeset
|
1567 prefix, |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50027
diff
changeset
|
1568 uipathfn, |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50027
diff
changeset
|
1569 opts=None, |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50027
diff
changeset
|
1570 open_tr=None, |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50027
diff
changeset
|
1571 ): |
26344
cd9cc7f30427
largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26343
diff
changeset
|
1572 if opts is None: |
cd9cc7f30427
largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26343
diff
changeset
|
1573 opts = {} |
16636
b371056ae353
largefiles: follow normal codepath for addremove if non-largefiles repo (issue3249)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16516
diff
changeset
|
1574 if not lfutil.islfilesrepo(repo): |
50029
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50027
diff
changeset
|
1575 return orig(repo, matcher, prefix, uipathfn, opts, open_tr=open_tr) |
50139
ce657d7b7c39
large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50138
diff
changeset
|
1576 |
ce657d7b7c39
large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50138
diff
changeset
|
1577 # open the transaction and changing_files context |
ce657d7b7c39
large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50138
diff
changeset
|
1578 if open_tr is not None: |
ce657d7b7c39
large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50138
diff
changeset
|
1579 open_tr() |
ce657d7b7c39
large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50138
diff
changeset
|
1580 |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1581 # Get the list of missing largefiles so we can remove them |
50140
f757788a6c25
large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50139
diff
changeset
|
1582 with repo.dirstate.running_status(repo): |
f757788a6c25
large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50139
diff
changeset
|
1583 lfdirstate = lfutil.openlfdirstate(repo.ui, repo) |
f757788a6c25
large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50139
diff
changeset
|
1584 unsure, s, mtime_boundary = lfdirstate.status( |
f757788a6c25
large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50139
diff
changeset
|
1585 matchmod.always(), |
f757788a6c25
large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50139
diff
changeset
|
1586 subrepos=[], |
f757788a6c25
large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50139
diff
changeset
|
1587 ignored=False, |
f757788a6c25
large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50139
diff
changeset
|
1588 clean=False, |
f757788a6c25
large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50139
diff
changeset
|
1589 unknown=False, |
f757788a6c25
large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50139
diff
changeset
|
1590 ) |
15168 | 1591 |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1592 # Call into the normal remove code, but the removing of the standin, we want |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1593 # to have handled by original addremove. Monkey patching here makes sure |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1594 # we don't remove the standin in the largefiles code, preventing a very |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1595 # confused state later. |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1596 if s.deleted: |
23741
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
1597 m = copy.copy(matcher) |
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
1598 |
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
1599 # The m._files and m._map attributes are not changed to the deleted list |
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
1600 # because that affects the m.exact() test, which in turn governs whether |
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
1601 # or not the file name is printed, and how. Simply limit the original |
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
1602 # matches to those in the deleted status list. |
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
1603 matchfn = m.matchfn |
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
1604 m.matchfn = lambda f: f in s.deleted and matchfn(f) |
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
1605 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1606 removelargefiles( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1607 repo.ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1608 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1609 True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1610 m, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1611 uipathfn, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1612 opts.get(b'dry_run'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1613 **pycompat.strkwargs(opts) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1614 ) |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1615 # Call into the normal add code, and any files that *should* be added as |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1616 # largefiles will be |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1617 added, bad = addlargefiles( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1618 repo.ui, repo, True, matcher, uipathfn, **pycompat.strkwargs(opts) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1619 ) |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1620 # Now that we've handled largefiles, hand off to the original addremove |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1621 # function to take care of the rest. Make sure it doesn't do anything with |
23533
891aaa7c0c70
scmutil: pass a matcher to scmutil.addremove() instead of a list of patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23530
diff
changeset
|
1622 # largefiles by passing a matcher that will ignore them. |
23769
bb3ee61cfaa1
largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23768
diff
changeset
|
1623 matcher = composenormalfilematcher(matcher, repo[None].manifest(), added) |
50029
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50027
diff
changeset
|
1624 |
28dfb2df4ab9
commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50027
diff
changeset
|
1625 return orig(repo, matcher, prefix, uipathfn, opts, open_tr=open_tr) |
15168 | 1626 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1627 |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
1628 # Calling purge with --all will cause the largefiles to be deleted. |
15168 | 1629 # Override repo.status to prevent this from happening. |
46368
bb3a5c0df06b
purge: move extension into core mercurial
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46047
diff
changeset
|
1630 @eh.wrapcommand(b'purge') |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
1631 def overridepurge(orig, ui, repo, *dirs, **opts): |
23635
faec11cfb645
largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23634
diff
changeset
|
1632 # XXX Monkey patching a repoview will not work. The assigned attribute will |
faec11cfb645
largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23634
diff
changeset
|
1633 # be set on the unfiltered repo, but we will only lookup attributes in the |
faec11cfb645
largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23634
diff
changeset
|
1634 # unfiltered repo if the lookup in the repoview object itself fails. As the |
faec11cfb645
largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23634
diff
changeset
|
1635 # monkey patched method exists on the repoview class the lookup will not |
faec11cfb645
largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23634
diff
changeset
|
1636 # fail. As a result, the original version will shadow the monkey patched |
faec11cfb645
largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23634
diff
changeset
|
1637 # one, defeating the monkey patch. |
faec11cfb645
largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23634
diff
changeset
|
1638 # |
faec11cfb645
largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23634
diff
changeset
|
1639 # As a work around we use an unfiltered repo here. We should do something |
faec11cfb645
largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23634
diff
changeset
|
1640 # cleaner instead. |
18012
848c428bb5ee
largefile: status is buggy on repoproxy, so run unfiltered
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17894
diff
changeset
|
1641 repo = repo.unfiltered() |
15168 | 1642 oldstatus = repo.status |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1643 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1644 def overridestatus( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1645 node1=b'.', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1646 node2=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1647 match=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1648 ignored=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1649 clean=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1650 unknown=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1651 listsubrepos=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1652 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1653 r = oldstatus( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1654 node1, node2, match, ignored, clean, unknown, listsubrepos |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1655 ) |
15168 | 1656 lfdirstate = lfutil.openlfdirstate(ui, repo) |
48106
82e142b9ad18
dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48063
diff
changeset
|
1657 unknown = [ |
82e142b9ad18
dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48063
diff
changeset
|
1658 f for f in r.unknown if not lfdirstate.get_entry(f).any_tracked |
82e142b9ad18
dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48063
diff
changeset
|
1659 ] |
82e142b9ad18
dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48063
diff
changeset
|
1660 ignored = [ |
82e142b9ad18
dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48063
diff
changeset
|
1661 f for f in r.ignored if not lfdirstate.get_entry(f).any_tracked |
82e142b9ad18
dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48063
diff
changeset
|
1662 ] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1663 return scmutil.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1664 r.modified, r.added, r.removed, r.deleted, unknown, ignored, r.clean |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1665 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1666 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
1667 repo.status = overridestatus |
15168 | 1668 orig(ui, repo, *dirs, **opts) |
1669 repo.status = oldstatus | |
35348
576ba8194fa8
py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35303
diff
changeset
|
1670 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1671 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1672 @eh.wrapcommand(b'rollback') |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
1673 def overriderollback(orig, ui, repo, **opts): |
27825
4692571df9ee
with: use context manager for wlock in overridepurge
Bryan O'Sullivan <bryano@fb.com>
parents:
27824
diff
changeset
|
1674 with repo.wlock(): |
22283
cb556ea76dcd
largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22196
diff
changeset
|
1675 before = repo.dirstate.parents() |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44129
diff
changeset
|
1676 orphans = { |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1677 f |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1678 for f in repo.dirstate |
48106
82e142b9ad18
dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48063
diff
changeset
|
1679 if lfutil.isstandin(f) and not repo.dirstate.get_entry(f).removed |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44129
diff
changeset
|
1680 } |
22094
7d7065476fea
largefiles: put whole rollback-ing process into the same "wlock" scope
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21934
diff
changeset
|
1681 result = orig(ui, repo, **opts) |
22283
cb556ea76dcd
largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22196
diff
changeset
|
1682 after = repo.dirstate.parents() |
cb556ea76dcd
largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22196
diff
changeset
|
1683 if before == after: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1684 return result # no need to restore standins |
22283
cb556ea76dcd
largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22196
diff
changeset
|
1685 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1686 pctx = repo[b'.'] |
22285
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1687 for f in repo.dirstate: |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1688 if lfutil.isstandin(f): |
22286
3f3b9483e7ef
largefiles: unlink standins not known to the restored dirstate at rollback
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22285
diff
changeset
|
1689 orphans.discard(f) |
48106
82e142b9ad18
dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48063
diff
changeset
|
1690 if repo.dirstate.get_entry(f).removed: |
22285
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1691 repo.wvfs.unlinkpath(f, ignoremissing=True) |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1692 elif f in pctx: |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1693 fctx = pctx[f] |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1694 repo.wwrite(f, fctx.data(), fctx.flags()) |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1695 else: |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1696 # content of standin is not so important in 'a', |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1697 # 'm' or 'n' (coming from the 2nd parent) cases |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1698 lfutil.writestandin(repo, f, b'', False) |
22286
3f3b9483e7ef
largefiles: unlink standins not known to the restored dirstate at rollback
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22285
diff
changeset
|
1699 for standin in orphans: |
3f3b9483e7ef
largefiles: unlink standins not known to the restored dirstate at rollback
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22285
diff
changeset
|
1700 repo.wvfs.unlinkpath(standin, ignoremissing=True) |
22094
7d7065476fea
largefiles: put whole rollback-ing process into the same "wlock" scope
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21934
diff
changeset
|
1701 |
15168 | 1702 return result |
15383
155d0f8fb7e5
largefiles: fix bad bug where transplanting a changeset with a largefile will result in an old largefile being comitted later on
Na'Tosha Bard <natosha@unity3d.com>
parents:
15369
diff
changeset
|
1703 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1704 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1705 @eh.wrapcommand(b'transplant', extension=b'transplant') |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
1706 def overridetransplant(orig, ui, repo, *revs, **opts): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
1707 resuming = opts.get('continue') |
23274
0ec2e124fcc0
largefiles: update standins only at the 1st commit of "transplant --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23273
diff
changeset
|
1708 repo._lfcommithooks.append(lfutil.automatedcommithook(resuming)) |
23275
fae708cb32d1
largefiles: avoid printing messages while transplanting by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23274
diff
changeset
|
1709 repo._lfstatuswriters.append(lambda *msg, **opts: None) |
15982
bf502ccc46d7
largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15967
diff
changeset
|
1710 try: |
bf502ccc46d7
largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15967
diff
changeset
|
1711 result = orig(ui, repo, *revs, **opts) |
bf502ccc46d7
largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15967
diff
changeset
|
1712 finally: |
23275
fae708cb32d1
largefiles: avoid printing messages while transplanting by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23274
diff
changeset
|
1713 repo._lfstatuswriters.pop() |
23274
0ec2e124fcc0
largefiles: update standins only at the 1st commit of "transplant --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23273
diff
changeset
|
1714 repo._lfcommithooks.pop() |
15383
155d0f8fb7e5
largefiles: fix bad bug where transplanting a changeset with a largefile will result in an old largefile being comitted later on
Na'Tosha Bard <natosha@unity3d.com>
parents:
15369
diff
changeset
|
1715 return result |
16439
290850e7aa43
largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16248
diff
changeset
|
1716 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1717 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1718 @eh.wrapcommand(b'cat') |
16439
290850e7aa43
largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16248
diff
changeset
|
1719 def overridecat(orig, ui, repo, file1, *pats, **opts): |
50880
ee393dbfe5cb
largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50787
diff
changeset
|
1720 ctx = logcmdutil.revsingle(repo, opts.get('rev')) |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1721 err = 1 |
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1722 notbad = set() |
50880
ee393dbfe5cb
largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50787
diff
changeset
|
1723 m = scmutil.match(ctx, (file1,) + pats, pycompat.byteskwargs(opts)) |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1724 origmatchfn = m.matchfn |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1725 |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1726 def lfmatchfn(f): |
21087
3fb2affb023f
largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents:
21086
diff
changeset
|
1727 if origmatchfn(f): |
3fb2affb023f
largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents:
21086
diff
changeset
|
1728 return True |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1729 lf = lfutil.splitstandin(f) |
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1730 if lf is None: |
21087
3fb2affb023f
largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents:
21086
diff
changeset
|
1731 return False |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1732 notbad.add(lf) |
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1733 return origmatchfn(lf) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1734 |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1735 m.matchfn = lfmatchfn |
18974
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1736 origbadfn = m.bad |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1737 |
18974
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1738 def lfbadfn(f, msg): |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1739 if not f in notbad: |
21086
718f56c47414
largefiles: remove confusing handling of .bad return value - it is void
Mads Kiilerich <madski@unity3d.com>
parents:
21081
diff
changeset
|
1740 origbadfn(f, msg) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1741 |
18974
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1742 m.bad = lfbadfn |
24670
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1743 |
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1744 origvisitdirfn = m.visitdir |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1745 |
24670
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1746 def lfvisitdirfn(dir): |
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1747 if dir == lfutil.shortname: |
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1748 return True |
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1749 ret = origvisitdirfn(dir) |
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1750 if ret: |
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1751 return ret |
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1752 lf = lfutil.splitstandin(dir) |
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1753 if lf is None: |
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1754 return False |
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1755 return origvisitdirfn(lf) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1756 |
24670
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1757 m.visitdir = lfvisitdirfn |
dfb86af18a35
treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents:
24534
diff
changeset
|
1758 |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1759 for f in ctx.walk(m): |
50880
ee393dbfe5cb
largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50787
diff
changeset
|
1760 with cmdutil.makefileobj(ctx, opts.get('output'), pathname=f) as fp: |
30142
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1761 lf = lfutil.splitstandin(f) |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1762 if lf is None or origmatchfn(f): |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1763 # duplicating unreachable code from commands.cat |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1764 data = ctx[f].data() |
50880
ee393dbfe5cb
largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents:
50787
diff
changeset
|
1765 if opts.get('decode'): |
30142
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1766 data = repo.wwritedata(f, data) |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1767 fp.write(data) |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1768 else: |
31735
3e37b479ce2f
largefiles: replace readstandin() by readasstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31659
diff
changeset
|
1769 hash = lfutil.readasstandin(ctx[f]) |
30142
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1770 if not lfutil.inusercache(repo.ui, hash): |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1771 store = storefactory.openstore(repo) |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1772 success, missing = store.get([(lf, hash)]) |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1773 if len(success) != 1: |
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1774 raise error.Abort( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1775 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1776 b'largefile %s is not in cache and could not be ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1777 b'downloaded' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1778 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1779 % lf |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1780 ) |
30142
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1781 path = lfutil.usercachepath(repo.ui, hash) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1782 with open(path, b"rb") as fpin: |
30181
7356e6b1f5b8
util: increase filechunkiter size to 128k
Mads Kiilerich <madski@unity3d.com>
parents:
30142
diff
changeset
|
1783 for chunk in util.filechunkiter(fpin): |
30142
3dcaf1c4e90d
largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1784 fp.write(chunk) |
18974
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1785 err = 0 |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1786 return err |
17878
d1d0140287b8
largefiles: don't copy largefiles from working dir to the store while converting
Matt Harbison <matt_harbison@yahoo.com>
parents:
17847
diff
changeset
|
1787 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1788 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1789 @eh.wrapfunction(merge, '_update') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1790 def mergeupdate(orig, repo, node, branchmerge, force, *args, **kwargs): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43296
diff
changeset
|
1791 matcher = kwargs.get('matcher', None) |
27344
43c00ca887d1
merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents:
27050
diff
changeset
|
1792 # note if this is a partial update |
43c00ca887d1
merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents:
27050
diff
changeset
|
1793 partial = matcher and not matcher.always() |
50103
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1794 with repo.wlock(), repo.dirstate.changing_parents(repo): |
22288
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1795 # branch | | | |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1796 # merge | force | partial | action |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1797 # -------+-------+---------+-------------- |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1798 # x | x | x | linear-merge |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1799 # o | x | x | branch-merge |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1800 # x | o | x | overwrite (as clean update) |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1801 # o | o | x | force-branch-merge (*1) |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1802 # x | x | o | (*) |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1803 # o | x | o | (*) |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1804 # x | o | o | overwrite (as revert) |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1805 # o | o | o | (*) |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1806 # |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1807 # (*) don't care |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1808 # (*1) deprecated, but used internally (e.g: "rebase --collapse") |
50141
42288fa03322
large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50140
diff
changeset
|
1809 with repo.dirstate.running_status(repo): |
42288fa03322
large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50140
diff
changeset
|
1810 lfdirstate = lfutil.openlfdirstate(repo.ui, repo) |
42288fa03322
large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50140
diff
changeset
|
1811 unsure, s, mtime_boundary = lfdirstate.status( |
42288fa03322
large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50140
diff
changeset
|
1812 matchmod.always(), |
42288fa03322
large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50140
diff
changeset
|
1813 subrepos=[], |
42288fa03322
large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50140
diff
changeset
|
1814 ignored=False, |
42288fa03322
large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50140
diff
changeset
|
1815 clean=True, |
42288fa03322
large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50140
diff
changeset
|
1816 unknown=False, |
42288fa03322
large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50140
diff
changeset
|
1817 ) |
30190
56b930238036
largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1818 oldclean = set(s.clean) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1819 pctx = repo[b'.'] |
31653
32d998dc2a00
largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31618
diff
changeset
|
1820 dctx = repo[node] |
24787
9d5c27890790
largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents:
24782
diff
changeset
|
1821 for lfile in unsure + s.modified: |
9d5c27890790
largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents:
24782
diff
changeset
|
1822 lfileabs = repo.wvfs.join(lfile) |
28715
a7f7b7acf489
largefiles: replace invocation of os.path module by vfs in overrides.py
liscju <piotr.listkiewicz@gmail.com>
parents:
28394
diff
changeset
|
1823 if not repo.wvfs.exists(lfileabs): |
24787
9d5c27890790
largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents:
24782
diff
changeset
|
1824 continue |
31617
1f6c932862e5
largefiles: replace hashrepofile by hashfile (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31616
diff
changeset
|
1825 lfhash = lfutil.hashfile(lfileabs) |
24787
9d5c27890790
largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents:
24782
diff
changeset
|
1826 standin = lfutil.standin(lfile) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1827 lfutil.writestandin( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1828 repo, standin, lfhash, lfutil.getexecutable(lfileabs) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1829 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1830 if standin in pctx and lfhash == lfutil.readasstandin( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1831 pctx[standin] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1832 ): |
30190
56b930238036
largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1833 oldclean.add(lfile) |
24787
9d5c27890790
largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents:
24782
diff
changeset
|
1834 for lfile in s.added: |
31653
32d998dc2a00
largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31618
diff
changeset
|
1835 fstandin = lfutil.standin(lfile) |
32d998dc2a00
largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31618
diff
changeset
|
1836 if fstandin not in dctx: |
32d998dc2a00
largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31618
diff
changeset
|
1837 # in this case, content of standin file is meaningless |
32d998dc2a00
largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31618
diff
changeset
|
1838 # (in dctx, lfile is unknown, or normal file) |
32d998dc2a00
largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31618
diff
changeset
|
1839 continue |
31659
0eec36112e58
largefiles: add lfile argument to updatestandin() for efficiency (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31656
diff
changeset
|
1840 lfutil.updatestandin(repo, lfile, fstandin) |
30190
56b930238036
largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1841 # mark all clean largefiles as dirty, just in case the update gets |
56b930238036
largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1842 # interrupted before largefiles and lfdirstate are synchronized |
56b930238036
largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1843 for lfile in oldclean: |
50102
c4b17bc78d8c
large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50049
diff
changeset
|
1844 entry = lfdirstate.get_entry(lfile) |
c4b17bc78d8c
large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50049
diff
changeset
|
1845 lfdirstate.hacky_extension_update_file( |
c4b17bc78d8c
large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50049
diff
changeset
|
1846 lfile, |
c4b17bc78d8c
large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50049
diff
changeset
|
1847 wc_tracked=entry.tracked, |
c4b17bc78d8c
large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50049
diff
changeset
|
1848 p1_tracked=entry.p1_tracked, |
c4b17bc78d8c
large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50049
diff
changeset
|
1849 p2_info=entry.p2_info, |
c4b17bc78d8c
large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50049
diff
changeset
|
1850 possibly_dirty=True, |
c4b17bc78d8c
large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50049
diff
changeset
|
1851 ) |
48168
df3021c1f093
largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
48118
diff
changeset
|
1852 lfdirstate.write(repo.currenttransaction()) |
22288
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1853 |
24787
9d5c27890790
largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents:
24782
diff
changeset
|
1854 oldstandins = lfutil.getstandinsstate(repo) |
45545
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1855 wc = kwargs.get('wc') |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1856 if wc and wc.isinmemory(): |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1857 # largefiles is not a good candidate for in-memory merge (large |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1858 # files, custom dirstate, matcher usage). |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1859 raise error.ProgrammingError( |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1860 b'largefiles is not compatible with in-memory merge' |
e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
45453
diff
changeset
|
1861 ) |
50103
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1862 result = orig(repo, node, branchmerge, force, *args, **kwargs) |
22288
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1863 |
50103
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1864 newstandins = lfutil.getstandinsstate(repo) |
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1865 filelist = lfutil.getlfilestoupdate(oldstandins, newstandins) |
30190
56b930238036
largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1866 |
50103
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1867 # to avoid leaving all largefiles as dirty and thus rehash them, mark |
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1868 # all the ones that didn't change as clean |
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1869 for lfile in oldclean.difference(filelist): |
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1870 lfdirstate.update_file(lfile, p1_tracked=True, wc_tracked=True) |
30190
56b930238036
largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents:
29420
diff
changeset
|
1871 |
50103
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1872 if branchmerge or force or partial: |
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1873 filelist.extend(s.deleted + s.removed) |
22288
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1874 |
50103
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1875 lfcommands.updatelfiles( |
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1876 repo.ui, repo, filelist=filelist, normallookup=partial |
5a0c1d70ebcf
large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50102
diff
changeset
|
1877 ) |
22288
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1878 |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1879 return result |
22289
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1880 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1881 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1882 @eh.wrapfunction(scmutil, 'marktouched') |
22289
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1883 def scmutilmarktouched(orig, repo, files, *args, **kwargs): |
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1884 result = orig(repo, files, *args, **kwargs) |
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1885 |
31613
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1886 filelist = [] |
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1887 for f in files: |
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1888 lf = lfutil.splitstandin(f) |
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1889 if lf is not None: |
5c1d3f1b8f44
largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31309
diff
changeset
|
1890 filelist.append(lf) |
22289
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1891 if filelist: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1892 lfcommands.updatelfiles( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1893 repo.ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1894 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1895 filelist=filelist, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1896 printmessage=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1897 normallookup=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1898 ) |
22289
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1899 |
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1900 return result |
35303
67b7e39b441b
largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
34756
diff
changeset
|
1901 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1902 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1903 @eh.wrapfunction(upgrade_actions, 'preservedrequirements') |
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1904 @eh.wrapfunction(upgrade_actions, 'supporteddestrequirements') |
35303
67b7e39b441b
largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
34756
diff
changeset
|
1905 def upgraderequirements(orig, repo): |
67b7e39b441b
largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
34756
diff
changeset
|
1906 reqs = orig(repo) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1907 if b'largefiles' in repo.requirements: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1908 reqs.add(b'largefiles') |
35303
67b7e39b441b
largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
34756
diff
changeset
|
1909 return reqs |
35564
cf841f2b5a72
largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents:
35348
diff
changeset
|
1910 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1911 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1912 _lfscheme = b'largefile://' |
41062
0a7f582f6f1f
largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents:
41061
diff
changeset
|
1913 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1914 |
50785
bf92386f76fd
wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50142
diff
changeset
|
1915 @eh.wrapfunction(urlmod, 'open') |
46464
32da58916fd0
largefiles: properly pass kwargs into url.open
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
46047
diff
changeset
|
1916 def openlargefile(orig, ui, url_, data=None, **kwargs): |
35564
cf841f2b5a72
largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents:
35348
diff
changeset
|
1917 if url_.startswith(_lfscheme): |
cf841f2b5a72
largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents:
35348
diff
changeset
|
1918 if data: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1919 msg = b"cannot use data on a 'largefile://' url" |
35564
cf841f2b5a72
largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents:
35348
diff
changeset
|
1920 raise error.ProgrammingError(msg) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42755
diff
changeset
|
1921 lfid = url_[len(_lfscheme) :] |
35564
cf841f2b5a72
largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents:
35348
diff
changeset
|
1922 return storefactory.getlfile(ui, lfid) |
cf841f2b5a72
largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents:
35348
diff
changeset
|
1923 else: |
46464
32da58916fd0
largefiles: properly pass kwargs into url.open
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
46047
diff
changeset
|
1924 return orig(ui, url_, data=data, **kwargs) |