annotate hgext/largefiles/overrides.py @ 41578:8d1dc380b026

largefiles: use wrappedfunction() for matchandpats() override in overridelog() Differential Revision: https://phab.mercurial-scm.org/D5865
author Martin von Zweigbergk <martinvonz@google.com>
date Tue, 05 Feb 2019 14:15:34 -0800
parents 876494fd967d
children 028bb170e74d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1 # Copyright 2009-2010 Gregory P. Ward
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
2 # Copyright 2009-2010 Intelerad Medical Systems Incorporated
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
3 # Copyright 2010-2011 Fog Creek Software
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
4 # Copyright 2010-2011 Unity Technologies
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
5 #
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
6 # This software may be used and distributed according to the terms of the
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
7 # GNU General Public License version 2 or any later version.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
8
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
9 '''Overridden Mercurial commands and functions for the largefiles extension'''
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
10 from __future__ import absolute_import
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
11
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
12 import copy
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
13 import os
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
14
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
15 from mercurial.i18n import _
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
16
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
17 from mercurial.hgweb import (
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
18 webcommands,
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
19 )
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
20
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
21 from mercurial import (
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
22 archival,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
23 cmdutil,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
24 copies as copiesmod,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
25 error,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
26 exchange,
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
27 extensions,
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
28 exthelper,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
29 filemerge,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
30 hg,
35885
7625b4f7db70 cmdutil: split functions of log-like commands to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35623
diff changeset
31 logcmdutil,
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
32 match as matchmod,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
33 merge,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
34 pathutil,
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
35 pycompat,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
36 scmutil,
31023
aea06029919e revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents: 30215
diff changeset
37 smartset,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
38 subrepo,
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
39 upgrade,
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
40 url as urlmod,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
41 util,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
42 )
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
43
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
44 from . import (
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
45 lfcommands,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
46 lfutil,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
47 storefactory,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
48 )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
49
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
50 eh = exthelper.exthelper()
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
51
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
52 # -- Utility functions: commonly/repeatedly needed functionality ---------------
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
53
23617
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
54 def composelargefilematcher(match, manifest):
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
55 '''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
56 matcher'''
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
57 m = copy.copy(match)
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
58 lfile = lambda f: lfutil.standin(f) in manifest
36311
b9da10f310f4 largfiles: replace filter() with listcomp when result needs to be a list
Augie Fackler <augie@google.com>
parents: 36205
diff changeset
59 m._files = [lf for lf in m._files if lfile(lf)]
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
60 m._fileset = set(m._files)
32388
4a23cdb32968 largefiles: replace always() method, not _always field
Martin von Zweigbergk <martinvonz@google.com>
parents: 32382
diff changeset
61 m.always = lambda: False
23617
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
62 origmatchfn = m.matchfn
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
63 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
64 return m
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
65
23769
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
66 def composenormalfilematcher(match, manifest, exclude=None):
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
67 excluded = set()
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
68 if exclude is not None:
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
69 excluded.update(exclude)
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
70
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
71 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
72 notlfile = lambda f: not (lfutil.isstandin(f) or lfutil.standin(f) in
23769
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
73 manifest or f in excluded)
36311
b9da10f310f4 largfiles: replace filter() with listcomp when result needs to be a list
Augie Fackler <augie@google.com>
parents: 36205
diff changeset
74 m._files = [lf for lf in m._files if notlfile(lf)]
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
75 m._fileset = set(m._files)
32388
4a23cdb32968 largefiles: replace always() method, not _always field
Martin von Zweigbergk <martinvonz@google.com>
parents: 32382
diff changeset
76 m.always = lambda: False
23428
b5e3f3d25395 largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23426
diff changeset
77 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
78 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
79 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
80
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
81 def installnormalfilesmatchfn(manifest):
21090
aa3d652ba1d5 largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents: 21089
diff changeset
82 '''installmatchfn with a matchfn that ignores all largefiles'''
26337
932330c3f469 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26336
diff changeset
83 def overridematch(ctx, pats=(), opts=None, globbed=False,
25467
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25440
diff changeset
84 default='relpath', badfn=None):
26337
932330c3f469 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26336
diff changeset
85 if opts is None:
932330c3f469 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26336
diff changeset
86 opts = {}
25467
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25440
diff changeset
87 match = oldmatch(ctx, pats, opts, globbed, default, badfn=badfn)
23428
b5e3f3d25395 largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23426
diff changeset
88 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
89 oldmatch = installmatchfn(overridematch)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
90
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
91 def installmatchfn(f):
21090
aa3d652ba1d5 largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents: 21089
diff changeset
92 '''monkey patch the scmutil module with a custom match function.
aa3d652ba1d5 largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents: 21089
diff changeset
93 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
94 oldmatch = scmutil.match
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
95 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
96 scmutil.match = f
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
97 return oldmatch
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
98
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
99 def restorematchfn():
21090
aa3d652ba1d5 largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents: 21089
diff changeset
100 '''restores scmutil.match to what it was before installmatchfn
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
101 was called. no-op if scmutil.match is its original function.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
102
21090
aa3d652ba1d5 largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents: 21089
diff changeset
103 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
104 restore the original matchfn.'''
21092
56fda512db9f largefiles: remove silent handling of incorrect invocation of restorematchfn
Mads Kiilerich <madski@unity3d.com>
parents: 21091
diff changeset
105 scmutil.match = getattr(scmutil.match, 'oldmatch')
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
106
23767
749dc66e9329 largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23766
diff changeset
107 def addlargefiles(ui, repo, isaddremove, matcher, **opts):
32157
09fb3d3b1b3a py3: abuse r'' to access keys in keyword arguments
Pulkit Goyal <7895pulkit@gmail.com>
parents: 31892
diff changeset
108 large = opts.get(r'large')
15227
a7686abf73a6 largefiles: factor out lfutil.getminsize()
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
109 lfsize = lfutil.getminsize(
32157
09fb3d3b1b3a py3: abuse r'' to access keys in keyword arguments
Pulkit Goyal <7895pulkit@gmail.com>
parents: 31892
diff changeset
110 ui, lfutil.islfilesrepo(repo), opts.get(r'lfsize'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
111
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
112 lfmatcher = None
15739
be55285470cf largefiles: tiny code clean up
Michal Sznajder <michalsznajder@gmail.com>
parents: 15674
diff changeset
113 if lfutil.islfilesrepo(repo):
34756
3f3c6d12095d configitems: register the 'largefiles.patterns' config
Boris Feld <boris.feld@octobus.net>
parents: 34344
diff changeset
114 lfpats = ui.configlist(lfutil.longname, 'patterns')
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
115 if lfpats:
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
116 lfmatcher = matchmod.match(repo.root, '', list(lfpats))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
117
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
118 lfnames = []
25440
1a95c57959f6 largefiles: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25189
diff changeset
119 m = matcher
1a95c57959f6 largefiles: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25189
diff changeset
120
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
121 wctx = repo[None]
32382
c87db79b9507 cleanup: reuse existing wctx variables instead of calling repo[None]
Martin von Zweigbergk <martinvonz@google.com>
parents: 32361
diff changeset
122 for f in wctx.walk(matchmod.badmatch(m, lambda x, y: None)):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
123 exact = m.exact(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
124 lfile = lfutil.standin(f) in wctx
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
125 nfile = f in wctx
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
126 exists = lfile or nfile
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
127
23767
749dc66e9329 largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23766
diff changeset
128 # 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
129 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
130 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
131 else:
749dc66e9329 largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23766
diff changeset
132 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
133
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
134 # Don't warn the user when they attempt to add a normal tracked file.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
135 # The normal add code will do that for us.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
136 if exact and exists:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
137 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
138 ui.warn(_('%s already a largefile\n') % name)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
139 continue
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
140
17232
25248e2ebaee largefiles: ensure addlargefiles() doesn't add a standin as a largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 17231
diff changeset
141 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
142 # 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
143 # (issue3507)
23733
86810cd85eb8 largefiles: convert addlargefiles() to vfs
Matt Harbison <matt_harbison@yahoo.com>
parents: 23726
diff changeset
144 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
145 continue
2446b63c89ec largefiles: fix a traceback when addremove follows a remove (issue3507)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17229
diff changeset
146
15255
7ab05d752405 largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents: 15254
diff changeset
147 abovemin = (lfsize and
23733
86810cd85eb8 largefiles: convert addlargefiles() to vfs
Matt Harbison <matt_harbison@yahoo.com>
parents: 23726
diff changeset
148 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
149 if large or abovemin or (lfmatcher and lfmatcher(f)):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
150 lfnames.append(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
151 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
152 ui.status(_('adding %s as a largefile\n') % name)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
153
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
154 bad = []
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
155
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
156 # 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
157 # when standins are created and added to the repo.
27821
bf3bf7158f69 with: use context manager for wlock in addlargefiles
Bryan O'Sullivan <bryano@fb.com>
parents: 27772
diff changeset
158 with repo.wlock():
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
159 if not opts.get(r'dry_run'):
23041
a36625ef1f35 largefiles: move initialization of standins variable to clarify its "scope"
Mads Kiilerich <madski@unity3d.com>
parents: 23040
diff changeset
160 standins = []
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
161 lfdirstate = lfutil.openlfdirstate(ui, repo)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
162 for f in lfnames:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
163 standinname = lfutil.standin(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
164 lfutil.writestandin(repo, standinname, hash='',
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
165 executable=lfutil.getexecutable(repo.wjoin(f)))
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
166 standins.append(standinname)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
167 if lfdirstate[f] == 'r':
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
168 lfdirstate.normallookup(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
169 else:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
170 lfdirstate.add(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
171 lfdirstate.write()
15255
7ab05d752405 largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents: 15254
diff changeset
172 bad += [lfutil.splitstandin(f)
18154
93c697d9c158 largefiles: remove trivial portability wrappers
Mads Kiilerich <madski@unity3d.com>
parents: 18153
diff changeset
173 for f in repo[None].add(standins)
15255
7ab05d752405 largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents: 15254
diff changeset
174 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
175
6b1428e55728 largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23767
diff changeset
176 added = [f for f in lfnames if f not in bad]
6b1428e55728 largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23767
diff changeset
177 return added, bad
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
178
37150
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
179 def removelargefiles(ui, repo, isaddremove, matcher, dryrun, **opts):
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
180 after = opts.get(r'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
181 m = composelargefilematcher(matcher, repo[None].manifest())
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
182 try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
183 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
184 s = repo.status(match=m, clean=not isaddremove)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
185 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
186 repo.lfstatus = False
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
187 manifest = repo[None].manifest()
15255
7ab05d752405 largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents: 15254
diff changeset
188 modified, added, deleted, clean = [[f for f in list
7ab05d752405 largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents: 15254
diff changeset
189 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
190 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
191 s.deleted, s.clean)]
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
192
18066
abe9799a86d6 largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents: 18012
diff changeset
193 def warn(files, msg):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
194 for f in files:
18066
abe9799a86d6 largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents: 18012
diff changeset
195 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
196 return int(len(files) > 0)
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17575
diff changeset
197
15786
aca0f2b3c7e3 largefiles: fix confusion upon removal of added largefile (issue3176)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15663
diff changeset
198 if after:
22630
0290982e5ac7 largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22289
diff changeset
199 remove = deleted
18066
abe9799a86d6 largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents: 18012
diff changeset
200 result = warn(modified + added + clean,
abe9799a86d6 largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents: 18012
diff changeset
201 _('not removing %s: file still exists\n'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
202 else:
22630
0290982e5ac7 largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22289
diff changeset
203 remove = deleted + clean
18066
abe9799a86d6 largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents: 18012
diff changeset
204 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
205 ' to force removal)\n'))
abe9799a86d6 largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents: 18012
diff changeset
206 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
207 ' (use forget to undo)\n')) or result
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
208
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
209 # 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
210 # repository and we could race in-between.
27822
bce0afa1921a with: use context manager for wlock in removelargefiles
Bryan O'Sullivan <bryano@fb.com>
parents: 27821
diff changeset
211 with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
212 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
213 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
214 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
215 # 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
216 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
217 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
218 else:
ce0731e58ac9 largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23741
diff changeset
219 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
220 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
221
37150
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
222 if not dryrun:
23592
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
223 if not after:
31309
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31099
diff changeset
224 repo.wvfs.unlinkpath(f, ignoremissing=True)
23592
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
225
37150
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
226 if dryrun:
23592
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
227 return result
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
228
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
229 remove = [lfutil.standin(f) for f in remove]
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
230 # 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
231 # function handle this.
23038
3f581bfbb268 largefiles: replace repo._isaddremove hack with a simple function parameter
Mads Kiilerich <madski@unity3d.com>
parents: 22919
diff changeset
232 if not isaddremove:
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
233 for f in remove:
31309
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31099
diff changeset
234 repo.wvfs.unlinkpath(f, ignoremissing=True)
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
235 repo[None].forget(remove)
23721
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23695
diff changeset
236
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23695
diff changeset
237 for f in remove:
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23695
diff changeset
238 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
239 False)
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23695
diff changeset
240
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23695
diff changeset
241 lfdirstate.write()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
242
17576
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17575
diff changeset
243 return result
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17575
diff changeset
244
16449
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
245 # 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
246 # appear at their right place in the manifests.
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
247 @eh.wrapfunction(webcommands, 'decodepath')
16449
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
248 def decodepath(orig, path):
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
249 return lfutil.splitstandin(path) or path
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
250
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
251 # -- Wrappers: modify existing commands --------------------------------
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
252
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
253 @eh.wrapcommand('add',
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
254 opts=[('', 'large', None, _('add as largefile')),
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
255 ('', 'normal', None, _('add as normal file')),
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
256 ('', 'lfsize', '', _('add all files above this size (in megabytes) '
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
257 'as largefiles (default: 10)'))])
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
258 def overrideadd(orig, ui, repo, *pats, **opts):
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
259 if opts.get(r'normal') and opts.get(r'large'):
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
260 raise error.Abort(_('--normal cannot be used with --large'))
23886
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
261 return orig(ui, repo, *pats, **opts)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
262
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
263 @eh.wrapfunction(cmdutil, 'add')
23886
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
264 def cmdutiladd(orig, ui, repo, matcher, prefix, explicitonly, **opts):
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
265 # The --normal flag short circuits this override
32157
09fb3d3b1b3a py3: abuse r'' to access keys in keyword arguments
Pulkit Goyal <7895pulkit@gmail.com>
parents: 31892
diff changeset
266 if opts.get(r'normal'):
23886
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
267 return orig(ui, repo, matcher, prefix, explicitonly, **opts)
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
268
23886
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
269 ladded, lbad = addlargefiles(ui, repo, False, matcher, **opts)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
270 normalmatcher = composenormalfilematcher(matcher, repo[None].manifest(),
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
271 ladded)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
272 bad = orig(ui, repo, normalmatcher, prefix, explicitonly, **opts)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
273
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
274 bad.extend(f for f in lbad)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
275 return bad
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
276
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
277 @eh.wrapfunction(cmdutil, 'remove')
37150
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
278 def cmdutilremove(orig, ui, repo, matcher, prefix, after, force, subrepos,
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
279 dryrun):
23782
304e69cb1ee9 largefiles: enable subrepo support for remove
Matt Harbison <matt_harbison@yahoo.com>
parents: 23769
diff changeset
280 normalmatcher = composenormalfilematcher(matcher, repo[None].manifest())
37150
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
281 result = orig(ui, repo, normalmatcher, prefix, after, force, subrepos,
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
282 dryrun)
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
283 return removelargefiles(ui, repo, False, matcher, dryrun, after=after,
23782
304e69cb1ee9 largefiles: enable subrepo support for remove
Matt Harbison <matt_harbison@yahoo.com>
parents: 23769
diff changeset
284 force=force) or result
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
285
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
286 @eh.wrapfunction(subrepo.hgsubrepo, 'status')
16515
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
287 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
288 try:
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
289 repo._repo.lfstatus = True
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
290 return orig(repo, rev2, **opts)
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
291 finally:
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
292 repo._repo.lfstatus = False
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
293
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
294 @eh.wrapcommand('status')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
295 def overridestatus(orig, ui, repo, *pats, **opts):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
296 try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
297 repo.lfstatus = True
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
298 return orig(ui, repo, *pats, **opts)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
299 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
300 repo.lfstatus = False
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
301
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
302 @eh.wrapfunction(subrepo.hgsubrepo, 'dirty')
33364
bf2daeddd42b subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents: 32945
diff changeset
303 def overridedirty(orig, repo, ignoreupdate=False, missing=False):
16516
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
304 try:
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
305 repo._repo.lfstatus = True
33364
bf2daeddd42b subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents: 32945
diff changeset
306 return orig(repo, ignoreupdate=ignoreupdate, missing=missing)
16516
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
307 finally:
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
308 repo._repo.lfstatus = False
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
309
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
310 @eh.wrapcommand('log')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
311 def overridelog(orig, ui, repo, *pats, **opts):
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
312 def overridematchandpats(orig, ctx, pats=(), opts=None, globbed=False,
25467
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25440
diff changeset
313 default='relpath', badfn=None):
18341
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
314 """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
315 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
316 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
317 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
318 """
26339
4afdd4283d3e largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26338
diff changeset
319 if opts is None:
4afdd4283d3e largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26338
diff changeset
320 opts = {}
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
321 matchandpats = orig(ctx, pats, opts, globbed, default, badfn=badfn)
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
322 m, p = copy.copy(matchandpats)
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
323
22170
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
324 if m.always():
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
325 # 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
326 # to add standins.
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
327 return matchandpats
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
328
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
329 pats = set(p)
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
330
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
331 def fixpats(pat, tostandin=lfutil.standin):
24813
2553ef7355ab largefiles: don't mangle filesets when fixing up the log matcher
Matt Harbison <matt_harbison@yahoo.com>
parents: 24812
diff changeset
332 if pat.startswith('set:'):
2553ef7355ab largefiles: don't mangle filesets when fixing up the log matcher
Matt Harbison <matt_harbison@yahoo.com>
parents: 24812
diff changeset
333 return pat
2553ef7355ab largefiles: don't mangle filesets when fixing up the log matcher
Matt Harbison <matt_harbison@yahoo.com>
parents: 24812
diff changeset
334
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
335 kindpat = matchmod._patsplit(pat, None)
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
336
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
337 if kindpat[0] is not None:
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
338 return kindpat[0] + ':' + tostandin(kindpat[1])
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
339 return tostandin(kindpat[1])
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
340
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
341 if m._cwd:
24208
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
342 hglf = lfutil.shortname
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
343 back = util.pconvert(m.rel(hglf)[:-len(hglf)])
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
344
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
345 def tostandin(f):
26781
1aee2ab0f902 spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents: 26607
diff changeset
346 # The file may already be a standin, so truncate the back
24208
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
347 # prefix and test before mangling it. This avoids turning
24207
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
348 # 'glob:../.hglf/foo*' into 'glob:../.hglf/../.hglf/foo*'.
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
349 if f.startswith(back) and lfutil.splitstandin(f[len(back):]):
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
350 return f
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
351
24208
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
352 # An absolute path is from outside the repo, so truncate the
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
353 # path to the root before building the standin. Otherwise cwd
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
354 # is somewhere in the repo, relative to root, and needs to be
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
355 # prepended before building the standin.
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
356 if os.path.isabs(m._cwd):
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
357 f = f[len(back):]
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
358 else:
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
359 f = m._cwd + '/' + f
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
360 return back + lfutil.standin(f)
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
361 else:
24207
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
362 def tostandin(f):
31614
d5d0e6ca62ad largefiles: replace splitstandin() by isstandin() to omit str creation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31613
diff changeset
363 if lfutil.isstandin(f):
24207
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
364 return f
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
365 return lfutil.standin(f)
32301
8a87bfc5bebb largefiles: move identical statement to after if/else
Martin von Zweigbergk <martinvonz@google.com>
parents: 32157
diff changeset
366 pats.update(fixpats(f, tostandin) for f in p)
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
367
19472
32e502b26983 largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents: 19226
diff changeset
368 for i in range(0, len(m._files)):
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
369 # Don't add '.hglf' to m.files, since that is already covered by '.'
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
370 if m._files[i] == '.':
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
371 continue
19472
32e502b26983 largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents: 19226
diff changeset
372 standin = lfutil.standin(m._files[i])
23976
344939126579 largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents: 23893
diff changeset
373 # If the "standin" is a directory, append instead of replace to
344939126579 largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents: 23893
diff changeset
374 # support naming a directory on the command line with only
344939126579 largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents: 23893
diff changeset
375 # largefiles. The original directory is kept to support normal
344939126579 largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents: 23893
diff changeset
376 # files.
31655
9d075911df49 largefiles: avoid meaningless changectx looking up
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31654
diff changeset
377 if standin in ctx:
19472
32e502b26983 largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents: 19226
diff changeset
378 m._files[i] = standin
31655
9d075911df49 largefiles: avoid meaningless changectx looking up
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31654
diff changeset
379 elif m._files[i] not in ctx and repo.wvfs.isdir(standin):
21275
c7e9fb881a5a largefiles: include largefiles when doing log on a directory (issue4241)
Mads Kiilerich <madski@unity3d.com>
parents: 21209
diff changeset
380 m._files.append(standin)
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
381
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
382 m._fileset = set(m._files)
32388
4a23cdb32968 largefiles: replace always() method, not _always field
Martin von Zweigbergk <martinvonz@google.com>
parents: 32382
diff changeset
383 m.always = lambda: False
18341
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
384 origmatchfn = m.matchfn
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
385 def lfmatchfn(f):
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
386 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
387 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
388 return True
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
389 r = origmatchfn(f)
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
390 return r
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
391 m.matchfn = lfmatchfn
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
392
32308
e8569cc131d1 py3: explicitly convert a list to bytes to pass in ui.debug
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32301
diff changeset
393 ui.debug('updated patterns: %s\n' % ', '.join(sorted(pats)))
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
394 return m, pats
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
395
22169
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
396 # 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
397 # (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
398 # (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
399 # 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
400 # case (2).
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
401 oldmatchandpats = scmutil.matchandpats
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
402 def overridemakefilematcher(orig, repo, pats, opts, badfn=None):
24534
1925769b4ff8 log: prefer 'wctx' over 'pctx' for working context
Martin von Zweigbergk <martinvonz@google.com>
parents: 24474
diff changeset
403 wctx = repo[None]
25467
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25440
diff changeset
404 match, pats = oldmatchandpats(wctx, pats, opts, badfn=badfn)
36002
f8ad57d24252 log: pass ctx to makefilematcher() and makehunksfilter() functions
Yuya Nishihara <yuya@tcha.org>
parents: 35887
diff changeset
405 return lambda ctx: match
22169
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
406
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
407 wrappedmatchandpats = extensions.wrappedfunction(scmutil, 'matchandpats',
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
408 overridematchandpats)
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
409 wrappedmakefilematcher = extensions.wrappedfunction(
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
410 logcmdutil, '_makenofollowfilematcher', overridemakefilematcher)
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
411 with wrappedmatchandpats, wrappedmakefilematcher:
17577
0f39e9355d3c largefiles: preserve the exit status of the log command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17576
diff changeset
412 return orig(ui, repo, *pats, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
413
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
414 @eh.wrapcommand('verify',
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
415 opts=[('', 'large', None,
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
416 _('verify that all largefiles in current revision exists')),
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
417 ('', 'lfa', None,
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
418 _('verify largefiles in all revisions, not just current')),
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
419 ('', 'lfc', None,
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
420 _('verify local largefile contents, not just existence'))])
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
421 def overrideverify(orig, ui, repo, *pats, **opts):
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
422 large = opts.pop(r'large', False)
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
423 all = opts.pop(r'lfa', False)
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
424 contents = opts.pop(r'lfc', False)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
425
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
426 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
427 if large or all or contents:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
428 result = result or lfcommands.verifylfiles(ui, repo, all, contents)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
429 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
430
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
431 @eh.wrapcommand('debugstate',
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
432 opts=[('', 'large', None, _('display largefiles dirstate'))])
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
433 def overridedebugstate(orig, ui, repo, *pats, **opts):
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
434 large = opts.pop(r'large', False)
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
435 if large:
21088
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
436 class fakerepo(object):
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
437 dirstate = lfutil.openlfdirstate(ui, repo)
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
438 orig(ui, fakerepo, *pats, **opts)
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
439 else:
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
440 orig(ui, repo, *pats, **opts)
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
441
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
442 # 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
443 # _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
444 # 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
445 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
446 # 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
447 # 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
448 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
449 # 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
450 # 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
451 # case further in the overridden calculateupdates function below.
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
452 @eh.wrapfunction(merge, '_checkunknownfile')
23653
0297d8469350 merge: don't overwrite untracked file at directory rename target
Martin von Zweigbergk <martinvonz@google.com>
parents: 23644
diff changeset
453 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
454 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
455 return False
23653
0297d8469350 merge: don't overwrite untracked file at directory rename target
Martin von Zweigbergk <martinvonz@google.com>
parents: 23644
diff changeset
456 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
457
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
458 # 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
459 # 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
460 #
23307
9dd0d0d61a24 largefiles: update comments to refer to the right overridden method
Martin von Zweigbergk <martinvonz@google.com>
parents: 23276
diff changeset
461 # 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
462 # 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
463 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
464 # 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
465 # 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
466 # 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
467 # 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
468 # 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
469 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
470 # 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
471 # 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
472 # 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
473 # triggers a merge action.
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
474 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
475 # 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
476 # 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
477 # 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
478 # 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
479 # presumably changed on purpose.
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
480 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
481 # 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
482 # 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
483 # will update the largefiles.
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
484 @eh.wrapfunction(merge, 'calculateupdates')
21081
ffd7b6ce46ff merge: pass merge ancestor to calculateupdates as a list
Mads Kiilerich <madski@unity3d.com>
parents: 21080
diff changeset
485 def overridecalculateupdates(origfn, repo, p1, p2, pas, branchmerge, force,
28193
19775bc34da3 largefiles: don't explicitly list optional parameters that are not used
Tony Tung <tonytung@merly.org>
parents: 28020
diff changeset
486 acceptremote, *args, **kwargs):
18605
bcf29565d89f manifestmerge: pass in branchmerge and force separately
Siddharth Agarwal <sid0@fb.com>
parents: 18600
diff changeset
487 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
488 actions, diverge, renamedelete = origfn(
28193
19775bc34da3 largefiles: don't explicitly list optional parameters that are not used
Tony Tung <tonytung@merly.org>
parents: 28020
diff changeset
489 repo, p1, p2, pas, branchmerge, force, acceptremote, *args, **kwargs)
19952
8eb99e5cec4a largefiles: don't process merge actions at all when overwriting
Mads Kiilerich <madski@unity3d.com>
parents: 19805
diff changeset
490
8eb99e5cec4a largefiles: don't process merge actions at all when overwriting
Mads Kiilerich <madski@unity3d.com>
parents: 19805
diff changeset
491 if overwrite:
23526
a5887f2da5e6 merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents: 23503
diff changeset
492 return actions, diverge, renamedelete
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
493
23529
38e55e55ae4d largefiles: rewrite merge code using dictionary with entry per file
Martin von Zweigbergk <martinvonz@google.com>
parents: 23528
diff changeset
494 # 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
495 lfiles = set()
23642
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23641
diff changeset
496 for f in actions:
27905
27f2f5c1d499 largefiles: actions will now always have a file - drop check
Mads Kiilerich <madski@unity3d.com>
parents: 27904
diff changeset
497 splitstandin = lfutil.splitstandin(f)
23641
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23635
diff changeset
498 if splitstandin in p1:
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23635
diff changeset
499 lfiles.add(splitstandin)
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23635
diff changeset
500 elif lfutil.standin(f) in p1:
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23635
diff changeset
501 lfiles.add(f)
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
502
27904
ee3123e19db9 largefiles: make prompt order deterministic
Mads Kiilerich <madski@unity3d.com>
parents: 27826
diff changeset
503 for lfile in sorted(lfiles):
23530
42ae1b1f048f largefiles: start by finding files of interest
Martin von Zweigbergk <martinvonz@google.com>
parents: 23529
diff changeset
504 standin = lfutil.standin(lfile)
23642
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23641
diff changeset
505 (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
506 (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
507 if sm in ('g', 'dc') and lm != 'r':
26962
fa2daf0e61ab merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents: 26781
diff changeset
508 if sm == 'dc':
fa2daf0e61ab merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents: 26781
diff changeset
509 f1, f2, fa, move, anc = sargs
27655
af13eaf9ab8c merge: add a new 'backup' argument to get actions
Siddharth Agarwal <sid0@fb.com>
parents: 27586
diff changeset
510 sargs = (p2[f2].flags(), False)
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
511 # 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
512 # 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
513 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
514 '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
515 '$$ &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
516 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
517 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
518 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
519 else: # keep local normal file
23642
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23641
diff changeset
520 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
521 if branchmerge:
23642
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23641
diff changeset
522 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
523 else:
23642
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23641
diff changeset
524 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
525 elif lm in ('g', 'dc') and sm != 'r':
26962
fa2daf0e61ab merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents: 26781
diff changeset
526 if lm == 'dc':
fa2daf0e61ab merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents: 26781
diff changeset
527 f1, f2, fa, move, anc = largs
27655
af13eaf9ab8c merge: add a new 'backup' argument to get actions
Siddharth Agarwal <sid0@fb.com>
parents: 27586
diff changeset
528 largs = (p2[f2].flags(), False)
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
529 # 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
530 # 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
531 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
532 '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
533 '$$ &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
534 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
535 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
536 # 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
537 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
538 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
539 else:
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
540 # "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
541 # removal of itself
23642
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23641
diff changeset
542 actions[lfile] = ('lfmr', None,
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23641
diff changeset
543 '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
544
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
545 # 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
546 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
547 else: # pick remote normal file
23642
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23641
diff changeset
548 actions[lfile] = ('g', largs, 'replaces standin')
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23641
diff changeset
549 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
550
23642
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23641
diff changeset
551 return actions, diverge, renamedelete
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
552
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
553 @eh.wrapfunction(merge, 'recordupdates')
22196
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
554 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
555 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
556 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
557 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
558 # 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
559 # 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
560 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
561 # 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
562 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
563 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
564
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
565 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
566
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
567 # 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
568 # largefiles. This will handle identical edits without prompting the user.
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
569 @eh.wrapfunction(filemerge, '_filemerge')
34122
c0ce60459d84 merge: pass wctx to premerge, filemerge
Phil Cohen <phillco@fb.com>
parents: 33499
diff changeset
570 def overridefilemerge(origfn, premerge, repo, wctx, mynode, orig, fcd, fco, fca,
26607
45a6233d5f50 filemerge: introduce a premerge flag and function
Siddharth Agarwal <sid0@fb.com>
parents: 26606
diff changeset
571 labels=None):
27050
df9b73d2d444 largefiles: fall back to the original for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents: 27034
diff changeset
572 if not lfutil.isstandin(orig) or fcd.isabsent() or fco.isabsent():
34122
c0ce60459d84 merge: pass wctx to premerge, filemerge
Phil Cohen <phillco@fb.com>
parents: 33499
diff changeset
573 return origfn(premerge, repo, wctx, mynode, orig, fcd, fco, fca,
26607
45a6233d5f50 filemerge: introduce a premerge flag and function
Siddharth Agarwal <sid0@fb.com>
parents: 26606
diff changeset
574 labels=labels)
20298
9d350fa0708e largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents: 20297
diff changeset
575
31740
a40e979b9d97 largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31735
diff changeset
576 ahash = lfutil.readasstandin(fca).lower()
a40e979b9d97 largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31735
diff changeset
577 dhash = lfutil.readasstandin(fcd).lower()
a40e979b9d97 largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31735
diff changeset
578 ohash = lfutil.readasstandin(fco).lower()
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
579 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
580 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
581 (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
582 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
583 _('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
584 '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
585 '$$ &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
586 (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
587 0) == 1)):
20298
9d350fa0708e largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents: 20297
diff changeset
588 repo.wwrite(fcd.path(), fco.data(), fco.flags())
27034
86ede9eda252 filemerge: return whether the file was deleted
Siddharth Agarwal <sid0@fb.com>
parents: 26962
diff changeset
589 return True, 0, False
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
590
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
591 @eh.wrapfunction(copiesmod, 'pathcopies')
24782
4906dc0e038c copies: add matcher parameter to copy logic
Durham Goode <durham@fb.com>
parents: 24680
diff changeset
592 def copiespathcopies(orig, ctx1, ctx2, match=None):
4906dc0e038c copies: add matcher parameter to copy logic
Durham Goode <durham@fb.com>
parents: 24680
diff changeset
593 copies = orig(ctx1, ctx2, match=match)
24230
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
594 updated = {}
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
595
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
596 for k, v in copies.iteritems():
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
597 updated[lfutil.splitstandin(k) or k] = lfutil.splitstandin(v) or v
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
598
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
599 return updated
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
600
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
601 # 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
602 # 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
603 # 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
604 # 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
605 # dirstate updated.
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
606 @eh.wrapfunction(cmdutil, 'copy')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
607 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
608 # doesn't remove largefile on rename
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
609 if len(pats) < 2:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
610 # this isn't legal, let the original function deal with it
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
611 return orig(ui, repo, pats, opts, rename)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
612
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
613 # 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
614 # 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
615 # 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
616 # match largefiles and run it again.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
617 nonormalfiles = False
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
618 nolfiles = False
21091
dd584d1a75e7 largefiles: copy override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21090
diff changeset
619 installnormalfilesmatchfn(repo[None].manifest())
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
620 try:
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
621 result = orig(ui, repo, pats, opts, rename)
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
622 except error.Abort as e:
36653
2f7a3c90c0d7 py3: use pycompat.bytestr() to convert error messages to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36400
diff changeset
623 if pycompat.bytestr(e) != _('no files to copy'):
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
624 raise e
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
625 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
626 nonormalfiles = True
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
627 result = 0
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
628 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
629 restorematchfn()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
630
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
631 # The first rename can cause our current working directory to be removed.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
632 # In that case there is nothing left to copy/rename so just quit.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
633 try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
634 repo.getcwd()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
635 except OSError:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
636 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
637
24006
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
638 def makestandin(relpath):
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
639 path = pathutil.canonpath(repo.root, repo.getcwd(), relpath)
28715
a7f7b7acf489 largefiles: replace invocation of os.path module by vfs in overrides.py
liscju <piotr.listkiewicz@gmail.com>
parents: 28394
diff changeset
640 return repo.wvfs.join(lfutil.standin(path))
24006
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
641
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
642 fullpats = scmutil.expandpats(pats)
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
643 dest = fullpats[-1]
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
644
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
645 if os.path.isdir(dest):
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
646 if not os.path.isdir(makestandin(dest)):
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
647 os.makedirs(makestandin(dest))
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
648
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
649 try:
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
650 # When we call orig below it creates the standins but we don't add
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
651 # them to the dir state until later so lock during that time.
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
652 wlock = repo.wlock()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
653
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
654 manifest = repo[None].manifest()
26341
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26340
diff changeset
655 def overridematch(ctx, pats=(), opts=None, globbed=False,
25467
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25440
diff changeset
656 default='relpath', badfn=None):
26341
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26340
diff changeset
657 if opts is None:
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26340
diff changeset
658 opts = {}
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
659 newpats = []
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
660 # The patterns were previously mangled to add the standin
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
661 # directory; we need to remove that now
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
662 for pat in pats:
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
663 if matchmod.patkind(pat) is None and lfutil.shortname in pat:
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
664 newpats.append(pat.replace(lfutil.shortname, ''))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
665 else:
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
666 newpats.append(pat)
25467
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25440
diff changeset
667 match = oldmatch(ctx, newpats, opts, globbed, default, badfn=badfn)
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
668 m = copy.copy(match)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
669 lfile = lambda f: lfutil.standin(f) in manifest
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
670 m._files = [lfutil.standin(f) for f in m._files if lfile(f)]
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
671 m._fileset = set(m._files)
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
672 origmatchfn = m.matchfn
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
673 def matchfn(f):
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
674 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
675 return (lfile is not None and
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
676 (f in manifest) and
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
677 origmatchfn(lfile) or
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
678 None)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
679 m.matchfn = matchfn
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
680 return m
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
681 oldmatch = installmatchfn(overridematch)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
682 listpats = []
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
683 for pat in pats:
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
684 if matchmod.patkind(pat) is not None:
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
685 listpats.append(pat)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
686 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
687 listpats.append(makestandin(pat))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
688
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
689 try:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
690 origcopyfile = util.copyfile
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
691 copiedfiles = []
37088
08890706366e copyfile: preserve stat info (mtime, etc.) when doing copies/renames
Kyle Lippincott <spectral@google.com>
parents: 36939
diff changeset
692 def overridecopyfile(src, dest, *args, **kwargs):
15598
a77ce45584ef largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15576
diff changeset
693 if (lfutil.shortname in src and
a77ce45584ef largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15576
diff changeset
694 dest.startswith(repo.wjoin(lfutil.shortname))):
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
695 destlfile = dest.replace(lfutil.shortname, '')
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
696 if not opts['force'] and os.path.exists(destlfile):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
697 raise IOError('',
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
698 _('destination largefile already exists'))
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
699 copiedfiles.append((src, dest))
37088
08890706366e copyfile: preserve stat info (mtime, etc.) when doing copies/renames
Kyle Lippincott <spectral@google.com>
parents: 36939
diff changeset
700 origcopyfile(src, dest, *args, **kwargs)
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
701
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
702 util.copyfile = overridecopyfile
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
703 result += orig(ui, repo, listpats, opts, rename)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
704 finally:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
705 util.copyfile = origcopyfile
21196
5c0d5b95b824 largefiles: remove directories emptied after their files are moved (issue3515)
Matt Harbison <matt_harbison@yahoo.com>
parents: 21110
diff changeset
706
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
707 lfdirstate = lfutil.openlfdirstate(ui, repo)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
708 for (src, dest) in copiedfiles:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
709 if (lfutil.shortname in src and
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
710 dest.startswith(repo.wjoin(lfutil.shortname))):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
711 srclfile = src.replace(repo.wjoin(lfutil.standin('')), '')
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
712 destlfile = dest.replace(repo.wjoin(lfutil.standin('')), '')
28715
a7f7b7acf489 largefiles: replace invocation of os.path module by vfs in overrides.py
liscju <piotr.listkiewicz@gmail.com>
parents: 28394
diff changeset
713 destlfiledir = repo.wvfs.dirname(repo.wjoin(destlfile)) or '.'
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
714 if not os.path.isdir(destlfiledir):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
715 os.makedirs(destlfiledir)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
716 if rename:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
717 os.rename(repo.wjoin(srclfile), repo.wjoin(destlfile))
17245
6e84171a61c8 largefiles: fix path handling for cp/mv (issue3516)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17232
diff changeset
718
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
719 # The file is gone, but this deletes any empty parent
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
720 # directories as a side-effect.
31309
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31099
diff changeset
721 repo.wvfs.unlinkpath(srclfile, ignoremissing=True)
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
722 lfdirstate.remove(srclfile)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
723 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
724 util.copyfile(repo.wjoin(srclfile),
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
725 repo.wjoin(destlfile))
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
726
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
727 lfdirstate.add(destlfile)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
728 lfdirstate.write()
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
729 except error.Abort as e:
36653
2f7a3c90c0d7 py3: use pycompat.bytestr() to convert error messages to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36400
diff changeset
730 if pycompat.bytestr(e) != _('no files to copy'):
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
731 raise e
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
732 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
733 nolfiles = True
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
734 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
735 restorematchfn()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
736 wlock.release()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
737
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
738 if nolfiles and nonormalfiles:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
739 raise error.Abort(_('no files to copy'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
740
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
741 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
742
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
743 # 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
744 # 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
745 # 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
746 # the necessary largefiles.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
747 #
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
748 # 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
749 # 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
750 # 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
751 # resulting standins update the largefiles.
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
752 @eh.wrapfunction(cmdutil, 'revert')
24436
66a69da9cde4 largefiles: override cmdutil.revert() instead of comands.revert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24336
diff changeset
753 def overriderevert(orig, ui, repo, ctx, parents, *pats, **opts):
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
754 # 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
755 # 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
756 # prevent others from changing them in their incorrect state.
27823
37552634a7b9 with: use context manager for wlock in overriderevert
Bryan O'Sullivan <bryano@fb.com>
parents: 27822
diff changeset
757 with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
758 lfdirstate = lfutil.openlfdirstate(ui, repo)
23039
1350b9170089 largefiles: remove confusing rev parameter for lfdirstatestatus
Mads Kiilerich <madski@unity3d.com>
parents: 23038
diff changeset
759 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
760 lfdirstate.write()
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
761 for lfile in s.modified:
31659
0eec36112e58 largefiles: add lfile argument to updatestandin() for efficiency (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31656
diff changeset
762 lfutil.updatestandin(repo, lfile, lfutil.standin(lfile))
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
763 for lfile in s.deleted:
31618
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
764 fstandin = lfutil.standin(lfile)
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
765 if (repo.wvfs.exists(fstandin)):
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
766 repo.wvfs.unlink(fstandin)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
767
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
768 oldstandins = lfutil.getstandinsstate(repo)
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
769
26343
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26342
diff changeset
770 def overridematch(mctx, pats=(), opts=None, globbed=False,
25467
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25440
diff changeset
771 default='relpath', badfn=None):
26343
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26342
diff changeset
772 if opts is None:
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26342
diff changeset
773 opts = {}
25467
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25440
diff changeset
774 match = oldmatch(mctx, pats, opts, globbed, default, badfn=badfn)
21095
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
775 m = copy.copy(match)
24133
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
776
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
777 # revert supports recursing into subrepos, and though largefiles
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
778 # currently doesn't work correctly in that case, this match is
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
779 # called, so the lfdirstate above may not be the correct one for
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
780 # this invocation of match.
24436
66a69da9cde4 largefiles: override cmdutil.revert() instead of comands.revert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24336
diff changeset
781 lfdirstate = lfutil.openlfdirstate(mctx.repo().ui, mctx.repo(),
66a69da9cde4 largefiles: override cmdutil.revert() instead of comands.revert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24336
diff changeset
782 False)
24133
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
783
31654
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31653
diff changeset
784 wctx = repo[None]
31656
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
785 matchfiles = []
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
786 for f in m._files:
24437
2703eb73a3af largefiles: extract and reuse 'standin' variable in overriderevert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24436
diff changeset
787 standin = lfutil.standin(f)
24438
5b85a5bc5bbb revert: evaluate filesets against working directory (issue4497)
Martin von Zweigbergk <martinvonz@google.com>
parents: 24437
diff changeset
788 if standin in ctx or standin in mctx:
31656
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
789 matchfiles.append(standin)
31654
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31653
diff changeset
790 elif standin in wctx or lfdirstate[f] == 'r':
31656
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
791 continue
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
792 else:
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
793 matchfiles.append(f)
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
794 m._files = matchfiles
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
795 m._fileset = set(m._files)
21095
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
796 origmatchfn = m.matchfn
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
797 def matchfn(f):
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
798 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
799 if lfile is not None:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
800 return (origmatchfn(lfile) and
24438
5b85a5bc5bbb revert: evaluate filesets against working directory (issue4497)
Martin von Zweigbergk <martinvonz@google.com>
parents: 24437
diff changeset
801 (f in ctx or f in mctx))
21095
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
802 return origmatchfn(f)
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
803 m.matchfn = matchfn
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
804 return m
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
805 oldmatch = installmatchfn(overridematch)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
806 try:
24436
66a69da9cde4 largefiles: override cmdutil.revert() instead of comands.revert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24336
diff changeset
807 orig(ui, repo, ctx, parents, *pats, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
808 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
809 restorematchfn()
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
810
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
811 newstandins = lfutil.getstandinsstate(repo)
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
812 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
813 # 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
814 # 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
815 # 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
816 # '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
817 # of target (standin) file.
0cb34b3991f8 largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21884
diff changeset
818 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
819 normallookup=True)
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
820
23183
51c9196a6bd0 largefiles: remove meaningless code path for "hg pull --rebase"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23145
diff changeset
821 # 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
822 # largefiles updated remotely
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
823 @eh.wrapcommand('pull',
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
824 opts=[('', 'all-largefiles', None,
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
825 _('download all pulled versions of largefiles (DEPRECATED)')),
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
826 ('', 'lfrev', [],
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
827 _('download largefiles for these revisions'), _('REV'))])
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
828 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
829 revsprepull = len(repo)
18977
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
830 if not source:
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
831 source = 'default'
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
832 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
833 result = orig(ui, repo, source, **opts)
18977
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
834 revspostpull = len(repo)
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
835 lfrevs = opts.get(r'lfrev', [])
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
836 if opts.get(r'all_largefiles'):
18981
83ead8cb0ff2 largefiles: implement pull --all-largefiles as a special case of --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18980
diff changeset
837 lfrevs.append('pulled()')
18978
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
838 if lfrevs and revspostpull > revsprepull:
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
839 numcached = 0
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
840 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
841 try:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
842 for rev in scmutil.revrange(repo, lfrevs):
36736
5c72b52d3dd0 largefiles: use %d instead of %s to process ints
Augie Fackler <augie@google.com>
parents: 36653
diff changeset
843 ui.note(_('pulling largefiles for revision %d\n') % rev)
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
844 (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
845 numcached += len(cached)
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
846 finally:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
847 del repo.firstpulled
18978
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
848 ui.status(_("%d largefiles cached\n") % numcached)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
849 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
850
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
851 @eh.wrapcommand('push',
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
852 opts=[('', 'lfrev', [],
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
853 _('upload largefiles for these revisions'), _('REV'))])
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
854 def overridepush(orig, ui, repo, *args, **kwargs):
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
855 """Override push command and store --lfrev parameters in opargs"""
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
856 lfrevs = kwargs.pop(r'lfrev', None)
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
857 if lfrevs:
36400
7b86aa31b004 py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36315
diff changeset
858 opargs = kwargs.setdefault(r'opargs', {})
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
859 opargs['lfrevs'] = scmutil.revrange(repo, lfrevs)
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
860 return orig(ui, repo, *args, **kwargs)
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
861
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
862 @eh.wrapfunction(exchange, 'pushoperation')
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
863 def exchangepushoperation(orig, *args, **kwargs):
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
864 """Override pushoperation constructor and store lfrevs parameter"""
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
865 lfrevs = kwargs.pop(r'lfrevs', None)
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
866 pushop = orig(*args, **kwargs)
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
867 pushop.lfrevs = lfrevs
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
868 return pushop
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
869
41067
f2601cbce209 largefiles: port revset registration to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41062
diff changeset
870 @eh.revsetpredicate('pulled()')
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
871 def pulledrevsetsymbol(repo, subset, x):
27586
42910f9fffeb revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27345
diff changeset
872 """Changesets that just has been pulled.
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
873
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
874 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
875
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
876 .. container:: verbose
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
877
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
878 Some examples:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
879
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
880 - 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
881
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
882 hg pull -lfrev "pulled()"
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
883
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
884 - 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
885
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
886 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
887
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
888 """
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
889
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
890 try:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
891 firstpulled = repo.firstpulled
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
892 except AttributeError:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
893 raise error.Abort(_("pulled() only available in --lfrev"))
31023
aea06029919e revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents: 30215
diff changeset
894 return smartset.baseset([r for r in subset if r >= firstpulled])
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
895
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
896 @eh.wrapcommand('clone',
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
897 opts=[('', 'all-largefiles', None,
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
898 _('download all versions of all largefiles'))])
16644
98a9266db803 largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16642
diff changeset
899 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
900 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
901 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
902 d = hg.defaultdest(source)
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
903 if opts.get(r'all_largefiles') and not hg.islocal(d):
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
904 raise error.Abort(_(
21096
a45ed365904a i18n: fix "% inside _()" problem
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21095
diff changeset
905 '--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
906 d)
17601
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
907
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
908 return orig(ui, source, dest, **opts)
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
909
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
910 @eh.wrapfunction(hg, 'clone')
17601
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
911 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
912 result = orig(ui, opts, *args, **kwargs)
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
913
17824
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
914 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
915 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
916 repo = destrepo.local()
56136786000f largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents: 17598
diff changeset
917
24812
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
918 # When cloning to a remote repo (like through SSH), no repo is available
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
919 # from the peer. Therefore the largefiles can't be downloaded and the
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
920 # hgrc can't be updated.
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
921 if not repo:
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
922 return result
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
923
17599
56136786000f largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents: 17598
diff changeset
924 # 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
925 # 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
926 # this option, so attempt whether or not this is a largefile repo.
37755
886754323bed largefiles: opts appears to already be bytes in this instance
Augie Fackler <augie@google.com>
parents: 37269
diff changeset
927 if opts.get('all_largefiles'):
17824
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
928 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
929
17824
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
930 if missing != 0:
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
931 return None
17601
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
932
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
933 return result
16644
98a9266db803 largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16642
diff changeset
934
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
935 @eh.wrapcommand('rebase', extension='rebase')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
936 def overriderebase(orig, ui, repo, **opts):
24158
d414c28db84d largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23976
diff changeset
937 if not util.safehasattr(repo, '_largefilesenabled'):
d414c28db84d largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23976
diff changeset
938 return orig(ui, repo, **opts)
d414c28db84d largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23976
diff changeset
939
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
940 resuming = opts.get(r'continue')
23187
f726b05ecfe6 largefiles: update standins only at the 1st commit of "hg rebase --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23183
diff changeset
941 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
942 repo._lfstatuswriters.append(lambda *msg, **opts: None)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
943 try:
17578
40c988f108d0 largefiles: preserve the exit status of the rebase command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17577
diff changeset
944 return orig(ui, repo, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
945 finally:
23190
383ff455cab8 largefiles: avoid printing messages while rebasing by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23189
diff changeset
946 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
947 repo._lfcommithooks.pop()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
948
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
949 @eh.wrapcommand('archive')
25811
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
950 def overridearchivecmd(orig, ui, repo, dest, **opts):
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
951 repo.unfiltered().lfstatus = True
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
952
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
953 try:
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
954 return orig(ui, repo.unfiltered(), dest, **opts)
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
955 finally:
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
956 repo.unfiltered().lfstatus = False
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
957
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
958 @eh.wrapfunction(webcommands, 'archive')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36736
diff changeset
959 def hgwebarchive(orig, web):
26417
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
960 web.repo.lfstatus = True
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
961
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
962 try:
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36736
diff changeset
963 return orig(web)
26417
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
964 finally:
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
965 web.repo.lfstatus = False
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
966
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
967 @eh.wrapfunction(archival, 'archive')
40407
3d76a8e627a6 archive: change "matcnfn" argument to a real matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 39854
diff changeset
968 def overridearchive(orig, repo, dest, node, kind, decode=True, match=None,
24172
e0f06228bb66 archive: change the default prefix to '' from None
Matt Harbison <matt_harbison@yahoo.com>
parents: 24167
diff changeset
969 prefix='', mtime=None, subrepos=None):
26417
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
970 # For some reason setting repo.lfstatus in hgwebarchive only changes the
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
971 # unfiltered repo's attr, so check that as well.
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
972 if not repo.lfstatus and not repo.unfiltered().lfstatus:
40407
3d76a8e627a6 archive: change "matcnfn" argument to a real matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 39854
diff changeset
973 return orig(repo, dest, node, kind, decode, match, prefix, mtime,
25811
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
974 subrepos)
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
975
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
976 # 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
977 # largefile caches, neither of which are modified.
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
978 if node is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
979 lfcommands.cachelfiles(repo.ui, repo, node)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
980
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
981 if kind not in archival.archivers:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
982 raise error.Abort(_("unknown archive type '%s'") % kind)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
983
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
984 ctx = repo[node]
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
985
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
986 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
987 if prefix:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
988 raise error.Abort(
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
989 _('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
990 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
991 prefix = archival.tidyprefix(dest, kind, prefix)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
992
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
993 def write(name, mode, islink, getdata):
40407
3d76a8e627a6 archive: change "matcnfn" argument to a real matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 39854
diff changeset
994 if match and not match(name):
15224
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
995 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
996 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
997 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
998 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
999 archiver.addfile(prefix + name, mode, islink, data)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1000
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
1001 archiver = archival.archivers[kind](dest, mtime or ctx.date()[0])
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1002
33499
0407a51b9d8c codemod: register core configitems using a script
Jun Wu <quark@fb.com>
parents: 33364
diff changeset
1003 if repo.ui.configbool("ui", "archivemeta"):
25658
e93036747902 global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25601
diff changeset
1004 write('.hg_archival.txt', 0o644, False,
24680
0974d3a0be29 largefiles: use common function to build content of .hg_archival.txt
Yuya Nishihara <yuya@tcha.org>
parents: 24670
diff changeset
1005 lambda: archival.buildmetadata(ctx))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1006
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1007 for f in ctx:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1008 ff = ctx.flags(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1009 getdata = ctx[f].data
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1010 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1011 if lfile is not None:
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1012 if node is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1013 path = lfutil.findfile(repo, getdata().strip())
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1014
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1015 if path is None:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
1016 raise error.Abort(
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1017 _('largefile %s not found in repo store or system cache')
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1018 % lfile)
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1019 else:
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1020 path = lfile
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1021
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1022 f = lfile
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1023
27772
00bd72629a45 largefiles: use util.readfile in overrides
Bryan O'Sullivan <bryano@fb.com>
parents: 27655
diff changeset
1024 getdata = lambda: util.readfile(path)
25658
e93036747902 global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25601
diff changeset
1025 write(f, 'x' in ff and 0o755 or 0o644, 'l' in ff, getdata)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1026
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1027 if subrepos:
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18341
diff changeset
1028 for subpath in sorted(ctx.substate):
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1029 sub = ctx.workingsub(subpath)
40407
3d76a8e627a6 archive: change "matcnfn" argument to a real matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 39854
diff changeset
1030 submatch = matchmod.subdirmatcher(subpath, match)
25811
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
1031 sub._repo.lfstatus = True
23575
a2f139d25845 subrepo: drop the 'ui' parameter to archive()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23543
diff changeset
1032 sub.archive(archiver, prefix, submatch)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1033
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1034 archiver.done()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1035
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
1036 @eh.wrapfunction(subrepo.hgsubrepo, 'archive')
31099
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31023
diff changeset
1037 def hgsubrepoarchive(orig, repo, archiver, prefix, match=None, decode=True):
32827
d3ab31bf9c0e largefiles: avoid a crash when archiving a subrepo with largefiles disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 31892
diff changeset
1038 lfenabled = util.safehasattr(repo._repo, '_largefilesenabled')
d3ab31bf9c0e largefiles: avoid a crash when archiving a subrepo with largefiles disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 31892
diff changeset
1039 if not lfenabled or not repo._repo.lfstatus:
31099
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31023
diff changeset
1040 return orig(repo, archiver, prefix, match, decode)
25811
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
1041
17695
75f25bd4c7d4 largefiles: download missing subrepo revs when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 17658
diff changeset
1042 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
1043 rev = repo._state[1]
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1044 ctx = repo._repo[rev]
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1045
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1046 if ctx.node() is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1047 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
1048
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1049 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
1050 # 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
1051 # 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
1052 if match and not match(f):
1894dac619de subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 17107
diff changeset
1053 return
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1054 data = getdata()
31099
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31023
diff changeset
1055 if decode:
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31023
diff changeset
1056 data = repo._repo.wwritedata(name, data)
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1057
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1058 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
1059
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1060 for f in ctx:
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1061 ff = ctx.flags(f)
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1062 getdata = ctx[f].data
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1063 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1064 if lfile is not None:
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1065 if ctx.node() is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1066 path = lfutil.findfile(repo._repo, getdata().strip())
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1067
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1068 if path is None:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
1069 raise error.Abort(
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1070 _('largefile %s not found in repo store or system cache')
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1071 % lfile)
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1072 else:
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1073 path = lfile
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1074
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1075 f = lfile
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1076
27772
00bd72629a45 largefiles: use util.readfile in overrides
Bryan O'Sullivan <bryano@fb.com>
parents: 27655
diff changeset
1077 getdata = lambda: util.readfile(os.path.join(prefix, path))
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1078
25658
e93036747902 global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25601
diff changeset
1079 write(f, 'x' in ff and 0o755 or 0o644, 'l' in ff, getdata)
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1080
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18341
diff changeset
1081 for subpath in sorted(ctx.substate):
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1082 sub = ctx.workingsub(subpath)
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
1083 submatch = matchmod.subdirmatcher(subpath, match)
25811
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
1084 sub._repo.lfstatus = True
31099
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31023
diff changeset
1085 sub.archive(archiver, prefix + repo._path + '/', submatch, decode)
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1086
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
1087 # 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
1088 # 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
1089 # 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
1090 # largefiles were changed. This is used by bisect, backout and fetch.
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
1091 @eh.wrapfunction(cmdutil, 'bailifchanged')
24472
1bf71faf042e cmdutil: allow bailifchanged to ignore merging in progress
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24438
diff changeset
1092 def overridebailifchanged(orig, repo, *args, **kwargs):
1bf71faf042e cmdutil: allow bailifchanged to ignore merging in progress
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24438
diff changeset
1093 orig(repo, *args, **kwargs)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1094 repo.lfstatus = True
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1095 s = repo.status()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1096 repo.lfstatus = False
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1097 if s.modified or s.added or s.removed or s.deleted:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
1098 raise error.Abort(_('uncommitted changes'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1099
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
1100 @eh.wrapfunction(cmdutil, 'postcommitstatus')
27944
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 27905
diff changeset
1101 def postcommitstatus(orig, repo, *args, **kwargs):
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 27905
diff changeset
1102 repo.lfstatus = True
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 27905
diff changeset
1103 try:
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 27905
diff changeset
1104 return orig(repo, *args, **kwargs)
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 27905
diff changeset
1105 finally:
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 27905
diff changeset
1106 repo.lfstatus = False
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 27905
diff changeset
1107
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
1108 @eh.wrapfunction(cmdutil, 'forget')
37778
f10cb49951e1 forget: rename --confirm to --interactive
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37756
diff changeset
1109 def cmdutilforget(orig, ui, repo, match, prefix, explicitonly, dryrun,
f10cb49951e1 forget: rename --confirm to --interactive
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37756
diff changeset
1110 interactive):
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
1111 normalmatcher = composenormalfilematcher(match, repo[None].manifest())
37756
e7bf5a73e4e1 forget: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37755
diff changeset
1112 bad, forgot = orig(ui, repo, normalmatcher, prefix, explicitonly, dryrun,
37778
f10cb49951e1 forget: rename --confirm to --interactive
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37756
diff changeset
1113 interactive)
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
1114 m = composelargefilematcher(match, repo[None].manifest())
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1115
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1116 try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1117 repo.lfstatus = True
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1118 s = repo.status(match=m, clean=True)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1119 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1120 repo.lfstatus = False
31654
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31653
diff changeset
1121 manifest = repo[None].manifest()
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1122 forget = sorted(s.modified + s.added + s.deleted + s.clean)
31654
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31653
diff changeset
1123 forget = [f for f in forget if lfutil.standin(f) in manifest]
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1124
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1125 for f in forget:
31618
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
1126 fstandin = lfutil.standin(f)
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
1127 if fstandin not in repo.dirstate and not repo.wvfs.isdir(fstandin):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1128 ui.warn(_('not removing %s: file is already untracked\n')
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1129 % m.rel(f))
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
1130 bad.append(f)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1131
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1132 for f in forget:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1133 if ui.verbose or not m.exact(f):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1134 ui.status(_('removing %s\n') % m.rel(f))
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1135
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1136 # 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
1137 # repository and we could race in-between.
27824
0e55e93b50b5 with: use context manager for wlock in cmdutilforget
Bryan O'Sullivan <bryano@fb.com>
parents: 27823
diff changeset
1138 with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1139 lfdirstate = lfutil.openlfdirstate(ui, repo)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1140 for f in forget:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1141 if lfdirstate[f] == 'a':
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1142 lfdirstate.drop(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1143 else:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1144 lfdirstate.remove(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1145 lfdirstate.write()
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
1146 standins = [lfutil.standin(f) for f in forget]
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
1147 for f in standins:
31309
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31099
diff changeset
1148 repo.wvfs.unlinkpath(f, ignoremissing=True)
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
1149 rejected = repo[None].forget(standins)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1150
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
1151 bad.extend(f for f in rejected if f in m.files())
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
1152 forgot.extend(f for f in forget if f not in rejected)
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
1153 return bad, forgot
17579
cbacb5a813dd largefiles: preserve the exit status of the forget command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17578
diff changeset
1154
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1155 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
1156 """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
1157 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
1158
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1159 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
1160
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
1161 '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
1162 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
1163 """
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
1164 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
1165 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
1166 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
1167 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
1168 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
1169 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
1170 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
1171 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
1172 if lfhashes:
29355
85868ecf2c0d largefiles: make storefactory._openstore public
liscju <piotr.listkiewicz@gmail.com>
parents: 29318
diff changeset
1173 lfexists = storefactory.openstore(repo, other).exists(lfhashes)
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1174 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
1175 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
1176 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
1177
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
1178 def outgoinghook(ui, repo, other, opts, missing):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1179 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
1180 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
1181 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
1182 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
1183 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
1184 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
1185 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
1186 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
1187 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
1188 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
1189 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
1190 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
1191 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
1192 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
1193 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
1194 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
1195 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
1196 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
1197 pass
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1198 _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
1199
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
1200 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
1201 ui.status(_('largefiles: no files to upload\n'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1202 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
1203 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
1204 % (len(lfhashes)))
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
1205 for file in sorted(toupload):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1206 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
1207 showhashes(file)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1208 ui.status('\n')
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1209
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1210 @eh.wrapcommand('outgoing',
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1211 opts=[('', 'large', None, _('display outgoing largefiles'))])
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1212 def _outgoingcmd(orig, *args, **kwargs):
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1213 # Nothing to do here other than add the extra help option- the hook above
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1214 # processes it.
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1215 return orig(*args, **kwargs)
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1216
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1217 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
1218 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
1219 if changes is None:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1220 if largeopt:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1221 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
1222 else:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1223 return (False, False)
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1224 elif largeopt:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1225 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
1226 if peer is None:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1227 # 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
1228 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
1229 return
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1230
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1231 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
1232 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
1233 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
1234 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
1235 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
1236 _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
1237
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1238 if not toupload:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1239 # 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
1240 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
1241 else:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1242 # 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
1243 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
1244 % (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
1245
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1246 @eh.wrapcommand('summary',
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1247 opts=[('', 'large', None, _('display outgoing largefiles'))])
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1248 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
1249 try:
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1250 repo.lfstatus = True
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1251 orig(ui, repo, *pats, **opts)
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1252 finally:
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1253 repo.lfstatus = False
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1254
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
1255 @eh.wrapfunction(scmutil, 'addremove')
37269
14cd5290c4e6 addremove: remove dry_run, similarity from scmutil.addremove (API)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37150
diff changeset
1256 def scmutiladdremove(orig, repo, matcher, prefix, opts=None):
26344
cd9cc7f30427 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26343
diff changeset
1257 if opts is None:
cd9cc7f30427 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26343
diff changeset
1258 opts = {}
16636
b371056ae353 largefiles: follow normal codepath for addremove if non-largefiles repo (issue3249)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16516
diff changeset
1259 if not lfutil.islfilesrepo(repo):
37269
14cd5290c4e6 addremove: remove dry_run, similarity from scmutil.addremove (API)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37150
diff changeset
1260 return orig(repo, matcher, prefix, opts)
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1261 # 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
1262 lfdirstate = lfutil.openlfdirstate(repo.ui, repo)
34344
ac0cd81e2f83 dirstate: use keyword arguments to clarify status()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents: 34303
diff changeset
1263 unsure, s = lfdirstate.status(matchmod.always(repo.root, repo.getcwd()),
ac0cd81e2f83 dirstate: use keyword arguments to clarify status()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents: 34303
diff changeset
1264 subrepos=[], ignored=False, clean=False,
ac0cd81e2f83 dirstate: use keyword arguments to clarify status()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents: 34303
diff changeset
1265 unknown=False)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1266
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1267 # 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
1268 # 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
1269 # 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
1270 # confused state later.
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1271 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
1272 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
1273
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
1274 # 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
1275 # 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
1276 # 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
1277 # 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
1278 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
1279 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
1280
37150
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
1281 removelargefiles(repo.ui, repo, True, m, opts.get('dry_run'),
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
1282 **pycompat.strkwargs(opts))
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1283 # 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
1284 # largefiles will be
36315
398e96f77aa3 largefiles: give some **opts some strkwargs love
Augie Fackler <augie@google.com>
parents: 36311
diff changeset
1285 added, bad = addlargefiles(repo.ui, repo, True, matcher,
398e96f77aa3 largefiles: give some **opts some strkwargs love
Augie Fackler <augie@google.com>
parents: 36311
diff changeset
1286 **pycompat.strkwargs(opts))
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1287 # 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
1288 # 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
1289 # largefiles by passing a matcher that will ignore them.
23769
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
1290 matcher = composenormalfilematcher(matcher, repo[None].manifest(), added)
37269
14cd5290c4e6 addremove: remove dry_run, similarity from scmutil.addremove (API)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37150
diff changeset
1291 return orig(repo, matcher, prefix, opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1292
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
1293 # Calling purge with --all will cause the largefiles to be deleted.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1294 # Override repo.status to prevent this from happening.
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1295 @eh.wrapcommand('purge', extension='purge')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1296 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
1297 # 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
1298 # 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
1299 # 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
1300 # 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
1301 # 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
1302 # 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
1303 #
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23634
diff changeset
1304 # 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
1305 # 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
1306 repo = repo.unfiltered()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1307 oldstatus = repo.status
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1308 def overridestatus(node1='.', node2=None, match=None, ignored=False,
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1309 clean=False, unknown=False, listsubrepos=False):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1310 r = oldstatus(node1, node2, match, ignored, clean, unknown,
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1311 listsubrepos)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1312 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
1313 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
1314 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
1315 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
1316 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
1317 repo.status = overridestatus
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1318 orig(ui, repo, *dirs, **opts)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1319 repo.status = oldstatus
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
1320
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1321 @eh.wrapcommand('rollback')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1322 def overriderollback(orig, ui, repo, **opts):
27825
4692571df9ee with: use context manager for wlock in overridepurge
Bryan O'Sullivan <bryano@fb.com>
parents: 27824
diff changeset
1323 with repo.wlock():
22283
cb556ea76dcd largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22196
diff changeset
1324 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
1325 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
1326 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
1327 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
1328 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
1329 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
1330 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
1331
22285
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1332 pctx = repo['.']
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1333 for f in repo.dirstate:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1334 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
1335 orphans.discard(f)
22285
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1336 if repo.dirstate[f] == 'r':
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1337 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
1338 elif f in pctx:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1339 fctx = pctx[f]
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1340 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
1341 else:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1342 # 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
1343 # '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
1344 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
1345 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
1346 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
1347
15794
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15792
diff changeset
1348 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
1349 orphans = set(lfdirstate)
15794
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15792
diff changeset
1350 lfiles = lfutil.listlfiles(repo)
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15792
diff changeset
1351 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
1352 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
1353 orphans.discard(file)
7d1eac06ab2b largefiles: drop orphan entries from lfdristat at "hg rollback"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22096
diff changeset
1354 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
1355 lfdirstate.drop(lfile)
15794
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15792
diff changeset
1356 lfdirstate.write()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1357 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
1358
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1359 @eh.wrapcommand('transplant', extension='transplant')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1360 def overridetransplant(orig, ui, repo, *revs, **opts):
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
1361 resuming = opts.get(r'continue')
23274
0ec2e124fcc0 largefiles: update standins only at the 1st commit of "transplant --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23273
diff changeset
1362 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
1363 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
1364 try:
bf502ccc46d7 largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15967
diff changeset
1365 result = orig(ui, repo, *revs, **opts)
bf502ccc46d7 largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15967
diff changeset
1366 finally:
23275
fae708cb32d1 largefiles: avoid printing messages while transplanting by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23274
diff changeset
1367 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
1368 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
1369 return result
16439
290850e7aa43 largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16248
diff changeset
1370
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1371 @eh.wrapcommand('cat')
16439
290850e7aa43 largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16248
diff changeset
1372 def overridecat(orig, ui, repo, file1, *pats, **opts):
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
1373 opts = pycompat.byteskwargs(opts)
17269
acfab0754584 largefiles: support revsets for cat
Matt Harbison <matt_harbison@yahoo.com>
parents: 17268
diff changeset
1374 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
1375 err = 1
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1376 notbad = set()
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1377 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
1378 origmatchfn = m.matchfn
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1379 def lfmatchfn(f):
21087
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
1380 if origmatchfn(f):
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
1381 return True
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1382 lf = lfutil.splitstandin(f)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1383 if lf is None:
21087
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
1384 return False
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1385 notbad.add(lf)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1386 return origmatchfn(lf)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1387 m.matchfn = lfmatchfn
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1388 origbadfn = m.bad
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1389 def lfbadfn(f, msg):
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1390 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
1391 origbadfn(f, msg)
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1392 m.bad = lfbadfn
24670
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1393
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1394 origvisitdirfn = m.visitdir
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1395 def lfvisitdirfn(dir):
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1396 if dir == lfutil.shortname:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1397 return True
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1398 ret = origvisitdirfn(dir)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1399 if ret:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1400 return ret
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1401 lf = lfutil.splitstandin(dir)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1402 if lf is None:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1403 return False
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1404 return origvisitdirfn(lf)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1405 m.visitdir = lfvisitdirfn
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1406
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1407 for f in ctx.walk(m):
36205
976e1cfb2f64 cmdutil: pass ctx to makefileobj() in place of repo/node pair (API)
Yuya Nishihara <yuya@tcha.org>
parents: 36002
diff changeset
1408 with cmdutil.makefileobj(ctx, opts.get('output'), pathname=f) as fp:
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1409 lf = lfutil.splitstandin(f)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1410 if lf is None or origmatchfn(f):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1411 # duplicating unreachable code from commands.cat
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1412 data = ctx[f].data()
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1413 if opts.get('decode'):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1414 data = repo.wwritedata(f, data)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1415 fp.write(data)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1416 else:
31735
3e37b479ce2f largefiles: replace readstandin() by readasstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31659
diff changeset
1417 hash = lfutil.readasstandin(ctx[f])
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1418 if not lfutil.inusercache(repo.ui, hash):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1419 store = storefactory.openstore(repo)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1420 success, missing = store.get([(lf, hash)])
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1421 if len(success) != 1:
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1422 raise error.Abort(
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1423 _('largefile %s is not in cache and could not be '
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1424 'downloaded') % lf)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1425 path = lfutil.usercachepath(repo.ui, hash)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1426 with open(path, "rb") as fpin:
30181
7356e6b1f5b8 util: increase filechunkiter size to 128k
Mads Kiilerich <madski@unity3d.com>
parents: 30142
diff changeset
1427 for chunk in util.filechunkiter(fpin):
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1428 fp.write(chunk)
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1429 err = 0
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1430 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
1431
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
1432 @eh.wrapfunction(merge, 'update')
27344
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27050
diff changeset
1433 def mergeupdate(orig, repo, node, branchmerge, force,
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1434 *args, **kwargs):
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
1435 matcher = kwargs.get(r'matcher', None)
27344
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27050
diff changeset
1436 # note if this is a partial update
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27050
diff changeset
1437 partial = matcher and not matcher.always()
27826
f087b7095381 with: use context manager for wlock in mergeupdate
Bryan O'Sullivan <bryano@fb.com>
parents: 27825
diff changeset
1438 with repo.wlock():
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1439 # branch | | |
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1440 # 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
1441 # -------+-------+---------+--------------
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1442 # 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
1443 # 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
1444 # 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
1445 # 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
1446 # 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
1447 # 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
1448 # 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
1449 # 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
1450 #
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1451 # (*) 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
1452 # (*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
1453
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1454 lfdirstate = lfutil.openlfdirstate(repo.ui, repo)
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
1455 unsure, s = lfdirstate.status(matchmod.always(repo.root,
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1456 repo.getcwd()),
34344
ac0cd81e2f83 dirstate: use keyword arguments to clarify status()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents: 34303
diff changeset
1457 subrepos=[], ignored=False,
ac0cd81e2f83 dirstate: use keyword arguments to clarify status()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents: 34303
diff changeset
1458 clean=True, unknown=False)
30190
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1459 oldclean = set(s.clean)
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1460 pctx = repo['.']
31653
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
1461 dctx = repo[node]
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1462 for lfile in unsure + s.modified:
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1463 lfileabs = repo.wvfs.join(lfile)
28715
a7f7b7acf489 largefiles: replace invocation of os.path module by vfs in overrides.py
liscju <piotr.listkiewicz@gmail.com>
parents: 28394
diff changeset
1464 if not repo.wvfs.exists(lfileabs):
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1465 continue
31617
1f6c932862e5 largefiles: replace hashrepofile by hashfile (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31616
diff changeset
1466 lfhash = lfutil.hashfile(lfileabs)
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1467 standin = lfutil.standin(lfile)
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1468 lfutil.writestandin(repo, standin, lfhash,
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1469 lfutil.getexecutable(lfileabs))
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1470 if (standin in pctx and
31735
3e37b479ce2f largefiles: replace readstandin() by readasstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31659
diff changeset
1471 lfhash == lfutil.readasstandin(pctx[standin])):
30190
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1472 oldclean.add(lfile)
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1473 for lfile in s.added:
31653
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
1474 fstandin = lfutil.standin(lfile)
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
1475 if fstandin not in dctx:
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
1476 # in this case, content of standin file is meaningless
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
1477 # (in dctx, lfile is unknown, or normal file)
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
1478 continue
31659
0eec36112e58 largefiles: add lfile argument to updatestandin() for efficiency (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31656
diff changeset
1479 lfutil.updatestandin(repo, lfile, fstandin)
30190
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1480 # mark all clean largefiles as dirty, just in case the update gets
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1481 # interrupted before largefiles and lfdirstate are synchronized
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1482 for lfile in oldclean:
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1483 lfdirstate.normallookup(lfile)
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1484 lfdirstate.write()
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1485
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1486 oldstandins = lfutil.getstandinsstate(repo)
34303
575097b4dce0 largefiles: force an on-disk merge
Phil Cohen <phillco@fb.com>
parents: 34122
diff changeset
1487 # Make sure the merge runs on disk, not in-memory. largefiles is not a
575097b4dce0 largefiles: force an on-disk merge
Phil Cohen <phillco@fb.com>
parents: 34122
diff changeset
1488 # good candidate for in-memory merge (large files, custom dirstate,
575097b4dce0 largefiles: force an on-disk merge
Phil Cohen <phillco@fb.com>
parents: 34122
diff changeset
1489 # matcher usage).
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
1490 kwargs[r'wc'] = repo[None]
27344
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27050
diff changeset
1491 result = orig(repo, node, branchmerge, force, *args, **kwargs)
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1492
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1493 newstandins = lfutil.getstandinsstate(repo)
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1494 filelist = lfutil.getlfilestoupdate(oldstandins, newstandins)
30190
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1495
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1496 # to avoid leaving all largefiles as dirty and thus rehash them, mark
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1497 # all the ones that didn't change as clean
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1498 for lfile in oldclean.difference(filelist):
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1499 lfdirstate.normal(lfile)
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1500 lfdirstate.write()
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1501
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1502 if branchmerge or force or partial:
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1503 filelist.extend(s.deleted + s.removed)
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1504
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1505 lfcommands.updatelfiles(repo.ui, repo, filelist=filelist,
24788
b8c3a0994b37 largefiles: always consider updatelfiles 'checked' parameter set
Mads Kiilerich <madski@unity3d.com>
parents: 24787
diff changeset
1506 normallookup=partial)
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1507
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1508 return result
22289
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1509
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
1510 @eh.wrapfunction(scmutil, 'marktouched')
22289
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1511 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
1512 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
1513
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1514 filelist = []
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1515 for f in files:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1516 lf = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1517 if lf is not None:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1518 filelist.append(lf)
22289
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1519 if filelist:
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1520 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
1521 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
1522
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1523 return result
35303
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
1524
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
1525 @eh.wrapfunction(upgrade, 'preservedrequirements')
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
1526 @eh.wrapfunction(upgrade, 'supporteddestrequirements')
35303
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
1527 def upgraderequirements(orig, repo):
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
1528 reqs = orig(repo)
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
1529 if 'largefiles' in repo.requirements:
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
1530 reqs.add('largefiles')
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
1531 return reqs
35564
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1532
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1533 _lfscheme = 'largefile://'
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
1534
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
1535 @eh.wrapfunction(urlmod, 'open')
35564
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1536 def openlargefile(orig, ui, url_, data=None):
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1537 if url_.startswith(_lfscheme):
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1538 if data:
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1539 msg = "cannot use data on a 'largefile://' url"
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1540 raise error.ProgrammingError(msg)
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1541 lfid = url_[len(_lfscheme):]
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1542 return storefactory.getlfile(ui, lfid)
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1543 else:
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1544 return orig(ui, url_, data=data)