Mercurial > hg-stable
annotate hgext/largefiles/overrides.py @ 23768:6b1428e55728
largefiles: return the list of added files from addlargefiles()
This will be used to exclude largefile candidates from the normal file matcher,
which will allow add and addremove dryruns to not print a file as both a normal
and a large file.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Wed, 31 Dec 2014 18:31:18 -0500 |
parents | 749dc66e9329 |
children | bb3ee61cfaa1 |
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 | |
11 import os | |
12 import copy | |
13 | |
23183
51c9196a6bd0
largefiles: remove meaningless code path for "hg pull --rebase"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23145
diff
changeset
|
14 from mercurial import hg, util, cmdutil, scmutil, match as match_, \ |
22285
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
15 archival, pathutil, revset |
15168 | 16 from mercurial.i18n import _ |
17 from mercurial.node import hex | |
18 | |
19 import lfutil | |
20 import lfcommands | |
18974
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
21 import basestore |
15168 | 22 |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
23 # -- Utility functions: commonly/repeatedly needed functionality --------------- |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
24 |
23617
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
25 def composelargefilematcher(match, manifest): |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
26 '''create a matcher that matches only the largefiles in the original |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
27 matcher''' |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
28 m = copy.copy(match) |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
29 lfile = lambda f: lfutil.standin(f) in manifest |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
30 m._files = filter(lfile, m._files) |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
31 m._fmap = set(m._files) |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
32 m._always = False |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
33 origmatchfn = m.matchfn |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
34 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
|
35 return m |
f1e6b86da4c0
largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23592
diff
changeset
|
36 |
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
|
37 def composenormalfilematcher(match, manifest): |
b5e3f3d25395
largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23426
diff
changeset
|
38 m = copy.copy(match) |
b5e3f3d25395
largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23426
diff
changeset
|
39 notlfile = lambda f: not (lfutil.isstandin(f) or lfutil.standin(f) in |
b5e3f3d25395
largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23426
diff
changeset
|
40 manifest) |
b5e3f3d25395
largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23426
diff
changeset
|
41 m._files = filter(notlfile, m._files) |
b5e3f3d25395
largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23426
diff
changeset
|
42 m._fmap = set(m._files) |
b5e3f3d25395
largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23426
diff
changeset
|
43 m._always = False |
b5e3f3d25395
largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23426
diff
changeset
|
44 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
|
45 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
|
46 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
|
47 |
15168 | 48 def installnormalfilesmatchfn(manifest): |
21090
aa3d652ba1d5
largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents:
21089
diff
changeset
|
49 '''installmatchfn with a matchfn that ignores all largefiles''' |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
50 def overridematch(ctx, pats=[], opts={}, globbed=False, |
15168 | 51 default='relpath'): |
15306
94527d67f3da
largefiles: fix some badly named function parameters
Greg Ward <greg@gerg.ca>
parents:
15305
diff
changeset
|
52 match = oldmatch(ctx, pats, opts, globbed, default) |
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
|
53 return composenormalfilematcher(match, manifest) |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
54 oldmatch = installmatchfn(overridematch) |
15168 | 55 |
56 def installmatchfn(f): | |
21090
aa3d652ba1d5
largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents:
21089
diff
changeset
|
57 '''monkey patch the scmutil module with a custom match function. |
aa3d652ba1d5
largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents:
21089
diff
changeset
|
58 Warning: it is monkey patching the _module_ on runtime! Not thread safe!''' |
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
|
59 oldmatch = scmutil.match |
15168 | 60 setattr(f, 'oldmatch', oldmatch) |
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
|
61 scmutil.match = f |
15168 | 62 return oldmatch |
63 | |
64 def restorematchfn(): | |
21090
aa3d652ba1d5
largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents:
21089
diff
changeset
|
65 '''restores scmutil.match to what it was before installmatchfn |
15168 | 66 was called. no-op if scmutil.match is its original function. |
67 | |
21090
aa3d652ba1d5
largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents:
21089
diff
changeset
|
68 Note that n calls to installmatchfn will require n calls to |
23543
4dd8a6a1240d
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23541
diff
changeset
|
69 restore the original matchfn.''' |
21092
56fda512db9f
largefiles: remove silent handling of incorrect invocation of restorematchfn
Mads Kiilerich <madski@unity3d.com>
parents:
21091
diff
changeset
|
70 scmutil.match = getattr(scmutil.match, 'oldmatch') |
15168 | 71 |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
72 def installmatchandpatsfn(f): |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
73 oldmatchandpats = scmutil.matchandpats |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
74 setattr(f, 'oldmatchandpats', oldmatchandpats) |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
75 scmutil.matchandpats = f |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
76 return oldmatchandpats |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
77 |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
78 def restorematchandpatsfn(): |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
79 '''restores scmutil.matchandpats to what it was before |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23041
diff
changeset
|
80 installmatchandpatsfn was called. No-op if scmutil.matchandpats |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
81 is its original function. |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
82 |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23041
diff
changeset
|
83 Note that n calls to installmatchandpatsfn will require n calls |
23543
4dd8a6a1240d
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23541
diff
changeset
|
84 to restore the original matchfn.''' |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
85 scmutil.matchandpats = getattr(scmutil.matchandpats, 'oldmatchandpats', |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
86 scmutil.matchandpats) |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
87 |
23767
749dc66e9329
largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23766
diff
changeset
|
88 def addlargefiles(ui, repo, isaddremove, matcher, **opts): |
15168 | 89 large = opts.pop('large', None) |
15227
a7686abf73a6
largefiles: factor out lfutil.getminsize()
Greg Ward <greg@gerg.ca>
parents:
15224
diff
changeset
|
90 lfsize = lfutil.getminsize( |
a7686abf73a6
largefiles: factor out lfutil.getminsize()
Greg Ward <greg@gerg.ca>
parents:
15224
diff
changeset
|
91 ui, lfutil.islfilesrepo(repo), opts.pop('lfsize', None)) |
15168 | 92 |
93 lfmatcher = None | |
15739
be55285470cf
largefiles: tiny code clean up
Michal Sznajder <michalsznajder@gmail.com>
parents:
15674
diff
changeset
|
94 if lfutil.islfilesrepo(repo): |
15229
89e19ca2a90e
largefiles: use ui.configlist() to split largefiles.patterns
Greg Ward <greg@gerg.ca>
parents:
15227
diff
changeset
|
95 lfpats = ui.configlist(lfutil.longname, 'patterns', default=[]) |
15168 | 96 if lfpats: |
97 lfmatcher = match_.match(repo.root, '', list(lfpats)) | |
98 | |
99 lfnames = [] | |
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
|
100 m = copy.copy(matcher) |
15168 | 101 m.bad = lambda x, y: None |
102 wctx = repo[None] | |
103 for f in repo.walk(m): | |
104 exact = m.exact(f) | |
105 lfile = lfutil.standin(f) in wctx | |
106 nfile = f in wctx | |
107 exists = lfile or nfile | |
108 | |
23767
749dc66e9329
largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23766
diff
changeset
|
109 # addremove in core gets fancy with the name, add doesn't |
749dc66e9329
largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23766
diff
changeset
|
110 if isaddremove: |
749dc66e9329
largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23766
diff
changeset
|
111 name = m.uipath(f) |
749dc66e9329
largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23766
diff
changeset
|
112 else: |
749dc66e9329
largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23766
diff
changeset
|
113 name = m.rel(f) |
749dc66e9329
largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23766
diff
changeset
|
114 |
15168 | 115 # Don't warn the user when they attempt to add a normal tracked file. |
116 # The normal add code will do that for us. | |
117 if exact and exists: | |
118 if lfile: | |
23767
749dc66e9329
largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23766
diff
changeset
|
119 ui.warn(_('%s already a largefile\n') % name) |
15168 | 120 continue |
121 | |
17232
25248e2ebaee
largefiles: ensure addlargefiles() doesn't add a standin as a largefile
Matt Harbison <matt_harbison@yahoo.com>
parents:
17231
diff
changeset
|
122 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
|
123 # 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
|
124 # (issue3507) |
23733
86810cd85eb8
largefiles: convert addlargefiles() to vfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
23726
diff
changeset
|
125 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
|
126 continue |
2446b63c89ec
largefiles: fix a traceback when addremove follows a remove (issue3507)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17229
diff
changeset
|
127 |
15255
7ab05d752405
largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents:
15254
diff
changeset
|
128 abovemin = (lfsize and |
23733
86810cd85eb8
largefiles: convert addlargefiles() to vfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
23726
diff
changeset
|
129 repo.wvfs.lstat(f).st_size >= lfsize * 1024 * 1024) |
15255
7ab05d752405
largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents:
15254
diff
changeset
|
130 if large or abovemin or (lfmatcher and lfmatcher(f)): |
15168 | 131 lfnames.append(f) |
132 if ui.verbose or not exact: | |
23767
749dc66e9329
largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23766
diff
changeset
|
133 ui.status(_('adding %s as a largefile\n') % name) |
15168 | 134 |
135 bad = [] | |
136 | |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
137 # 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
|
138 # when standins are created and added to the repo. |
15168 | 139 wlock = repo.wlock() |
140 try: | |
141 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
|
142 standins = [] |
15168 | 143 lfdirstate = lfutil.openlfdirstate(ui, repo) |
144 for f in lfnames: | |
145 standinname = lfutil.standin(f) | |
146 lfutil.writestandin(repo, standinname, hash='', | |
147 executable=lfutil.getexecutable(repo.wjoin(f))) | |
148 standins.append(standinname) | |
149 if lfdirstate[f] == 'r': | |
150 lfdirstate.normallookup(f) | |
151 else: | |
152 lfdirstate.add(f) | |
153 lfdirstate.write() | |
15255
7ab05d752405
largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents:
15254
diff
changeset
|
154 bad += [lfutil.splitstandin(f) |
18154
93c697d9c158
largefiles: remove trivial portability wrappers
Mads Kiilerich <madski@unity3d.com>
parents:
18153
diff
changeset
|
155 for f in repo[None].add(standins) |
15255
7ab05d752405
largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents:
15254
diff
changeset
|
156 if f in m.files()] |
23768
6b1428e55728
largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23767
diff
changeset
|
157 |
6b1428e55728
largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23767
diff
changeset
|
158 added = [f for f in lfnames if f not in bad] |
15168 | 159 finally: |
160 wlock.release() | |
23768
6b1428e55728
largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23767
diff
changeset
|
161 return added, bad |
15168 | 162 |
23741
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
163 def removelargefiles(ui, repo, isaddremove, matcher, **opts): |
15786
aca0f2b3c7e3
largefiles: fix confusion upon removal of added largefile (issue3176)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15663
diff
changeset
|
164 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
|
165 m = composelargefilematcher(matcher, repo[None].manifest()) |
15168 | 166 try: |
167 repo.lfstatus = True | |
23741
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
168 s = repo.status(match=m, clean=not isaddremove) |
15168 | 169 finally: |
170 repo.lfstatus = False | |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
171 manifest = repo[None].manifest() |
15255
7ab05d752405
largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents:
15254
diff
changeset
|
172 modified, added, deleted, clean = [[f for f in list |
7ab05d752405
largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents:
15254
diff
changeset
|
173 if lfutil.standin(f) in manifest] |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
174 for list in (s.modified, s.added, |
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
175 s.deleted, s.clean)] |
15168 | 176 |
18066
abe9799a86d6
largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents:
18012
diff
changeset
|
177 def warn(files, msg): |
15168 | 178 for f in files: |
18066
abe9799a86d6
largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents:
18012
diff
changeset
|
179 ui.warn(msg % m.rel(f)) |
17576
e0081bb5450e
largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
17575
diff
changeset
|
180 return int(len(files) > 0) |
e0081bb5450e
largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
17575
diff
changeset
|
181 |
e0081bb5450e
largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
17575
diff
changeset
|
182 result = 0 |
15168 | 183 |
15786
aca0f2b3c7e3
largefiles: fix confusion upon removal of added largefile (issue3176)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15663
diff
changeset
|
184 if after: |
22630
0290982e5ac7
largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22289
diff
changeset
|
185 remove = deleted |
18066
abe9799a86d6
largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents:
18012
diff
changeset
|
186 result = warn(modified + added + clean, |
abe9799a86d6
largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents:
18012
diff
changeset
|
187 _('not removing %s: file still exists\n')) |
15168 | 188 else: |
22630
0290982e5ac7
largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22289
diff
changeset
|
189 remove = deleted + clean |
18066
abe9799a86d6
largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents:
18012
diff
changeset
|
190 result = warn(modified, _('not removing %s: file is modified (use -f' |
abe9799a86d6
largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents:
18012
diff
changeset
|
191 ' to force removal)\n')) |
abe9799a86d6
largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents:
18012
diff
changeset
|
192 result = warn(added, _('not removing %s: file has been marked for add' |
abe9799a86d6
largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents:
18012
diff
changeset
|
193 ' (use forget to undo)\n')) or result |
15168 | 194 |
195 # 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
|
196 # repository and we could race in-between. |
15168 | 197 wlock = repo.wlock() |
198 try: | |
199 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
|
200 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
|
201 if ui.verbose or not m.exact(f): |
ce0731e58ac9
largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23741
diff
changeset
|
202 # addremove in core gets fancy with the name, remove doesn't |
ce0731e58ac9
largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23741
diff
changeset
|
203 if isaddremove: |
ce0731e58ac9
largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23741
diff
changeset
|
204 name = m.uipath(f) |
ce0731e58ac9
largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23741
diff
changeset
|
205 else: |
ce0731e58ac9
largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23741
diff
changeset
|
206 name = m.rel(f) |
ce0731e58ac9
largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23741
diff
changeset
|
207 ui.status(_('removing %s\n') % name) |
23592
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
208 |
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
209 if not opts.get('dry_run'): |
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
210 if not after: |
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
211 util.unlinkpath(repo.wjoin(f), ignoremissing=True) |
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
212 |
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
213 if opts.get('dry_run'): |
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
214 return result |
96d335e4eacb
largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents:
23419
diff
changeset
|
215 |
15168 | 216 remove = [lfutil.standin(f) for f in remove] |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
217 # 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
|
218 # function handle this. |
23038
3f581bfbb268
largefiles: replace repo._isaddremove hack with a simple function parameter
Mads Kiilerich <madski@unity3d.com>
parents:
22919
diff
changeset
|
219 if not isaddremove: |
18153
51837a31b425
largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents:
18152
diff
changeset
|
220 for f in remove: |
51837a31b425
largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents:
18152
diff
changeset
|
221 util.unlinkpath(repo.wjoin(f), ignoremissing=True) |
51837a31b425
largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents:
18152
diff
changeset
|
222 repo[None].forget(remove) |
23721
1b3df5ef5949
largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents:
23695
diff
changeset
|
223 |
1b3df5ef5949
largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents:
23695
diff
changeset
|
224 for f in remove: |
1b3df5ef5949
largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents:
23695
diff
changeset
|
225 lfutil.synclfdirstate(repo, lfdirstate, lfutil.splitstandin(f), |
1b3df5ef5949
largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents:
23695
diff
changeset
|
226 False) |
1b3df5ef5949
largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents:
23695
diff
changeset
|
227 |
1b3df5ef5949
largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents:
23695
diff
changeset
|
228 lfdirstate.write() |
15168 | 229 finally: |
230 wlock.release() | |
231 | |
17576
e0081bb5450e
largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
17575
diff
changeset
|
232 return result |
e0081bb5450e
largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
17575
diff
changeset
|
233 |
16449
874a680a3e23
largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents:
16439
diff
changeset
|
234 # 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
|
235 # appear at their right place in the manifests. |
874a680a3e23
largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents:
16439
diff
changeset
|
236 def decodepath(orig, path): |
874a680a3e23
largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents:
16439
diff
changeset
|
237 return lfutil.splitstandin(path) or path |
874a680a3e23
largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents:
16439
diff
changeset
|
238 |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
239 # -- Wrappers: modify existing commands -------------------------------- |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
240 |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
241 # Add works by going through the files that the user wanted to add and |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
242 # checking if they should be added as largefiles. Then it makes a new |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
243 # matcher which matches only the normal files and runs the original |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
244 # version of add. |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
245 def overrideadd(orig, ui, repo, *pats, **opts): |
15944
f19d5c852f9b
largefiles: add --normal option to hg add (issue3061)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15930
diff
changeset
|
246 normal = opts.pop('normal') |
f19d5c852f9b
largefiles: add --normal option to hg add (issue3061)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15930
diff
changeset
|
247 if normal: |
f19d5c852f9b
largefiles: add --normal option to hg add (issue3061)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15930
diff
changeset
|
248 if opts.get('large'): |
f19d5c852f9b
largefiles: add --normal option to hg add (issue3061)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15930
diff
changeset
|
249 raise util.Abort(_('--normal cannot be used with --large')) |
f19d5c852f9b
largefiles: add --normal option to hg add (issue3061)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15930
diff
changeset
|
250 return orig(ui, repo, *pats, **opts) |
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
|
251 matcher = scmutil.match(repo[None], pats, opts) |
23768
6b1428e55728
largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23767
diff
changeset
|
252 added, bad = addlargefiles(ui, repo, False, matcher, **opts) |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
253 installnormalfilesmatchfn(repo[None].manifest()) |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
254 result = orig(ui, repo, *pats, **opts) |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
255 restorematchfn() |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
256 |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
257 return (result == 1 or bad) and 1 or 0 |
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
258 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
259 def overrideremove(orig, ui, repo, *pats, **opts): |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
260 installnormalfilesmatchfn(repo[None].manifest()) |
17576
e0081bb5450e
largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
17575
diff
changeset
|
261 result = orig(ui, repo, *pats, **opts) |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
262 restorematchfn() |
23741
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
263 matcher = scmutil.match(repo[None], pats, opts) |
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
264 return removelargefiles(ui, repo, False, matcher, **opts) or result |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
265 |
16515
12dabc22de77
largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents:
16449
diff
changeset
|
266 def overridestatusfn(orig, repo, rev2, **opts): |
12dabc22de77
largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents:
16449
diff
changeset
|
267 try: |
12dabc22de77
largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents:
16449
diff
changeset
|
268 repo._repo.lfstatus = True |
12dabc22de77
largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents:
16449
diff
changeset
|
269 return orig(repo, rev2, **opts) |
12dabc22de77
largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents:
16449
diff
changeset
|
270 finally: |
12dabc22de77
largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents:
16449
diff
changeset
|
271 repo._repo.lfstatus = False |
12dabc22de77
largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents:
16449
diff
changeset
|
272 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
273 def overridestatus(orig, ui, repo, *pats, **opts): |
15168 | 274 try: |
275 repo.lfstatus = True | |
276 return orig(ui, repo, *pats, **opts) | |
277 finally: | |
278 repo.lfstatus = False | |
279 | |
16516
597ddcb41b32
largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
16515
diff
changeset
|
280 def overridedirty(orig, repo, ignoreupdate=False): |
597ddcb41b32
largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
16515
diff
changeset
|
281 try: |
597ddcb41b32
largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
16515
diff
changeset
|
282 repo._repo.lfstatus = True |
597ddcb41b32
largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
16515
diff
changeset
|
283 return orig(repo, ignoreupdate) |
597ddcb41b32
largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
16515
diff
changeset
|
284 finally: |
597ddcb41b32
largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
16515
diff
changeset
|
285 repo._repo.lfstatus = False |
597ddcb41b32
largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
16515
diff
changeset
|
286 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
287 def overridelog(orig, ui, repo, *pats, **opts): |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
288 def overridematchandpats(ctx, pats=[], opts={}, globbed=False, |
18341
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
289 default='relpath'): |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
290 """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
|
291 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
|
292 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
|
293 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
|
294 """ |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
295 matchandpats = oldmatchandpats(ctx, pats, opts, globbed, default) |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
296 m, p = copy.copy(matchandpats) |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
297 |
22170
0e1b02f984c7
largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22169
diff
changeset
|
298 if m.always(): |
0e1b02f984c7
largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22169
diff
changeset
|
299 # 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
|
300 # to add standins. |
0e1b02f984c7
largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22169
diff
changeset
|
301 return matchandpats |
0e1b02f984c7
largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22169
diff
changeset
|
302 |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
303 pats = set(p) |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
304 # TODO: handling of patterns in both cases below |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
305 if m._cwd: |
21209
c5d35995d192
largefiles: better handling of log from other working directory (issue4236)
Mads Kiilerich <madski@unity3d.com>
parents:
21196
diff
changeset
|
306 if os.path.isabs(m._cwd): |
c5d35995d192
largefiles: better handling of log from other working directory (issue4236)
Mads Kiilerich <madski@unity3d.com>
parents:
21196
diff
changeset
|
307 # TODO: handle largefile magic when invoked from other cwd |
c5d35995d192
largefiles: better handling of log from other working directory (issue4236)
Mads Kiilerich <madski@unity3d.com>
parents:
21196
diff
changeset
|
308 return matchandpats |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
309 back = (m._cwd.count('/') + 1) * '../' |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
310 pats.update(back + lfutil.standin(m._cwd + '/' + f) for f in p) |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
311 else: |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
312 pats.update(lfutil.standin(f) for f in p) |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
313 |
19472
32e502b26983
largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents:
19226
diff
changeset
|
314 for i in range(0, len(m._files)): |
32e502b26983
largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents:
19226
diff
changeset
|
315 standin = lfutil.standin(m._files[i]) |
32e502b26983
largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents:
19226
diff
changeset
|
316 if standin in repo[ctx.node()]: |
32e502b26983
largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents:
19226
diff
changeset
|
317 m._files[i] = standin |
21275
c7e9fb881a5a
largefiles: include largefiles when doing log on a directory (issue4241)
Mads Kiilerich <madski@unity3d.com>
parents:
21209
diff
changeset
|
318 elif m._files[i] not in repo[ctx.node()]: |
c7e9fb881a5a
largefiles: include largefiles when doing log on a directory (issue4241)
Mads Kiilerich <madski@unity3d.com>
parents:
21209
diff
changeset
|
319 m._files.append(standin) |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
320 pats.add(standin) |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
321 |
18341
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
322 m._fmap = set(m._files) |
18813
d780c472463c
largefiles: fix _always for match overrides
Siddharth Agarwal <sid0@fb.com>
parents:
18784
diff
changeset
|
323 m._always = False |
18341
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
324 origmatchfn = m.matchfn |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
325 def lfmatchfn(f): |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
326 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
|
327 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
|
328 return True |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
329 r = origmatchfn(f) |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
330 return r |
ed23d6100dd3
largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents:
18154
diff
changeset
|
331 m.matchfn = lfmatchfn |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
332 |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
333 return m, pats |
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
334 |
22169
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
335 # 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
|
336 # (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
|
337 # (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
|
338 # 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
|
339 # case (2). |
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
340 def overridemakelogfilematcher(repo, pats, opts): |
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
341 pctx = repo[None] |
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
342 match, pats = oldmatchandpats(pctx, pats, opts) |
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
343 return lambda rev: match |
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
344 |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
345 oldmatchandpats = installmatchandpatsfn(overridematchandpats) |
22169
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
346 oldmakelogfilematcher = cmdutil._makenofollowlogfilematcher |
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
347 setattr(cmdutil, '_makenofollowlogfilematcher', overridemakelogfilematcher) |
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
348 |
15168 | 349 try: |
17577
0f39e9355d3c
largefiles: preserve the exit status of the log command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17576
diff
changeset
|
350 return orig(ui, repo, *pats, **opts) |
15168 | 351 finally: |
21110
49e13e76ec5a
largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
21096
diff
changeset
|
352 restorematchandpatsfn() |
22169
35cc5b07b3fc
largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents:
22168
diff
changeset
|
353 setattr(cmdutil, '_makenofollowlogfilematcher', oldmakelogfilematcher) |
15168 | 354 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
355 def overrideverify(orig, ui, repo, *pats, **opts): |
15168 | 356 large = opts.pop('large', False) |
357 all = opts.pop('lfa', False) | |
358 contents = opts.pop('lfc', False) | |
359 | |
360 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
|
361 if large or all or contents: |
15168 | 362 result = result or lfcommands.verifylfiles(ui, repo, all, contents) |
363 return result | |
364 | |
18144
e16982a74bf7
largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents:
18142
diff
changeset
|
365 def overridedebugstate(orig, ui, repo, *pats, **opts): |
e16982a74bf7
largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents:
18142
diff
changeset
|
366 large = opts.pop('large', False) |
e16982a74bf7
largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents:
18142
diff
changeset
|
367 if large: |
21088
e095626e8676
largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
21087
diff
changeset
|
368 class fakerepo(object): |
e095626e8676
largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
21087
diff
changeset
|
369 dirstate = lfutil.openlfdirstate(ui, repo) |
e095626e8676
largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents:
21087
diff
changeset
|
370 orig(ui, fakerepo, *pats, **opts) |
18144
e16982a74bf7
largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents:
18142
diff
changeset
|
371 else: |
e16982a74bf7
largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents:
18142
diff
changeset
|
372 orig(ui, repo, *pats, **opts) |
e16982a74bf7
largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents:
18142
diff
changeset
|
373 |
15168 | 374 # Override needs to refresh standins so that update's normal merge |
375 # will go through properly. Then the other update hook (overriding repo.update) | |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
17299
diff
changeset
|
376 # will get the new files. Filemerge is also overridden so that the merge |
15168 | 377 # will merge standins correctly. |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
378 def overrideupdate(orig, ui, repo, *pats, **opts): |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
379 # Need to lock between the standins getting updated and their |
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
380 # largefiles getting updated |
15168 | 381 wlock = repo.wlock() |
382 try: | |
23040
46c5983ce48f
largefiles: the update override only needs lfdirstate and status for --check
Mads Kiilerich <madski@unity3d.com>
parents:
23039
diff
changeset
|
383 if opts['check']: |
46c5983ce48f
largefiles: the update override only needs lfdirstate and status for --check
Mads Kiilerich <madski@unity3d.com>
parents:
23039
diff
changeset
|
384 lfdirstate = lfutil.openlfdirstate(ui, repo) |
46c5983ce48f
largefiles: the update override only needs lfdirstate and status for --check
Mads Kiilerich <madski@unity3d.com>
parents:
23039
diff
changeset
|
385 unsure, s = lfdirstate.status( |
46c5983ce48f
largefiles: the update override only needs lfdirstate and status for --check
Mads Kiilerich <madski@unity3d.com>
parents:
23039
diff
changeset
|
386 match_.always(repo.root, repo.getcwd()), |
46c5983ce48f
largefiles: the update override only needs lfdirstate and status for --check
Mads Kiilerich <madski@unity3d.com>
parents:
23039
diff
changeset
|
387 [], False, False, False) |
21089
278bd08a2902
largefiles: use more reasonable locking for update
Mads Kiilerich <madski@unity3d.com>
parents:
21088
diff
changeset
|
388 |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
389 mod = len(s.modified) > 0 |
15168 | 390 for lfile in unsure: |
391 standin = lfutil.standin(lfile) | |
392 if repo['.'][standin].data().strip() != \ | |
393 lfutil.hashfile(repo.wjoin(lfile)): | |
394 mod = True | |
395 else: | |
396 lfdirstate.normal(lfile) | |
397 lfdirstate.write() | |
398 if mod: | |
19805
9b088e9c2690
largefiles: standardize error message for dirty working dir
Siddharth Agarwal <sid0@fb.com>
parents:
19775
diff
changeset
|
399 raise util.Abort(_('uncommitted changes')) |
21089
278bd08a2902
largefiles: use more reasonable locking for update
Mads Kiilerich <madski@unity3d.com>
parents:
21088
diff
changeset
|
400 return orig(ui, repo, *pats, **opts) |
15168 | 401 finally: |
402 wlock.release() | |
403 | |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
404 # 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
|
405 # _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
|
406 # 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
|
407 # |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
408 # 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
|
409 # 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
|
410 # |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
411 # 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
|
412 # 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
|
413 # case further in the overridden calculateupdates function below. |
23653
0297d8469350
merge: don't overwrite untracked file at directory rename target
Martin von Zweigbergk <martinvonz@google.com>
parents:
23644
diff
changeset
|
414 def overridecheckunknownfile(origfn, repo, wctx, mctx, f, f2=None): |
19161
24877c50aada
largefiles: check unknown files with case awareness of the filesystem
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19001
diff
changeset
|
415 if lfutil.standin(repo.dirstate.normalize(f)) in wctx: |
16093
7e30f5f2285f
merge: refactor unknown file conflict checking
Matt Mackall <mpm@selenic.com>
parents:
16075
diff
changeset
|
416 return False |
23653
0297d8469350
merge: don't overwrite untracked file at directory rename target
Martin von Zweigbergk <martinvonz@google.com>
parents:
23644
diff
changeset
|
417 return origfn(repo, wctx, mctx, f, f2) |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
418 |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
419 # 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
|
420 # 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
|
421 # |
23307
9dd0d0d61a24
largefiles: update comments to refer to the right overridden method
Martin von Zweigbergk <martinvonz@google.com>
parents:
23276
diff
changeset
|
422 # 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
|
423 # 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
|
424 # |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
425 # 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
|
426 # 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
|
427 # 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
|
428 # 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
|
429 # 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
|
430 # |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
431 # 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
|
432 # 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
|
433 # 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
|
434 # triggers a merge action. |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
435 # |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
436 # 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
|
437 # 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
|
438 # 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
|
439 # 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
|
440 # presumably changed on purpose. |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
441 # |
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
442 # 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
|
443 # 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
|
444 # will update the largefiles. |
21081
ffd7b6ce46ff
merge: pass merge ancestor to calculateupdates as a list
Mads Kiilerich <madski@unity3d.com>
parents:
21080
diff
changeset
|
445 def overridecalculateupdates(origfn, repo, p1, p2, pas, branchmerge, force, |
21080
04540a8499a3
merge: move ancestor selection tweaking from manifestmerge to update function
Mads Kiilerich <madski@unity3d.com>
parents:
21053
diff
changeset
|
446 partial, acceptremote, followcopies): |
18605
bcf29565d89f
manifestmerge: pass in branchmerge and force separately
Siddharth Agarwal <sid0@fb.com>
parents:
18600
diff
changeset
|
447 overwrite = force and not branchmerge |
23526
a5887f2da5e6
merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23503
diff
changeset
|
448 actions, diverge, renamedelete = origfn( |
a5887f2da5e6
merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23503
diff
changeset
|
449 repo, p1, p2, pas, branchmerge, force, partial, acceptremote, |
a5887f2da5e6
merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23503
diff
changeset
|
450 followcopies) |
19952
8eb99e5cec4a
largefiles: don't process merge actions at all when overwriting
Mads Kiilerich <madski@unity3d.com>
parents:
19805
diff
changeset
|
451 |
8eb99e5cec4a
largefiles: don't process merge actions at all when overwriting
Mads Kiilerich <madski@unity3d.com>
parents:
19805
diff
changeset
|
452 if overwrite: |
23526
a5887f2da5e6
merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23503
diff
changeset
|
453 return actions, diverge, renamedelete |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
454 |
23529
38e55e55ae4d
largefiles: rewrite merge code using dictionary with entry per file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23528
diff
changeset
|
455 # 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
|
456 lfiles = set() |
23642
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
457 for f in actions: |
20148
7ac03bfa1369
largefiles: don't crash on 'local renamed directory' actions
Mads Kiilerich <madski@unity3d.com>
parents:
19967
diff
changeset
|
458 splitstandin = f and lfutil.splitstandin(f) |
23641
a7a0f32a383f
merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23635
diff
changeset
|
459 if splitstandin in p1: |
a7a0f32a383f
merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23635
diff
changeset
|
460 lfiles.add(splitstandin) |
a7a0f32a383f
merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23635
diff
changeset
|
461 elif lfutil.standin(f) in p1: |
a7a0f32a383f
merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23635
diff
changeset
|
462 lfiles.add(f) |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
463 |
23530
42ae1b1f048f
largefiles: start by finding files of interest
Martin von Zweigbergk <martinvonz@google.com>
parents:
23529
diff
changeset
|
464 for lfile in lfiles: |
42ae1b1f048f
largefiles: start by finding files of interest
Martin von Zweigbergk <martinvonz@google.com>
parents:
23529
diff
changeset
|
465 standin = lfutil.standin(lfile) |
23642
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
466 (lm, largs, lmsg) = actions.get(lfile, (None, None, None)) |
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
467 (sm, sargs, smsg) = actions.get(standin, (None, None, None)) |
23541
495bc1b65d25
merge: move cd/dc prompts after largefiles prompts
Martin von Zweigbergk <martinvonz@google.com>
parents:
23537
diff
changeset
|
468 if sm in ('g', 'dc') and lm != 'r': |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
469 # 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
|
470 # the second parent |
23470
2b23a25f06fd
largefiles: don't clobber merge action message with user message
Martin von Zweigbergk <martinvonz@google.com>
parents:
23441
diff
changeset
|
471 usermsg = _('remote turned local normal file %s into a largefile\n' |
2b23a25f06fd
largefiles: don't clobber merge action message with user message
Martin von Zweigbergk <martinvonz@google.com>
parents:
23441
diff
changeset
|
472 'use (l)argefile or keep (n)ormal file?' |
2b23a25f06fd
largefiles: don't clobber merge action message with user message
Martin von Zweigbergk <martinvonz@google.com>
parents:
23441
diff
changeset
|
473 '$$ &Largefile $$ &Normal file') % lfile |
23483
3805f4b0f5a9
largefiles: remove redundant checks for false modify/delete conflicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
23471
diff
changeset
|
474 if repo.ui.promptchoice(usermsg, 0) == 0: # pick remote largefile |
23642
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
475 actions[lfile] = ('r', None, 'replaced by standin') |
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
476 actions[standin] = ('g', sargs, 'replaces standin') |
23419
a34a99181f36
largefiles: don't show largefile/normal prompts if one side is unchanged
Mads Kiilerich <madski@unity3d.com>
parents:
23041
diff
changeset
|
477 else: # keep local normal file |
23642
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
478 actions[lfile] = ('k', None, '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
|
479 if branchmerge: |
23642
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
480 actions[standin] = ('k', None, 'replaced by non-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
|
481 else: |
23642
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
482 actions[standin] = ('r', None, 'replaced by non-standin') |
23541
495bc1b65d25
merge: move cd/dc prompts after largefiles prompts
Martin von Zweigbergk <martinvonz@google.com>
parents:
23537
diff
changeset
|
483 elif lm in ('g', 'dc') and sm != 'r': |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
484 # 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
|
485 # the second parent |
23470
2b23a25f06fd
largefiles: don't clobber merge action message with user message
Martin von Zweigbergk <martinvonz@google.com>
parents:
23441
diff
changeset
|
486 usermsg = _('remote turned local largefile %s into a normal file\n' |
19967
e92c6524a76d
largefiles: use 'remote'/'local' in merge prompts like in other merge prompts
Mads Kiilerich <madski@unity3d.com>
parents:
19954
diff
changeset
|
487 'keep (l)argefile or use (n)ormal file?' |
19226
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19161
diff
changeset
|
488 '$$ &Largefile $$ &Normal file') % lfile |
23483
3805f4b0f5a9
largefiles: remove redundant checks for false modify/delete conflicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
23471
diff
changeset
|
489 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
|
490 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
|
491 # largefile can be restored from standin safely |
23642
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
492 actions[lfile] = ('k', None, 'replaced by standin') |
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
493 actions[standin] = ('k', None, 'replaces standin') |
22196
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
494 else: |
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
495 # "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
|
496 # removal of itself |
23642
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
497 actions[lfile] = ('lfmr', None, |
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
498 'forget non-standin 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
|
499 |
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
500 # linear-merge should treat this largefile as 're-added' |
23642
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
501 actions[standin] = ('a', None, 'keep standin') |
23419
a34a99181f36
largefiles: don't show largefile/normal prompts if one side is unchanged
Mads Kiilerich <madski@unity3d.com>
parents:
23041
diff
changeset
|
502 else: # pick remote normal file |
23642
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
503 actions[lfile] = ('g', largs, 'replaces standin') |
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
504 actions[standin] = ('r', None, 'replaced by non-standin') |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
505 |
23642
7fd1a6c27e60
largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
506 return actions, diverge, renamedelete |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15598
diff
changeset
|
507 |
22196
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
508 def mergerecordupdates(orig, repo, actions, branchmerge): |
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
509 if 'lfmr' 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
|
510 lfdirstate = lfutil.openlfdirstate(repo.ui, repo) |
22196
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
511 for lfile, args, msg in actions['lfmr']: |
23695
997a96cf6344
largefiles: mark lfile as added in lfdirstate when the standin is added
Mads Kiilerich <madski@unity3d.com>
parents:
23619
diff
changeset
|
512 # this should be executed before 'orig', to execute 'remove' |
997a96cf6344
largefiles: mark lfile as added in lfdirstate when the standin is added
Mads Kiilerich <madski@unity3d.com>
parents:
23619
diff
changeset
|
513 # before all other actions |
22196
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
514 repo.dirstate.remove(lfile) |
23695
997a96cf6344
largefiles: mark lfile as added in lfdirstate when the standin is added
Mads Kiilerich <madski@unity3d.com>
parents:
23619
diff
changeset
|
515 # make sure lfile doesn't get synclfdirstate'd as normal |
997a96cf6344
largefiles: mark lfile as added in lfdirstate when the standin is added
Mads Kiilerich <madski@unity3d.com>
parents:
23619
diff
changeset
|
516 lfdirstate.add(lfile) |
997a96cf6344
largefiles: mark lfile as added in lfdirstate when the standin is added
Mads Kiilerich <madski@unity3d.com>
parents:
23619
diff
changeset
|
517 lfdirstate.write() |
22196
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
518 |
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
519 return orig(repo, actions, branchmerge) |
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
520 |
23fe278bde43
largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22194
diff
changeset
|
521 |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
522 # 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
|
523 # largefiles. This will handle identical edits without prompting the user. |
21524
47b97d9af27e
merge: add labels parameter from merge.update to filemerge
Durham Goode <durham@fb.com>
parents:
21275
diff
changeset
|
524 def overridefilemerge(origfn, repo, mynode, orig, fcd, fco, fca, labels=None): |
15168 | 525 if not lfutil.isstandin(orig): |
21524
47b97d9af27e
merge: add labels parameter from merge.update to filemerge
Durham Goode <durham@fb.com>
parents:
21275
diff
changeset
|
526 return origfn(repo, mynode, orig, fcd, fco, fca, labels=labels) |
20298
9d350fa0708e
largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents:
20297
diff
changeset
|
527 |
20994
40800668e019
largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents:
20638
diff
changeset
|
528 ahash = fca.data().strip().lower() |
40800668e019
largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents:
20638
diff
changeset
|
529 dhash = fcd.data().strip().lower() |
40800668e019
largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents:
20638
diff
changeset
|
530 ohash = fco.data().strip().lower() |
40800668e019
largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents:
20638
diff
changeset
|
531 if (ohash != ahash and |
40800668e019
largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents:
20638
diff
changeset
|
532 ohash != dhash and |
40800668e019
largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents:
20638
diff
changeset
|
533 (dhash == ahash or |
40800668e019
largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents:
20638
diff
changeset
|
534 repo.ui.promptchoice( |
40800668e019
largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents:
20638
diff
changeset
|
535 _('largefile %s has a merge conflict\nancestor was %s\n' |
40800668e019
largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents:
20638
diff
changeset
|
536 'keep (l)ocal %s or\ntake (o)ther %s?' |
40800668e019
largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents:
20638
diff
changeset
|
537 '$$ &Local $$ &Other') % |
40800668e019
largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents:
20638
diff
changeset
|
538 (lfutil.splitstandin(orig), ahash, dhash, ohash), |
40800668e019
largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents:
20638
diff
changeset
|
539 0) == 1)): |
20298
9d350fa0708e
largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents:
20297
diff
changeset
|
540 repo.wwrite(fcd.path(), fco.data(), fco.flags()) |
9d350fa0708e
largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents:
20297
diff
changeset
|
541 return 0 |
15168 | 542 |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15229
diff
changeset
|
543 # 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
|
544 # 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
|
545 # 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
|
546 # 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
|
547 # dirstate updated. |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
548 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
|
549 # doesn't remove largefile on rename |
15168 | 550 if len(pats) < 2: |
551 # this isn't legal, let the original function deal with it | |
552 return orig(ui, repo, pats, opts, rename) | |
553 | |
554 def makestandin(relpath): | |
20033
f962870712da
pathutil: tease out a new library to break an import cycle from canonpath use
Augie Fackler <raf@durin42.com>
parents:
19967
diff
changeset
|
555 path = pathutil.canonpath(repo.root, repo.getcwd(), relpath) |
15323
19368c54a774
largefiles: remove all uses of os.path.relpath for 2.4 compatibility
Benjamin Pollack <benjamin@bitquabit.com>
parents:
15306
diff
changeset
|
556 return os.path.join(repo.wjoin(lfutil.standin(path))) |
15168 | 557 |
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
|
558 fullpats = scmutil.expandpats(pats) |
15168 | 559 dest = fullpats[-1] |
560 | |
561 if os.path.isdir(dest): | |
562 if not os.path.isdir(makestandin(dest)): | |
563 os.makedirs(makestandin(dest)) | |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
564 # 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
|
565 # 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
|
566 # 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
|
567 # match largefiles and run it again. |
15168 | 568 nonormalfiles = False |
569 nolfiles = False | |
21091
dd584d1a75e7
largefiles: copy override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21090
diff
changeset
|
570 installnormalfilesmatchfn(repo[None].manifest()) |
15168 | 571 try: |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
572 try: |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
573 result = orig(ui, repo, pats, opts, rename) |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
574 except util.Abort, e: |
17263
c4ebdc36c17e
largefiles: fix exception hack for i18n (issue3197)
Matt Mackall <mpm@selenic.com>
parents:
17245
diff
changeset
|
575 if str(e) != _('no files to copy'): |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
576 raise e |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
577 else: |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
578 nonormalfiles = True |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
579 result = 0 |
15168 | 580 finally: |
581 restorematchfn() | |
582 | |
583 # The first rename can cause our current working directory to be removed. | |
584 # In that case there is nothing left to copy/rename so just quit. | |
585 try: | |
586 repo.getcwd() | |
587 except OSError: | |
588 return result | |
589 | |
590 try: | |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
591 try: |
16248
51e6f318bdf1
largefiles: fix check-code errors.
Na'Tosha Bard <natosha@unity3d.com>
parents:
16247
diff
changeset
|
592 # When we call orig below it creates the standins but we don't add |
51e6f318bdf1
largefiles: fix check-code errors.
Na'Tosha Bard <natosha@unity3d.com>
parents:
16247
diff
changeset
|
593 # them to the dir state until later so lock during that time. |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
594 wlock = repo.wlock() |
15168 | 595 |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
596 manifest = repo[None].manifest() |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
597 def overridematch(ctx, pats=[], opts={}, globbed=False, |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
598 default='relpath'): |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
599 newpats = [] |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
600 # The patterns were previously mangled to add the standin |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
601 # directory; we need to remove that now |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
602 for pat in pats: |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
603 if match_.patkind(pat) is None and lfutil.shortname in pat: |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
604 newpats.append(pat.replace(lfutil.shortname, '')) |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
605 else: |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
606 newpats.append(pat) |
15306
94527d67f3da
largefiles: fix some badly named function parameters
Greg Ward <greg@gerg.ca>
parents:
15305
diff
changeset
|
607 match = oldmatch(ctx, newpats, opts, globbed, default) |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
608 m = copy.copy(match) |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
609 lfile = lambda f: lfutil.standin(f) in manifest |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
610 m._files = [lfutil.standin(f) for f in m._files if lfile(f)] |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
611 m._fmap = set(m._files) |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
612 origmatchfn = m.matchfn |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
613 m.matchfn = lambda f: (lfutil.isstandin(f) and |
16075
d2e8e79a6361
largefiles: reduce redundant splitstandin/standin combination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16074
diff
changeset
|
614 (f in manifest) and |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
615 origmatchfn(lfutil.splitstandin(f)) or |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
616 None) |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
617 return m |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
618 oldmatch = installmatchfn(overridematch) |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
619 listpats = [] |
15168 | 620 for pat in pats: |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
621 if match_.patkind(pat) is not None: |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
622 listpats.append(pat) |
15168 | 623 else: |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
624 listpats.append(makestandin(pat)) |
15168 | 625 |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
626 try: |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
627 origcopyfile = util.copyfile |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
628 copiedfiles = [] |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
629 def overridecopyfile(src, dest): |
15598
a77ce45584ef
largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15576
diff
changeset
|
630 if (lfutil.shortname in src and |
a77ce45584ef
largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15576
diff
changeset
|
631 dest.startswith(repo.wjoin(lfutil.shortname))): |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
632 destlfile = dest.replace(lfutil.shortname, '') |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
633 if not opts['force'] and os.path.exists(destlfile): |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
634 raise IOError('', |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
635 _('destination largefile already exists')) |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
636 copiedfiles.append((src, dest)) |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
637 origcopyfile(src, dest) |
15168 | 638 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
639 util.copyfile = overridecopyfile |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
640 result += orig(ui, repo, listpats, opts, rename) |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
641 finally: |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
642 util.copyfile = origcopyfile |
15168 | 643 |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
644 lfdirstate = lfutil.openlfdirstate(ui, repo) |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
645 for (src, dest) in copiedfiles: |
15598
a77ce45584ef
largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15576
diff
changeset
|
646 if (lfutil.shortname in src and |
a77ce45584ef
largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15576
diff
changeset
|
647 dest.startswith(repo.wjoin(lfutil.shortname))): |
a77ce45584ef
largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15576
diff
changeset
|
648 srclfile = src.replace(repo.wjoin(lfutil.standin('')), '') |
a77ce45584ef
largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15576
diff
changeset
|
649 destlfile = dest.replace(repo.wjoin(lfutil.standin('')), '') |
17245
6e84171a61c8
largefiles: fix path handling for cp/mv (issue3516)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17232
diff
changeset
|
650 destlfiledir = os.path.dirname(repo.wjoin(destlfile)) or '.' |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
651 if not os.path.isdir(destlfiledir): |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
652 os.makedirs(destlfiledir) |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
653 if rename: |
15598
a77ce45584ef
largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15576
diff
changeset
|
654 os.rename(repo.wjoin(srclfile), repo.wjoin(destlfile)) |
21196
5c0d5b95b824
largefiles: remove directories emptied after their files are moved (issue3515)
Matt Harbison <matt_harbison@yahoo.com>
parents:
21110
diff
changeset
|
655 |
5c0d5b95b824
largefiles: remove directories emptied after their files are moved (issue3515)
Matt Harbison <matt_harbison@yahoo.com>
parents:
21110
diff
changeset
|
656 # The file is gone, but this deletes any empty parent |
5c0d5b95b824
largefiles: remove directories emptied after their files are moved (issue3515)
Matt Harbison <matt_harbison@yahoo.com>
parents:
21110
diff
changeset
|
657 # directories as a side-effect. |
5c0d5b95b824
largefiles: remove directories emptied after their files are moved (issue3515)
Matt Harbison <matt_harbison@yahoo.com>
parents:
21110
diff
changeset
|
658 util.unlinkpath(repo.wjoin(srclfile), True) |
15598
a77ce45584ef
largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15576
diff
changeset
|
659 lfdirstate.remove(srclfile) |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
660 else: |
17245
6e84171a61c8
largefiles: fix path handling for cp/mv (issue3516)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17232
diff
changeset
|
661 util.copyfile(repo.wjoin(srclfile), |
6e84171a61c8
largefiles: fix path handling for cp/mv (issue3516)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17232
diff
changeset
|
662 repo.wjoin(destlfile)) |
6e84171a61c8
largefiles: fix path handling for cp/mv (issue3516)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17232
diff
changeset
|
663 |
15598
a77ce45584ef
largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15576
diff
changeset
|
664 lfdirstate.add(destlfile) |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
665 lfdirstate.write() |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
666 except util.Abort, e: |
17263
c4ebdc36c17e
largefiles: fix exception hack for i18n (issue3197)
Matt Mackall <mpm@selenic.com>
parents:
17245
diff
changeset
|
667 if str(e) != _('no files to copy'): |
15279
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
668 raise e |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
669 else: |
018608160299
largefiles: use separate try/except and try/finally as needed for python2.4
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15255
diff
changeset
|
670 nolfiles = True |
15168 | 671 finally: |
672 restorematchfn() | |
673 wlock.release() | |
674 | |
675 if nolfiles and nonormalfiles: | |
676 raise util.Abort(_('no files to copy')) | |
677 | |
678 return result | |
679 | |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
680 # 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
|
681 # 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
|
682 # 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
|
683 # the necessary largefiles. |
15168 | 684 # |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
685 # 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
|
686 # 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
|
687 # 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
|
688 # resulting standins update the largefiles. |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
689 def overriderevert(orig, ui, repo, *pats, **opts): |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
690 # 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
|
691 # 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
|
692 # prevent others from changing them in their incorrect state. |
15168 | 693 wlock = repo.wlock() |
694 try: | |
695 lfdirstate = lfutil.openlfdirstate(ui, repo) | |
23039
1350b9170089
largefiles: remove confusing rev parameter for lfdirstatestatus
Mads Kiilerich <madski@unity3d.com>
parents:
23038
diff
changeset
|
696 s = lfutil.lfdirstatestatus(lfdirstate, repo) |
18140
e388273f3ad1
largefiles revert: update lfdirstate with result from first cleanliness check
Mads Kiilerich <madski@unity3d.com>
parents:
17894
diff
changeset
|
697 lfdirstate.write() |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
698 for lfile in s.modified: |
15168 | 699 lfutil.updatestandin(repo, lfutil.standin(lfile)) |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
700 for lfile in s.deleted: |
16638
29fe533fe447
largefiles: fix deletion of multiple missing largefiles (issue3329)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16636
diff
changeset
|
701 if (os.path.exists(repo.wjoin(lfutil.standin(lfile)))): |
29fe533fe447
largefiles: fix deletion of multiple missing largefiles (issue3329)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16636
diff
changeset
|
702 os.unlink(repo.wjoin(lfutil.standin(lfile))) |
15168 | 703 |
21094
4643bfec2485
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents:
21093
diff
changeset
|
704 oldstandins = lfutil.getstandinsstate(repo) |
4643bfec2485
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents:
21093
diff
changeset
|
705 |
21095
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
706 def overridematch(ctx, pats=[], opts={}, globbed=False, |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
707 default='relpath'): |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
708 match = oldmatch(ctx, pats, opts, globbed, default) |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
709 m = copy.copy(match) |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
710 def tostandin(f): |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
711 if lfutil.standin(f) in ctx: |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
712 return lfutil.standin(f) |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
713 elif lfutil.standin(f) in repo[None]: |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
714 return None |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
715 return f |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
716 m._files = [tostandin(f) for f in m._files] |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
717 m._files = [f for f in m._files if f is not None] |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
718 m._fmap = set(m._files) |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
719 origmatchfn = m.matchfn |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
720 def matchfn(f): |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
721 if lfutil.isstandin(f): |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
722 return (origmatchfn(lfutil.splitstandin(f)) and |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
723 (f in repo[None] or f in ctx)) |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
724 return origmatchfn(f) |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
725 m.matchfn = matchfn |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
726 return m |
ec309395aa45
largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents:
21094
diff
changeset
|
727 oldmatch = installmatchfn(overridematch) |
15168 | 728 try: |
729 orig(ui, repo, *pats, **opts) | |
730 finally: | |
731 restorematchfn() | |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
732 |
21094
4643bfec2485
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents:
21093
diff
changeset
|
733 newstandins = lfutil.getstandinsstate(repo) |
4643bfec2485
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents:
21093
diff
changeset
|
734 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
|
735 # 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
|
736 # 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
|
737 # 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
|
738 # '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
|
739 # of target (standin) file. |
0cb34b3991f8
largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21884
diff
changeset
|
740 lfcommands.updatelfiles(ui, repo, filelist, printmessage=False, |
0cb34b3991f8
largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21884
diff
changeset
|
741 normallookup=True) |
21094
4643bfec2485
largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents:
21093
diff
changeset
|
742 |
15168 | 743 finally: |
744 wlock.release() | |
745 | |
23183
51c9196a6bd0
largefiles: remove meaningless code path for "hg pull --rebase"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23145
diff
changeset
|
746 # 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
|
747 # largefiles updated remotely |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
748 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
|
749 revsprepull = len(repo) |
18977
864232481e76
largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
750 if not source: |
864232481e76
largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
751 source = 'default' |
864232481e76
largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
752 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
|
753 result = orig(ui, repo, source, **opts) |
18977
864232481e76
largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents:
18974
diff
changeset
|
754 revspostpull = len(repo) |
18981
83ead8cb0ff2
largefiles: implement pull --all-largefiles as a special case of --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18980
diff
changeset
|
755 lfrevs = opts.get('lfrev', []) |
16692
b9969574540a
largefiles: add --all-largefiles flag to pull
Na'Tosha Bard <natosha@unity3d.com>
parents:
16691
diff
changeset
|
756 if opts.get('all_largefiles'): |
18981
83ead8cb0ff2
largefiles: implement pull --all-largefiles as a special case of --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18980
diff
changeset
|
757 lfrevs.append('pulled()') |
18978
8abaadab9abb
largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents:
18977
diff
changeset
|
758 if lfrevs and revspostpull > revsprepull: |
8abaadab9abb
largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents:
18977
diff
changeset
|
759 numcached = 0 |
18979
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
760 repo.firstpulled = revsprepull # for pulled() revset expression |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
761 try: |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
762 for rev in scmutil.revrange(repo, lfrevs): |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
763 ui.note(_('pulling largefiles for revision %s\n') % rev) |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
764 (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
|
765 numcached += len(cached) |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
766 finally: |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
767 del repo.firstpulled |
18978
8abaadab9abb
largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents:
18977
diff
changeset
|
768 ui.status(_("%d largefiles cached\n") % numcached) |
15168 | 769 return result |
770 | |
18979
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
771 def pulledrevsetsymbol(repo, subset, x): |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
772 """``pulled()`` |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
773 Changesets that just has been pulled. |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
774 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
775 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
|
776 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
777 .. container:: verbose |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
778 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
779 Some examples: |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
780 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
781 - 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
|
782 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
783 hg pull -lfrev "pulled()" |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
784 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
785 - 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
|
786 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
787 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
|
788 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
789 """ |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
790 |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
791 try: |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
792 firstpulled = repo.firstpulled |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
793 except AttributeError: |
1176832fc757
largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents:
18978
diff
changeset
|
794 raise util.Abort(_("pulled() only available in --lfrev")) |
20442
8524cdf66a12
hgext: updated extensions to return a baseset when adding symbols
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
20298
diff
changeset
|
795 return revset.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
|
796 |
16644
98a9266db803
largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16642
diff
changeset
|
797 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
|
798 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
|
799 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
|
800 d = hg.defaultdest(source) |
3a1c6b64e052
largefiles: don't convert dest=None to dest=hg.defaultdest() in clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17599
diff
changeset
|
801 if opts.get('all_largefiles') and not hg.islocal(d): |
16723
68da5ae6e470
largefiles: don't attempt to clone all largefiles to non-local destinations
Levi Bard <levi@unity3d.com>
parents:
16692
diff
changeset
|
802 raise util.Abort(_( |
21096
a45ed365904a
i18n: fix "% inside _()" problem
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21095
diff
changeset
|
803 '--all-largefiles is incompatible with non-local destination %s') % |
a45ed365904a
i18n: fix "% inside _()" problem
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21095
diff
changeset
|
804 d) |
17601
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
805 |
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
806 return orig(ui, source, dest, **opts) |
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
807 |
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
808 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
|
809 result = orig(ui, opts, *args, **kwargs) |
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
810 |
17824
221c9c3146eb
largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents:
17702
diff
changeset
|
811 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
|
812 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
|
813 repo = destrepo.local() |
56136786000f
largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents:
17598
diff
changeset
|
814 |
56136786000f
largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents:
17598
diff
changeset
|
815 # 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
|
816 # 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
|
817 # this option, so attempt whether or not this is a largefile repo. |
221c9c3146eb
largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents:
17702
diff
changeset
|
818 if opts.get('all_largefiles'): |
221c9c3146eb
largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents:
17702
diff
changeset
|
819 success, missing = lfcommands.downloadlfiles(ui, repo, None) |
17601
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
820 |
17824
221c9c3146eb
largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents:
17702
diff
changeset
|
821 if missing != 0: |
221c9c3146eb
largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents:
17702
diff
changeset
|
822 return None |
17601
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
823 |
6e2ab601be3f
largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17600
diff
changeset
|
824 return result |
16644
98a9266db803
largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16642
diff
changeset
|
825 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
826 def overriderebase(orig, ui, repo, **opts): |
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
|
827 resuming = opts.get('continue') |
f726b05ecfe6
largefiles: update standins only at the 1st commit of "hg rebase --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23183
diff
changeset
|
828 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
|
829 repo._lfstatuswriters.append(lambda *msg, **opts: None) |
15168 | 830 try: |
17578
40c988f108d0
largefiles: preserve the exit status of the rebase command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17577
diff
changeset
|
831 return orig(ui, repo, **opts) |
15168 | 832 finally: |
23190
383ff455cab8
largefiles: avoid printing messages while rebasing by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23189
diff
changeset
|
833 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
|
834 repo._lfcommithooks.pop() |
15168 | 835 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
836 def overridearchive(orig, repo, dest, node, kind, decode=True, matchfn=None, |
15168 | 837 prefix=None, mtime=None, subrepos=None): |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
838 # 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
|
839 # largefile caches, neither of which are modified. |
15168 | 840 lfcommands.cachelfiles(repo.ui, repo, node) |
841 | |
842 if kind not in archival.archivers: | |
843 raise util.Abort(_("unknown archive type '%s'") % kind) | |
844 | |
845 ctx = repo[node] | |
846 | |
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
|
847 if kind == 'files': |
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
848 if prefix: |
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
849 raise util.Abort( |
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
850 _('cannot give prefix when archiving to files')) |
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
851 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
|
852 prefix = archival.tidyprefix(dest, kind, prefix) |
15168 | 853 |
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
|
854 def write(name, mode, islink, 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
|
855 if matchfn and not matchfn(name): |
7c604d8c7e83
largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents:
15170
diff
changeset
|
856 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
|
857 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
|
858 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
|
859 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
|
860 archiver.addfile(prefix + name, mode, islink, data) |
15168 | 861 |
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
|
862 archiver = archival.archivers[kind](dest, mtime or ctx.date()[0]) |
15168 | 863 |
864 if repo.ui.configbool("ui", "archivemeta", True): | |
865 def metadata(): | |
866 base = 'repo: %s\nnode: %s\nbranch: %s\n' % ( | |
867 hex(repo.changelog.node(0)), hex(node), ctx.branch()) | |
868 | |
869 tags = ''.join('tag: %s\n' % t for t in ctx.tags() | |
870 if repo.tagtype(t) == 'global') | |
871 if not tags: | |
872 repo.ui.pushbuffer() | |
873 opts = {'template': '{latesttag}\n{latesttagdistance}', | |
874 'style': '', 'patch': None, 'git': None} | |
875 cmdutil.show_changeset(repo.ui, repo, opts).show(ctx) | |
876 ltags, dist = repo.ui.popbuffer().split('\n') | |
877 tags = ''.join('latesttag: %s\n' % t for t in ltags.split(':')) | |
878 tags += 'latesttagdistance: %s\n' % dist | |
879 | |
880 return base + tags | |
881 | |
882 write('.hg_archival.txt', 0644, False, metadata) | |
883 | |
884 for f in ctx: | |
885 ff = ctx.flags(f) | |
886 getdata = ctx[f].data | |
887 if lfutil.isstandin(f): | |
888 path = lfutil.findfile(repo, getdata().strip()) | |
15914
264087940d5b
largefiles: check if largefile could be found when archiving (issue3193)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15860
diff
changeset
|
889 if path is None: |
264087940d5b
largefiles: check if largefile could be found when archiving (issue3193)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15860
diff
changeset
|
890 raise util.Abort( |
264087940d5b
largefiles: check if largefile could be found when archiving (issue3193)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15860
diff
changeset
|
891 _('largefile %s not found in repo store or system cache') |
264087940d5b
largefiles: check if largefile could be found when archiving (issue3193)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15860
diff
changeset
|
892 % lfutil.splitstandin(f)) |
15168 | 893 f = lfutil.splitstandin(f) |
894 | |
895 def getdatafn(): | |
15576
e387e760b207
largefiles: avoid use of uinitialized variable in case of errors
Mads Kiilerich <mads@kiilerich.com>
parents:
15383
diff
changeset
|
896 fd = None |
15168 | 897 try: |
898 fd = open(path, 'rb') | |
899 return fd.read() | |
900 finally: | |
15576
e387e760b207
largefiles: avoid use of uinitialized variable in case of errors
Mads Kiilerich <mads@kiilerich.com>
parents:
15383
diff
changeset
|
901 if fd: |
e387e760b207
largefiles: avoid use of uinitialized variable in case of errors
Mads Kiilerich <mads@kiilerich.com>
parents:
15383
diff
changeset
|
902 fd.close() |
15168 | 903 |
904 getdata = getdatafn | |
905 write(f, 'x' in ff and 0755 or 0644, 'l' in ff, getdata) | |
906 | |
907 if subrepos: | |
18364
6252b4f1c4b4
subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
18341
diff
changeset
|
908 for subpath in sorted(ctx.substate): |
15168 | 909 sub = ctx.sub(subpath) |
17108
1894dac619de
subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17107
diff
changeset
|
910 submatch = match_.narrowmatcher(subpath, matchfn) |
23575
a2f139d25845
subrepo: drop the 'ui' parameter to archive()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23543
diff
changeset
|
911 sub.archive(archiver, prefix, submatch) |
15168 | 912 |
913 archiver.done() | |
914 | |
23575
a2f139d25845
subrepo: drop the 'ui' parameter to archive()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23543
diff
changeset
|
915 def hgsubrepoarchive(orig, repo, archiver, prefix, match=None): |
17695
75f25bd4c7d4
largefiles: download missing subrepo revs when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17658
diff
changeset
|
916 repo._get(repo._state + ('hg',)) |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
917 rev = repo._state[1] |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
918 ctx = repo._repo[rev] |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
919 |
23575
a2f139d25845
subrepo: drop the 'ui' parameter to archive()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23543
diff
changeset
|
920 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
|
921 |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
922 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
|
923 # 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
|
924 # 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
|
925 if match and not match(f): |
1894dac619de
subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17107
diff
changeset
|
926 return |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
927 data = getdata() |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
928 |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
929 archiver.addfile(prefix + repo._path + '/' + name, mode, islink, data) |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
930 |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
931 for f in ctx: |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
932 ff = ctx.flags(f) |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
933 getdata = ctx[f].data |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
934 if lfutil.isstandin(f): |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
935 path = lfutil.findfile(repo._repo, getdata().strip()) |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
936 if path is None: |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
937 raise util.Abort( |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
938 _('largefile %s not found in repo store or system cache') |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
939 % lfutil.splitstandin(f)) |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
940 f = lfutil.splitstandin(f) |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
941 |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
942 def getdatafn(): |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
943 fd = None |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
944 try: |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
945 fd = open(os.path.join(prefix, path), 'rb') |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
946 return fd.read() |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
947 finally: |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
948 if fd: |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
949 fd.close() |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
950 |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
951 getdata = getdatafn |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
952 |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
953 write(f, 'x' in ff and 0755 or 0644, 'l' in ff, getdata) |
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
954 |
18364
6252b4f1c4b4
subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
18341
diff
changeset
|
955 for subpath in sorted(ctx.substate): |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
956 sub = ctx.sub(subpath) |
17108
1894dac619de
subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17107
diff
changeset
|
957 submatch = match_.narrowmatcher(subpath, match) |
23575
a2f139d25845
subrepo: drop the 'ui' parameter to archive()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23543
diff
changeset
|
958 sub.archive(archiver, os.path.join(prefix, repo._path) + '/', submatch) |
16578
43fb170a23bd
largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents:
16516
diff
changeset
|
959 |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
960 # 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
|
961 # 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
|
962 # 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
|
963 # largefiles were changed. This is used by bisect, backout and fetch. |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
964 def overridebailifchanged(orig, repo): |
15168 | 965 orig(repo) |
966 repo.lfstatus = True | |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
967 s = repo.status() |
15168 | 968 repo.lfstatus = False |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
969 if s.modified or s.added or s.removed or s.deleted: |
19805
9b088e9c2690
largefiles: standardize error message for dirty working dir
Siddharth Agarwal <sid0@fb.com>
parents:
19775
diff
changeset
|
970 raise util.Abort(_('uncommitted changes')) |
15168 | 971 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
972 def overrideforget(orig, ui, repo, *pats, **opts): |
15168 | 973 installnormalfilesmatchfn(repo[None].manifest()) |
17579
cbacb5a813dd
largefiles: preserve the exit status of the forget command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17578
diff
changeset
|
974 result = orig(ui, repo, *pats, **opts) |
15168 | 975 restorematchfn() |
23619
70afc58c32d3
largefiles: fix a spurious missing file warning with forget (issue4053)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23618
diff
changeset
|
976 m = composelargefilematcher(scmutil.match(repo[None], pats, opts), |
70afc58c32d3
largefiles: fix a spurious missing file warning with forget (issue4053)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23618
diff
changeset
|
977 repo[None].manifest()) |
15168 | 978 |
979 try: | |
980 repo.lfstatus = True | |
981 s = repo.status(match=m, clean=True) | |
982 finally: | |
983 repo.lfstatus = False | |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
984 forget = sorted(s.modified + s.added + s.deleted + s.clean) |
15168 | 985 forget = [f for f in forget if lfutil.standin(f) in repo[None].manifest()] |
986 | |
987 for f in forget: | |
988 if lfutil.standin(f) not in repo.dirstate and not \ | |
23673
69cd91d04117
forget: use vfs instead of os.path + match.rel() for filesystem checks
Matt Harbison <matt_harbison@yahoo.com>
parents:
23658
diff
changeset
|
989 repo.wvfs.isdir(lfutil.standin(f)): |
15168 | 990 ui.warn(_('not removing %s: file is already untracked\n') |
991 % m.rel(f)) | |
17579
cbacb5a813dd
largefiles: preserve the exit status of the forget command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17578
diff
changeset
|
992 result = 1 |
15168 | 993 |
994 for f in forget: | |
995 if ui.verbose or not m.exact(f): | |
996 ui.status(_('removing %s\n') % m.rel(f)) | |
997 | |
998 # 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
|
999 # repository and we could race in-between. |
15168 | 1000 wlock = repo.wlock() |
1001 try: | |
1002 lfdirstate = lfutil.openlfdirstate(ui, repo) | |
1003 for f in forget: | |
1004 if lfdirstate[f] == 'a': | |
1005 lfdirstate.drop(f) | |
1006 else: | |
1007 lfdirstate.remove(f) | |
1008 lfdirstate.write() | |
18153
51837a31b425
largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents:
18152
diff
changeset
|
1009 standins = [lfutil.standin(f) for f in forget] |
51837a31b425
largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents:
18152
diff
changeset
|
1010 for f in standins: |
51837a31b425
largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents:
18152
diff
changeset
|
1011 util.unlinkpath(repo.wjoin(f), ignoremissing=True) |
51837a31b425
largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents:
18152
diff
changeset
|
1012 repo[None].forget(standins) |
15168 | 1013 finally: |
1014 wlock.release() | |
1015 | |
17579
cbacb5a813dd
largefiles: preserve the exit status of the forget command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17578
diff
changeset
|
1016 return result |
cbacb5a813dd
largefiles: preserve the exit status of the forget command
Matt Harbison <matt_harbison@yahoo.com>
parents:
17578
diff
changeset
|
1017 |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1018 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
|
1019 """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
|
1020 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
|
1021 |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1022 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
|
1023 |
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
|
1024 '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
|
1025 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
|
1026 """ |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1027 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
|
1028 lfhashes = 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
|
1029 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
|
1030 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
|
1031 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
|
1032 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
|
1033 lfhashes.add(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
|
1034 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
|
1035 if lfhashes: |
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1036 lfexists = basestore._openstore(repo, other).exists(lfhashes) |
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1037 for fn, lfhash in knowns: |
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1038 if not lfexists[lfhash]: # lfhash doesn't exist on "other" |
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1039 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
|
1040 |
21052
cde32cb5a565
largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21048
diff
changeset
|
1041 def outgoinghook(ui, repo, other, opts, missing): |
15168 | 1042 if opts.pop('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
|
1043 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
|
1044 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
|
1045 toupload = {} |
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1046 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
|
1047 if fn not in toupload: |
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1048 toupload[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
|
1049 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
|
1050 lfhashes.add(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
|
1051 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
|
1052 for lfhash in sorted(toupload[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
|
1053 ui.debug(' %s\n' % (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
|
1054 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
|
1055 toupload = 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
|
1056 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
|
1057 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
|
1058 lfhashes.add(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
|
1059 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
|
1060 pass |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1061 _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
|
1062 |
21052
cde32cb5a565
largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21048
diff
changeset
|
1063 if not toupload: |
17835
08d11b82d9fc
largefiles: distinguish "no remote repo" from "no files to upload" (issue3651)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17824
diff
changeset
|
1064 ui.status(_('largefiles: no files to upload\n')) |
15168 | 1065 else: |
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
|
1066 ui.status(_('largefiles to upload (%d entities):\n') |
87aa279f7073
largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21882
diff
changeset
|
1067 % (len(lfhashes))) |
21052
cde32cb5a565
largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21048
diff
changeset
|
1068 for file in sorted(toupload): |
15168 | 1069 ui.status(lfutil.splitstandin(file) + '\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
|
1070 showhashes(file) |
15168 | 1071 ui.status('\n') |
1072 | |
21048
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1073 def summaryremotehook(ui, repo, opts, changes): |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1074 largeopt = opts.get('large', False) |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1075 if changes is None: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1076 if largeopt: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1077 return (False, True) # only outgoing check is needed |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1078 else: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1079 return (False, False) |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1080 elif largeopt: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1081 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
|
1082 if peer is None: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1083 # i18n: column positioning for "hg summary" |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1084 ui.status(_('largefiles: (no remote repo)\n')) |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1085 return |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1086 |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1087 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
|
1088 lfhashes = set() |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1089 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
|
1090 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
|
1091 lfhashes.add(lfhash) |
21884
a858d3de0d32
largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21883
diff
changeset
|
1092 _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
|
1093 |
21048
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1094 if not toupload: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1095 # i18n: column positioning for "hg summary" |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1096 ui.status(_('largefiles: (no files to upload)\n')) |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1097 else: |
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1098 # i18n: column positioning for "hg summary" |
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
|
1099 ui.status(_('largefiles: %d entities for %d files to upload\n') |
12019e6aa8a2
largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21545
diff
changeset
|
1100 % (len(lfhashes), len(toupload))) |
21048
ca7a57464fb3
largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
1101 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
1102 def overridesummary(orig, ui, repo, *pats, **opts): |
15787
0c7b83a057aa
largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15786
diff
changeset
|
1103 try: |
0c7b83a057aa
largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15786
diff
changeset
|
1104 repo.lfstatus = True |
0c7b83a057aa
largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15786
diff
changeset
|
1105 orig(ui, repo, *pats, **opts) |
0c7b83a057aa
largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15786
diff
changeset
|
1106 finally: |
0c7b83a057aa
largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15786
diff
changeset
|
1107 repo.lfstatus = False |
15168 | 1108 |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23533
diff
changeset
|
1109 def scmutiladdremove(orig, repo, matcher, prefix, opts={}, dry_run=None, |
17658
a02c1ffddae9
largefiles: handle commit -A properly, after a --large commit (issue3542)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17601
diff
changeset
|
1110 similarity=None): |
16636
b371056ae353
largefiles: follow normal codepath for addremove if non-largefiles repo (issue3249)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16516
diff
changeset
|
1111 if not lfutil.islfilesrepo(repo): |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23533
diff
changeset
|
1112 return orig(repo, matcher, prefix, opts, dry_run, similarity) |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1113 # Get the list of missing largefiles so we can remove them |
17658
a02c1ffddae9
largefiles: handle commit -A properly, after a --large commit (issue3542)
Matt Harbison <matt_harbison@yahoo.com>
parents:
17601
diff
changeset
|
1114 lfdirstate = lfutil.openlfdirstate(repo.ui, repo) |
22911
509e2cbee679
dirstate: separate 'lookup' status field from others
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22630
diff
changeset
|
1115 unsure, s = lfdirstate.status(match_.always(repo.root, repo.getcwd()), [], |
509e2cbee679
dirstate: separate 'lookup' status field from others
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22630
diff
changeset
|
1116 False, False, False) |
15168 | 1117 |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1118 # 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
|
1119 # 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
|
1120 # 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
|
1121 # confused state later. |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1122 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
|
1123 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
|
1124 |
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
1125 # 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
|
1126 # 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
|
1127 # 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
|
1128 # 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
|
1129 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
|
1130 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
|
1131 |
f2893cd8d1e5
largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23733
diff
changeset
|
1132 removelargefiles(repo.ui, repo, True, m, **opts) |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1133 # 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
|
1134 # largefiles will be |
23767
749dc66e9329
largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents:
23766
diff
changeset
|
1135 addlargefiles(repo.ui, repo, True, matcher, **opts) |
15792
7cbba3adabc7
largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15788
diff
changeset
|
1136 # 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
|
1137 # 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
|
1138 # largefiles by passing a matcher that will ignore them. |
891aaa7c0c70
scmutil: pass a matcher to scmutil.addremove() instead of a list of patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23530
diff
changeset
|
1139 matcher = composenormalfilematcher(matcher, repo[None].manifest()) |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23533
diff
changeset
|
1140 return orig(repo, matcher, prefix, opts, dry_run, similarity) |
15168 | 1141 |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15252
diff
changeset
|
1142 # Calling purge with --all will cause the largefiles to be deleted. |
15168 | 1143 # Override repo.status to prevent this from happening. |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
1144 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
|
1145 # 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
|
1146 # 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
|
1147 # 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
|
1148 # 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
|
1149 # 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
|
1150 # 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
|
1151 # |
faec11cfb645
largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23634
diff
changeset
|
1152 # 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
|
1153 # 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
|
1154 repo = repo.unfiltered() |
15168 | 1155 oldstatus = repo.status |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
1156 def overridestatus(node1='.', node2=None, match=None, ignored=False, |
15168 | 1157 clean=False, unknown=False, listsubrepos=False): |
1158 r = oldstatus(node1, node2, match, ignored, clean, unknown, | |
1159 listsubrepos) | |
1160 lfdirstate = lfutil.openlfdirstate(ui, repo) | |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1161 unknown = [f for f in r.unknown if lfdirstate[f] == '?'] |
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1162 ignored = [f for f in r.ignored if lfdirstate[f] == '?'] |
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1163 return scmutil.status(r.modified, r.added, r.removed, r.deleted, |
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1164 unknown, ignored, r.clean) |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
1165 repo.status = overridestatus |
15168 | 1166 orig(ui, repo, *dirs, **opts) |
1167 repo.status = oldstatus | |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
1168 def overriderollback(orig, ui, repo, **opts): |
15794
0d91211dd12f
largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents:
15792
diff
changeset
|
1169 wlock = repo.wlock() |
0d91211dd12f
largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents:
15792
diff
changeset
|
1170 try: |
22283
cb556ea76dcd
largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22196
diff
changeset
|
1171 before = repo.dirstate.parents() |
22286
3f3b9483e7ef
largefiles: unlink standins not known to the restored dirstate at rollback
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22285
diff
changeset
|
1172 orphans = set(f for f in repo.dirstate |
3f3b9483e7ef
largefiles: unlink standins not known to the restored dirstate at rollback
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22285
diff
changeset
|
1173 if lfutil.isstandin(f) and repo.dirstate[f] != 'r') |
22094
7d7065476fea
largefiles: put whole rollback-ing process into the same "wlock" scope
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21934
diff
changeset
|
1174 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
|
1175 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
|
1176 if before == after: |
cb556ea76dcd
largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22196
diff
changeset
|
1177 return result # no need to restore standins |
cb556ea76dcd
largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22196
diff
changeset
|
1178 |
22285
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1179 pctx = repo['.'] |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1180 for f in repo.dirstate: |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1181 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
|
1182 orphans.discard(f) |
22285
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1183 if repo.dirstate[f] == 'r': |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1184 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
|
1185 elif f in pctx: |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1186 fctx = pctx[f] |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1187 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
|
1188 else: |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1189 # 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
|
1190 # 'm' or 'n' (coming from the 2nd parent) cases |
85bded43cc80
largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22284
diff
changeset
|
1191 lfutil.writestandin(repo, f, '', 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
|
1192 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
|
1193 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
|
1194 |
15794
0d91211dd12f
largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents:
15792
diff
changeset
|
1195 lfdirstate = lfutil.openlfdirstate(ui, repo) |
22097
7d1eac06ab2b
largefiles: drop orphan entries from lfdristat at "hg rollback"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22096
diff
changeset
|
1196 orphans = set(lfdirstate) |
15794
0d91211dd12f
largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents:
15792
diff
changeset
|
1197 lfiles = lfutil.listlfiles(repo) |
0d91211dd12f
largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents:
15792
diff
changeset
|
1198 for file in lfiles: |
22096
61e526585b20
largefiles: restore R status of removed largefiles correctly at "hg rollback"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22094
diff
changeset
|
1199 lfutil.synclfdirstate(repo, lfdirstate, file, True) |
22097
7d1eac06ab2b
largefiles: drop orphan entries from lfdristat at "hg rollback"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22096
diff
changeset
|
1200 orphans.discard(file) |
7d1eac06ab2b
largefiles: drop orphan entries from lfdristat at "hg rollback"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22096
diff
changeset
|
1201 for lfile in orphans: |
7d1eac06ab2b
largefiles: drop orphan entries from lfdristat at "hg rollback"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22096
diff
changeset
|
1202 lfdirstate.drop(lfile) |
15794
0d91211dd12f
largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents:
15792
diff
changeset
|
1203 lfdirstate.write() |
0d91211dd12f
largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents:
15792
diff
changeset
|
1204 finally: |
0d91211dd12f
largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents:
15792
diff
changeset
|
1205 wlock.release() |
15168 | 1206 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
|
1207 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16246
diff
changeset
|
1208 def overridetransplant(orig, ui, repo, *revs, **opts): |
23274
0ec2e124fcc0
largefiles: update standins only at the 1st commit of "transplant --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23273
diff
changeset
|
1209 resuming = opts.get('continue') |
0ec2e124fcc0
largefiles: update standins only at the 1st commit of "transplant --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23273
diff
changeset
|
1210 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
|
1211 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
|
1212 try: |
bf502ccc46d7
largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15967
diff
changeset
|
1213 result = orig(ui, repo, *revs, **opts) |
bf502ccc46d7
largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15967
diff
changeset
|
1214 finally: |
23275
fae708cb32d1
largefiles: avoid printing messages while transplanting by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23274
diff
changeset
|
1215 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
|
1216 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
|
1217 return result |
16439
290850e7aa43
largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16248
diff
changeset
|
1218 |
290850e7aa43
largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents:
16248
diff
changeset
|
1219 def overridecat(orig, ui, repo, file1, *pats, **opts): |
17269
acfab0754584
largefiles: support revsets for cat
Matt Harbison <matt_harbison@yahoo.com>
parents:
17268
diff
changeset
|
1220 ctx = scmutil.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
|
1221 err = 1 |
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1222 notbad = set() |
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1223 m = scmutil.match(ctx, (file1,) + pats, opts) |
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1224 origmatchfn = m.matchfn |
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1225 def lfmatchfn(f): |
21087
3fb2affb023f
largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents:
21086
diff
changeset
|
1226 if origmatchfn(f): |
3fb2affb023f
largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents:
21086
diff
changeset
|
1227 return True |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1228 lf = lfutil.splitstandin(f) |
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1229 if lf is None: |
21087
3fb2affb023f
largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents:
21086
diff
changeset
|
1230 return False |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1231 notbad.add(lf) |
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1232 return origmatchfn(lf) |
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1233 m.matchfn = lfmatchfn |
18974
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1234 origbadfn = m.bad |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1235 def lfbadfn(f, msg): |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1236 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
|
1237 origbadfn(f, msg) |
18974
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1238 m.bad = lfbadfn |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1239 for f in ctx.walk(m): |
18974
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1240 fp = cmdutil.makefileobj(repo, opts.get('output'), ctx.node(), |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1241 pathname=f) |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1242 lf = lfutil.splitstandin(f) |
21087
3fb2affb023f
largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents:
21086
diff
changeset
|
1243 if lf is None or origmatchfn(f): |
18974
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1244 # duplicating unreachable code from commands.cat |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1245 data = ctx[f].data() |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1246 if opts.get('decode'): |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1247 data = repo.wwritedata(f, data) |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1248 fp.write(data) |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1249 else: |
18974
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1250 hash = lfutil.readstandin(repo, lf, ctx.rev()) |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1251 if not lfutil.inusercache(repo.ui, hash): |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1252 store = basestore._openstore(repo) |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1253 success, missing = store.get([(lf, hash)]) |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1254 if len(success) != 1: |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1255 raise util.Abort( |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1256 _('largefile %s is not in cache and could not be ' |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1257 'downloaded') % lf) |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1258 path = lfutil.usercachepath(repo.ui, hash) |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1259 fpin = open(path, "rb") |
19001
2a35296a6304
largefiles: drop lfutil.blockstream - use filechunkiter like everybody else
Mads Kiilerich <madski@unity3d.com>
parents:
18981
diff
changeset
|
1260 for chunk in util.filechunkiter(fpin, 128 * 1024): |
18974
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1261 fp.write(chunk) |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1262 fpin.close() |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1263 fp.close() |
d78a136a8036
largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18813
diff
changeset
|
1264 err = 0 |
18491
b7da9c042b9e
largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents:
18459
diff
changeset
|
1265 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
|
1266 |
22288
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1267 def mergeupdate(orig, repo, node, branchmerge, force, partial, |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1268 *args, **kwargs): |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1269 wlock = repo.wlock() |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1270 try: |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1271 # branch | | | |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1272 # 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
|
1273 # -------+-------+---------+-------------- |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1274 # 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
|
1275 # 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
|
1276 # 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
|
1277 # 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
|
1278 # 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
|
1279 # 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
|
1280 # 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
|
1281 # 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
|
1282 # |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1283 # (*) 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
|
1284 # (*1) deprecated, but used internally (e.g: "rebase --collapse") |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1285 |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1286 linearmerge = not branchmerge and not force and not partial |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1287 |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1288 if linearmerge or (branchmerge and force and not partial): |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1289 # update standins for linear-merge or force-branch-merge, |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1290 # because largefiles in the working directory may be modified |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1291 lfdirstate = lfutil.openlfdirstate(repo.ui, repo) |
22911
509e2cbee679
dirstate: separate 'lookup' status field from others
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22630
diff
changeset
|
1292 unsure, s = lfdirstate.status(match_.always(repo.root, |
509e2cbee679
dirstate: separate 'lookup' status field from others
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22630
diff
changeset
|
1293 repo.getcwd()), |
509e2cbee679
dirstate: separate 'lookup' status field from others
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22630
diff
changeset
|
1294 [], False, False, False) |
22919
1982bdb7e2cc
largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1295 for lfile in unsure + s.modified + s.added: |
22288
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1296 lfutil.updatestandin(repo, lfutil.standin(lfile)) |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1297 |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1298 if linearmerge: |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1299 # Only call updatelfiles on the standins that have changed |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1300 # to save time |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1301 oldstandins = lfutil.getstandinsstate(repo) |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1302 |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1303 result = orig(repo, node, branchmerge, force, partial, *args, **kwargs) |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1304 |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1305 filelist = None |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1306 if linearmerge: |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1307 newstandins = lfutil.getstandinsstate(repo) |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1308 filelist = lfutil.getlfilestoupdate(oldstandins, newstandins) |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1309 |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1310 lfcommands.updatelfiles(repo.ui, repo, filelist=filelist, |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1311 normallookup=partial) |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1312 |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1313 return result |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1314 finally: |
4e2559841d6c
largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22287
diff
changeset
|
1315 wlock.release() |
22289
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1316 |
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1317 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
|
1318 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
|
1319 |
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1320 filelist = [lfutil.splitstandin(f) for f in files if lfutil.isstandin(f)] |
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1321 if filelist: |
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1322 lfcommands.updatelfiles(repo.ui, repo, filelist=filelist, |
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1323 printmessage=False, normallookup=True) |
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1324 |
e26df4e774f6
largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22288
diff
changeset
|
1325 return result |