annotate hgext/largefiles/overrides.py @ 33610:d3ab31bf9c0e stable

largefiles: avoid a crash when archiving a subrepo with largefiles disabled This path is also used for extdiff, which is how I crossed paths with it. Without this, an AttributeError occurs looking for 'lfstatus' on localrepository. See also d414c28db84d. The other archive method is for the archival.py override, so it doesn't need to be special cased like this. (It looks like it is only called for the top level repo.) Likewise, the transplant override is also for commands.py. The other overrides set lfstatus before examining it.
author Matt Harbison <matt_harbison@yahoo.com>
date Tue, 13 Jun 2017 22:24:41 -0400
parents 9e67ce5c4fd0
children 0ce2cbebd749
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'''
30061
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
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
30061
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
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
30061
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
17 from mercurial import (
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
18 archival,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
19 cmdutil,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
20 error,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
21 hg,
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
22 match as matchmod,
30061
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
23 pathutil,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
24 registrar,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
25 scmutil,
31802
aea06029919e revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents: 30994
diff changeset
26 smartset,
30061
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
27 util,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
28 )
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
29
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
30 from . import (
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
31 lfcommands,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
32 lfutil,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
33 storefactory,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 30055
diff changeset
34 )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
35
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
36 # -- Utility functions: commonly/repeatedly needed functionality ---------------
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
37
23629
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23604
diff changeset
38 def composelargefilematcher(match, manifest):
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23604
diff changeset
39 '''create a matcher that matches only the largefiles in the original
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23604
diff changeset
40 matcher'''
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23604
diff changeset
41 m = copy.copy(match)
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23604
diff changeset
42 lfile = lambda f: lfutil.standin(f) in manifest
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23604
diff changeset
43 m._files = filter(lfile, m._files)
25624
1c8c33eaea0a match: rename _fmap to _fileroots for clarity
Drew Gottlieb <drgott@google.com>
parents: 25490
diff changeset
44 m._fileroots = set(m._files)
23629
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23604
diff changeset
45 m._always = False
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23604
diff changeset
46 origmatchfn = m.matchfn
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23604
diff changeset
47 m.matchfn = lambda f: lfile(f) and origmatchfn(f)
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23604
diff changeset
48 return m
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23604
diff changeset
49
23781
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23780
diff changeset
50 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: 23780
diff changeset
51 excluded = set()
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23780
diff changeset
52 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: 23780
diff changeset
53 excluded.update(exclude)
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23780
diff changeset
54
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
55 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
56 notlfile = lambda f: not (lfutil.isstandin(f) or lfutil.standin(f) in
23781
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23780
diff changeset
57 manifest or f in excluded)
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
58 m._files = filter(notlfile, m._files)
25624
1c8c33eaea0a match: rename _fmap to _fileroots for clarity
Drew Gottlieb <drgott@google.com>
parents: 25490
diff changeset
59 m._fileroots = set(m._files)
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
60 m._always = False
b5e3f3d25395 largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23426
diff changeset
61 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
62 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
63 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
64
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
65 def installnormalfilesmatchfn(manifest):
21090
aa3d652ba1d5 largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents: 21089
diff changeset
66 '''installmatchfn with a matchfn that ignores all largefiles'''
26955
932330c3f469 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26954
diff changeset
67 def overridematch(ctx, pats=(), opts=None, globbed=False,
26003
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25974
diff changeset
68 default='relpath', badfn=None):
26955
932330c3f469 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26954
diff changeset
69 if opts is None:
932330c3f469 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26954
diff changeset
70 opts = {}
26003
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25974
diff changeset
71 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
72 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
73 oldmatch = installmatchfn(overridematch)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
74
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
75 def installmatchfn(f):
21090
aa3d652ba1d5 largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents: 21089
diff changeset
76 '''monkey patch the scmutil module with a custom match function.
aa3d652ba1d5 largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents: 21089
diff changeset
77 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
78 oldmatch = scmutil.match
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
79 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
80 scmutil.match = f
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
81 return oldmatch
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
82
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
83 def restorematchfn():
21090
aa3d652ba1d5 largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents: 21089
diff changeset
84 '''restores scmutil.match to what it was before installmatchfn
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
85 was called. no-op if scmutil.match is its original function.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
86
21090
aa3d652ba1d5 largefiles: clarify installmatchfn documentation
Mads Kiilerich <madski@unity3d.com>
parents: 21089
diff changeset
87 Note that n calls to installmatchfn will require n calls to
23551
4dd8a6a1240d spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23549
diff changeset
88 restore the original matchfn.'''
21092
56fda512db9f largefiles: remove silent handling of incorrect invocation of restorematchfn
Mads Kiilerich <madski@unity3d.com>
parents: 21091
diff changeset
89 scmutil.match = getattr(scmutil.match, 'oldmatch')
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
90
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
91 def installmatchandpatsfn(f):
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
92 oldmatchandpats = scmutil.matchandpats
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
93 setattr(f, 'oldmatchandpats', oldmatchandpats)
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
94 scmutil.matchandpats = f
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
95 return oldmatchandpats
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
96
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
97 def restorematchandpatsfn():
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
98 '''restores scmutil.matchandpats to what it was before
23139
e53f6b72a0e4 spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23041
diff changeset
99 installmatchandpatsfn was called. No-op if scmutil.matchandpats
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
100 is its original function.
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
101
23139
e53f6b72a0e4 spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23041
diff changeset
102 Note that n calls to installmatchandpatsfn will require n calls
23551
4dd8a6a1240d spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23549
diff changeset
103 to restore the original matchfn.'''
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
104 scmutil.matchandpats = getattr(scmutil.matchandpats, 'oldmatchandpats',
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
105 scmutil.matchandpats)
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
106
23779
749dc66e9329 largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23778
diff changeset
107 def addlargefiles(ui, repo, isaddremove, matcher, **opts):
23896
ec2c2e1400f0 largefiles: don't pop largefile-specific arguments to the add command
Matt Harbison <matt_harbison@yahoo.com>
parents: 23853
diff changeset
108 large = opts.get('large')
15227
a7686abf73a6 largefiles: factor out lfutil.getminsize()
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
109 lfsize = lfutil.getminsize(
23896
ec2c2e1400f0 largefiles: don't pop largefile-specific arguments to the add command
Matt Harbison <matt_harbison@yahoo.com>
parents: 23853
diff changeset
110 ui, lfutil.islfilesrepo(repo), opts.get('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):
15229
89e19ca2a90e largefiles: use ui.configlist() to split largefiles.patterns
Greg Ward <greg@gerg.ca>
parents: 15227
diff changeset
114 lfpats = ui.configlist(lfutil.longname, 'patterns', default=[])
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
115 if lfpats:
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
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 = []
25974
1a95c57959f6 largefiles: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25624
diff changeset
119 m = matcher
1a95c57959f6 largefiles: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25624
diff changeset
120
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
121 wctx = repo[None]
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
122 for f in repo.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
23779
749dc66e9329 largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23778
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: 23778
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: 23778
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: 23778
diff changeset
131 else:
749dc66e9329 largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23778
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: 23778
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:
23779
749dc66e9329 largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23778
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)
23745
86810cd85eb8 largefiles: convert addlargefiles() to vfs
Matt Harbison <matt_harbison@yahoo.com>
parents: 23738
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
23745
86810cd85eb8 largefiles: convert addlargefiles() to vfs
Matt Harbison <matt_harbison@yahoo.com>
parents: 23738
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:
23779
749dc66e9329 largefiles: align the output messages for an added file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23778
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.
28476
bf3bf7158f69 with: use context manager for wlock in addlargefiles
Bryan O'Sullivan <bryano@fb.com>
parents: 28427
diff changeset
158 with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
159 if not opts.get('dry_run'):
23041
a36625ef1f35 largefiles: move initialization of standins variable to clarify its "scope"
Mads Kiilerich <madski@unity3d.com>
parents: 23040
diff changeset
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()]
23780
6b1428e55728 largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23779
diff changeset
175
6b1428e55728 largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23779
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: 23779
diff changeset
177 return added, bad
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
178
23753
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23745
diff changeset
179 def removelargefiles(ui, repo, isaddremove, matcher, **opts):
15786
aca0f2b3c7e3 largefiles: fix confusion upon removal of added largefile (issue3176)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15663
diff changeset
180 after = opts.get('after')
23753
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23745
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
23753
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23745
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: 18011
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: 18011
diff changeset
195 ui.warn(msg % m.rel(f))
17588
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17587
diff changeset
196 return int(len(files) > 0)
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17587
diff changeset
197
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17587
diff changeset
198 result = 0
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
199
15786
aca0f2b3c7e3 largefiles: fix confusion upon removal of added largefile (issue3176)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15663
diff changeset
200 if after:
22630
0290982e5ac7 largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22289
diff changeset
201 remove = deleted
18066
abe9799a86d6 largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents: 18011
diff changeset
202 result = warn(modified + added + clean,
abe9799a86d6 largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents: 18011
diff changeset
203 _('not removing %s: file still exists\n'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
204 else:
22630
0290982e5ac7 largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22289
diff changeset
205 remove = deleted + clean
18066
abe9799a86d6 largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents: 18011
diff changeset
206 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: 18011
diff changeset
207 ' to force removal)\n'))
abe9799a86d6 largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents: 18011
diff changeset
208 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: 18011
diff changeset
209 ' (use forget to undo)\n')) or result
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
210
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
211 # Need to lock because standin files are deleted then removed from the
17407
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 17299
diff changeset
212 # repository and we could race in-between.
28477
bce0afa1921a with: use context manager for wlock in removelargefiles
Bryan O'Sullivan <bryano@fb.com>
parents: 28476
diff changeset
213 with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
214 lfdirstate = lfutil.openlfdirstate(ui, repo)
23670
55c92618fdd4 largefiles: eliminate a duplicate message when removing files in verbose mode
Matt Harbison <matt_harbison@yahoo.com>
parents: 23665
diff changeset
215 for f in sorted(remove):
23778
ce0731e58ac9 largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23753
diff changeset
216 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: 23753
diff changeset
217 # 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: 23753
diff changeset
218 if isaddremove:
ce0731e58ac9 largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23753
diff changeset
219 name = m.uipath(f)
ce0731e58ac9 largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23753
diff changeset
220 else:
ce0731e58ac9 largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23753
diff changeset
221 name = m.rel(f)
ce0731e58ac9 largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23753
diff changeset
222 ui.status(_('removing %s\n') % name)
23604
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
223
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
224 if not opts.get('dry_run'):
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
225 if not after:
32088
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31878
diff changeset
226 repo.wvfs.unlinkpath(f, ignoremissing=True)
23604
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
227
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
228 if opts.get('dry_run'):
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
229 return result
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
230
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
231 remove = [lfutil.standin(f) for f in remove]
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
232 # 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
233 # function handle this.
23038
3f581bfbb268 largefiles: replace repo._isaddremove hack with a simple function parameter
Mads Kiilerich <madski@unity3d.com>
parents: 22919
diff changeset
234 if not isaddremove:
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
235 for f in remove:
32088
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31878
diff changeset
236 repo.wvfs.unlinkpath(f, ignoremissing=True)
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
237 repo[None].forget(remove)
23733
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23707
diff changeset
238
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23707
diff changeset
239 for f in remove:
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23707
diff changeset
240 lfutil.synclfdirstate(repo, lfdirstate, lfutil.splitstandin(f),
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23707
diff changeset
241 False)
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23707
diff changeset
242
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23707
diff changeset
243 lfdirstate.write()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
244
17588
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17587
diff changeset
245 return result
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17587
diff changeset
246
16449
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
247 # 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
248 # appear at their right place in the manifests.
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
249 def decodepath(orig, path):
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
250 return lfutil.splitstandin(path) or path
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
251
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
252 # -- Wrappers: modify existing commands --------------------------------
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
253
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
254 def overrideadd(orig, ui, repo, *pats, **opts):
23899
054cfb7c33ae largefiles: cleanup overrideadd()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23898
diff changeset
255 if opts.get('normal') and opts.get('large'):
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
256 raise error.Abort(_('--normal cannot be used with --large'))
23898
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
257 return orig(ui, repo, *pats, **opts)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
258
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
259 def cmdutiladd(orig, ui, repo, matcher, prefix, explicitonly, **opts):
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
260 # The --normal flag short circuits this override
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
261 if opts.get('normal'):
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
262 return orig(ui, repo, matcher, prefix, explicitonly, **opts)
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
263
23898
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
264 ladded, lbad = addlargefiles(ui, repo, False, matcher, **opts)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
265 normalmatcher = composenormalfilematcher(matcher, repo[None].manifest(),
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
266 ladded)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
267 bad = orig(ui, repo, normalmatcher, prefix, explicitonly, **opts)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
268
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
269 bad.extend(f for f in lbad)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23896
diff changeset
270 return bad
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
271
23794
304e69cb1ee9 largefiles: enable subrepo support for remove
Matt Harbison <matt_harbison@yahoo.com>
parents: 23781
diff changeset
272 def cmdutilremove(orig, ui, repo, matcher, prefix, after, force, subrepos):
304e69cb1ee9 largefiles: enable subrepo support for remove
Matt Harbison <matt_harbison@yahoo.com>
parents: 23781
diff changeset
273 normalmatcher = composenormalfilematcher(matcher, repo[None].manifest())
304e69cb1ee9 largefiles: enable subrepo support for remove
Matt Harbison <matt_harbison@yahoo.com>
parents: 23781
diff changeset
274 result = orig(ui, repo, normalmatcher, prefix, after, force, subrepos)
304e69cb1ee9 largefiles: enable subrepo support for remove
Matt Harbison <matt_harbison@yahoo.com>
parents: 23781
diff changeset
275 return removelargefiles(ui, repo, False, matcher, after=after,
304e69cb1ee9 largefiles: enable subrepo support for remove
Matt Harbison <matt_harbison@yahoo.com>
parents: 23781
diff changeset
276 force=force) or result
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
277
16515
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
278 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
279 try:
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
280 repo._repo.lfstatus = True
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
281 return orig(repo, rev2, **opts)
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
282 finally:
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
283 repo._repo.lfstatus = False
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
284
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
285 def overridestatus(orig, ui, repo, *pats, **opts):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
286 try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
287 repo.lfstatus = True
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
288 return orig(ui, repo, *pats, **opts)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
289 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
290 repo.lfstatus = False
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
291
16516
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
292 def overridedirty(orig, repo, ignoreupdate=False):
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
293 try:
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
294 repo._repo.lfstatus = True
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
295 return orig(repo, ignoreupdate)
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
296 finally:
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
297 repo._repo.lfstatus = False
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
298
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
299 def overridelog(orig, ui, repo, *pats, **opts):
26957
4afdd4283d3e largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26956
diff changeset
300 def overridematchandpats(ctx, pats=(), opts=None, globbed=False,
26003
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25974
diff changeset
301 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
302 """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
303 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
304 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
305 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
306 """
26957
4afdd4283d3e largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26956
diff changeset
307 if opts is None:
4afdd4283d3e largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26956
diff changeset
308 opts = {}
26003
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25974
diff changeset
309 matchandpats = oldmatchandpats(ctx, pats, opts, globbed, default,
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25974
diff changeset
310 badfn=badfn)
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
311 m, p = copy.copy(matchandpats)
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
312
22170
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
313 if m.always():
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
314 # 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
315 # to add standins.
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
316 return matchandpats
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
317
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
318 pats = set(p)
24277
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
319
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
320 def fixpats(pat, tostandin=lfutil.standin):
24992
2553ef7355ab largefiles: don't mangle filesets when fixing up the log matcher
Matt Harbison <matt_harbison@yahoo.com>
parents: 24991
diff changeset
321 if pat.startswith('set:'):
2553ef7355ab largefiles: don't mangle filesets when fixing up the log matcher
Matt Harbison <matt_harbison@yahoo.com>
parents: 24991
diff changeset
322 return pat
2553ef7355ab largefiles: don't mangle filesets when fixing up the log matcher
Matt Harbison <matt_harbison@yahoo.com>
parents: 24991
diff changeset
323
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
324 kindpat = matchmod._patsplit(pat, None)
24277
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
325
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
326 if kindpat[0] is not None:
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
327 return kindpat[0] + ':' + tostandin(kindpat[1])
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
328 return tostandin(kindpat[1])
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
329
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
330 if m._cwd:
24279
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24278
diff changeset
331 hglf = lfutil.shortname
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24278
diff changeset
332 back = util.pconvert(m.rel(hglf)[:-len(hglf)])
24277
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
333
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
334 def tostandin(f):
27421
1aee2ab0f902 spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents: 27247
diff changeset
335 # The file may already be a standin, so truncate the back
24279
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24278
diff changeset
336 # prefix and test before mangling it. This avoids turning
24278
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24277
diff changeset
337 # '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: 24277
diff changeset
338 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: 24277
diff changeset
339 return f
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24277
diff changeset
340
24279
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24278
diff changeset
341 # 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: 24278
diff changeset
342 # 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: 24278
diff changeset
343 # 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: 24278
diff changeset
344 # prepended before building the standin.
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24278
diff changeset
345 if os.path.isabs(m._cwd):
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24278
diff changeset
346 f = f[len(back):]
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24278
diff changeset
347 else:
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24278
diff changeset
348 f = m._cwd + '/' + f
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24278
diff changeset
349 return back + lfutil.standin(f)
24277
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
350
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
351 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
352 else:
24278
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24277
diff changeset
353 def tostandin(f):
32393
d5d0e6ca62ad largefiles: replace splitstandin() by isstandin() to omit str creation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32392
diff changeset
354 if lfutil.isstandin(f):
24278
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24277
diff changeset
355 return f
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24277
diff changeset
356 return lfutil.standin(f)
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24277
diff changeset
357 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
358
19472
32e502b26983 largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents: 19226
diff changeset
359 for i in range(0, len(m._files)):
24277
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
360 # 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: 24227
diff changeset
361 if m._files[i] == '.':
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
362 continue
19472
32e502b26983 largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents: 19226
diff changeset
363 standin = lfutil.standin(m._files[i])
23988
344939126579 largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents: 23905
diff changeset
364 # 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: 23905
diff changeset
365 # 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: 23905
diff changeset
366 # 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: 23905
diff changeset
367 # files.
32434
9d075911df49 largefiles: avoid meaningless changectx looking up
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32433
diff changeset
368 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
369 m._files[i] = standin
32434
9d075911df49 largefiles: avoid meaningless changectx looking up
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32433
diff changeset
370 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
371 m._files.append(standin)
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
372
25624
1c8c33eaea0a match: rename _fmap to _fileroots for clarity
Drew Gottlieb <drgott@google.com>
parents: 25490
diff changeset
373 m._fileroots = set(m._files)
18813
d780c472463c largefiles: fix _always for match overrides
Siddharth Agarwal <sid0@fb.com>
parents: 18782
diff changeset
374 m._always = False
18341
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
375 origmatchfn = m.matchfn
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
376 def lfmatchfn(f):
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
377 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
378 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
379 return True
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
380 r = origmatchfn(f)
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
381 return r
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
382 m.matchfn = lfmatchfn
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
383
24278
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24277
diff changeset
384 ui.debug('updated patterns: %s\n' % sorted(pats))
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
385 return m, pats
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
386
22169
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
387 # 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
388 # (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
389 # (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
390 # 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
391 # case (2).
26003
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25974
diff changeset
392 def overridemakelogfilematcher(repo, pats, opts, badfn=None):
24667
1925769b4ff8 log: prefer 'wctx' over 'pctx' for working context
Martin von Zweigbergk <martinvonz@google.com>
parents: 24605
diff changeset
393 wctx = repo[None]
26003
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25974
diff changeset
394 match, pats = oldmatchandpats(wctx, pats, opts, badfn=badfn)
22169
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
395 return lambda rev: match
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
396
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
397 oldmatchandpats = installmatchandpatsfn(overridematchandpats)
22169
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
398 oldmakelogfilematcher = cmdutil._makenofollowlogfilematcher
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
399 setattr(cmdutil, '_makenofollowlogfilematcher', overridemakelogfilematcher)
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
400
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
401 try:
17589
0f39e9355d3c largefiles: preserve the exit status of the log command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17588
diff changeset
402 return orig(ui, repo, *pats, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
403 finally:
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
404 restorematchandpatsfn()
22169
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
405 setattr(cmdutil, '_makenofollowlogfilematcher', oldmakelogfilematcher)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
406
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
407 def overrideverify(orig, ui, repo, *pats, **opts):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
408 large = opts.pop('large', False)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
409 all = opts.pop('lfa', False)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
410 contents = opts.pop('lfc', False)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
411
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
412 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
413 if large or all or contents:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
414 result = result or lfcommands.verifylfiles(ui, repo, all, contents)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
415 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
416
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
417 def overridedebugstate(orig, ui, repo, *pats, **opts):
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
418 large = opts.pop('large', False)
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
419 if large:
21088
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
420 class fakerepo(object):
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
421 dirstate = lfutil.openlfdirstate(ui, repo)
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
422 orig(ui, fakerepo, *pats, **opts)
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
423 else:
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
424 orig(ui, repo, *pats, **opts)
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
425
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
426 # Before starting the manifest merge, merge.updates will call
23551
4dd8a6a1240d spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23549
diff changeset
427 # _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
428 # 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
429 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
430 # 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
431 # 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
432 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
433 # 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
434 # 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
435 # case further in the overridden calculateupdates function below.
23665
0297d8469350 merge: don't overwrite untracked file at directory rename target
Martin von Zweigbergk <martinvonz@google.com>
parents: 23656
diff changeset
436 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
437 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
438 return False
23665
0297d8469350 merge: don't overwrite untracked file at directory rename target
Martin von Zweigbergk <martinvonz@google.com>
parents: 23656
diff changeset
439 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
440
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
441 # 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
442 # 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
443 #
23307
9dd0d0d61a24 largefiles: update comments to refer to the right overridden method
Martin von Zweigbergk <martinvonz@google.com>
parents: 23276
diff changeset
444 # 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
445 # 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
446 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
447 # 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
448 # 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
449 # 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
450 # 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
451 # 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
452 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
453 # 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
454 # 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
455 # 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
456 # triggers a merge action.
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 # 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
459 # 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
460 # 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
461 # 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
462 # presumably changed on purpose.
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 # 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
465 # 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
466 # will update the largefiles.
21081
ffd7b6ce46ff merge: pass merge ancestor to calculateupdates as a list
Mads Kiilerich <madski@unity3d.com>
parents: 21080
diff changeset
467 def overridecalculateupdates(origfn, repo, p1, p2, pas, branchmerge, force,
28864
19775bc34da3 largefiles: don't explicitly list optional parameters that are not used
Tony Tung <tonytung@merly.org>
parents: 28691
diff changeset
468 acceptremote, *args, **kwargs):
18605
bcf29565d89f manifestmerge: pass in branchmerge and force separately
Siddharth Agarwal <sid0@fb.com>
parents: 18600
diff changeset
469 overwrite = force and not branchmerge
23534
a5887f2da5e6 merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents: 23511
diff changeset
470 actions, diverge, renamedelete = origfn(
28864
19775bc34da3 largefiles: don't explicitly list optional parameters that are not used
Tony Tung <tonytung@merly.org>
parents: 28691
diff changeset
471 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
472
8eb99e5cec4a largefiles: don't process merge actions at all when overwriting
Mads Kiilerich <madski@unity3d.com>
parents: 19805
diff changeset
473 if overwrite:
23534
a5887f2da5e6 merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents: 23511
diff changeset
474 return actions, diverge, renamedelete
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
475
23537
38e55e55ae4d largefiles: rewrite merge code using dictionary with entry per file
Martin von Zweigbergk <martinvonz@google.com>
parents: 23536
diff changeset
476 # Convert to dictionary with filename as key and action as value.
23538
42ae1b1f048f largefiles: start by finding files of interest
Martin von Zweigbergk <martinvonz@google.com>
parents: 23537
diff changeset
477 lfiles = set()
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
478 for f in actions:
28560
27f2f5c1d499 largefiles: actions will now always have a file - drop check
Mads Kiilerich <madski@unity3d.com>
parents: 28559
diff changeset
479 splitstandin = lfutil.splitstandin(f)
23653
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23647
diff changeset
480 if splitstandin in p1:
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23647
diff changeset
481 lfiles.add(splitstandin)
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23647
diff changeset
482 elif lfutil.standin(f) in p1:
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23647
diff changeset
483 lfiles.add(f)
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
484
28559
ee3123e19db9 largefiles: make prompt order deterministic
Mads Kiilerich <madski@unity3d.com>
parents: 28481
diff changeset
485 for lfile in sorted(lfiles):
23538
42ae1b1f048f largefiles: start by finding files of interest
Martin von Zweigbergk <martinvonz@google.com>
parents: 23537
diff changeset
486 standin = lfutil.standin(lfile)
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
487 (lm, largs, lmsg) = actions.get(lfile, (None, None, None))
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
488 (sm, sargs, smsg) = actions.get(standin, (None, None, None))
23549
495bc1b65d25 merge: move cd/dc prompts after largefiles prompts
Martin von Zweigbergk <martinvonz@google.com>
parents: 23545
diff changeset
489 if sm in ('g', 'dc') and lm != 'r':
27602
fa2daf0e61ab merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents: 27421
diff changeset
490 if sm == 'dc':
fa2daf0e61ab merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents: 27421
diff changeset
491 f1, f2, fa, move, anc = sargs
28310
af13eaf9ab8c merge: add a new 'backup' argument to get actions
Siddharth Agarwal <sid0@fb.com>
parents: 28241
diff changeset
492 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
493 # 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
494 # 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
495 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
496 '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
497 '$$ &Largefile $$ &Normal file') % lfile
23491
3805f4b0f5a9 largefiles: remove redundant checks for false modify/delete conflicts
Martin von Zweigbergk <martinvonz@google.com>
parents: 23471
diff changeset
498 if repo.ui.promptchoice(usermsg, 0) == 0: # pick remote largefile
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
499 actions[lfile] = ('r', None, 'replaced by standin')
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
500 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
501 else: # keep local normal file
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
502 actions[lfile] = ('k', None, 'replaces standin')
23501
28f01c318c05 largefiles: don't use 'r' action for standin that doesn't exist
Martin von Zweigbergk <martinvonz@google.com>
parents: 23500
diff changeset
503 if branchmerge:
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
504 actions[standin] = ('k', None, 'replaced by non-standin')
23501
28f01c318c05 largefiles: don't use 'r' action for standin that doesn't exist
Martin von Zweigbergk <martinvonz@google.com>
parents: 23500
diff changeset
505 else:
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
506 actions[standin] = ('r', None, 'replaced by non-standin')
23549
495bc1b65d25 merge: move cd/dc prompts after largefiles prompts
Martin von Zweigbergk <martinvonz@google.com>
parents: 23545
diff changeset
507 elif lm in ('g', 'dc') and sm != 'r':
27602
fa2daf0e61ab merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents: 27421
diff changeset
508 if lm == 'dc':
fa2daf0e61ab merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents: 27421
diff changeset
509 f1, f2, fa, move, anc = largs
28310
af13eaf9ab8c merge: add a new 'backup' argument to get actions
Siddharth Agarwal <sid0@fb.com>
parents: 28241
diff changeset
510 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
511 # 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
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 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
514 '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
515 '$$ &Largefile $$ &Normal file') % lfile
23491
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: # 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
517 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
518 # largefile can be restored from standin safely
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
519 actions[lfile] = ('k', None, 'replaced by standin')
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
520 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
521 else:
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
522 # "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
523 # removal of itself
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
524 actions[lfile] = ('lfmr', None,
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
525 '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
526
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
527 # linear-merge should treat this largefile as 're-added'
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
528 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
529 else: # pick remote normal file
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
530 actions[lfile] = ('g', largs, 'replaces standin')
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
531 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
532
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
533 return actions, diverge, renamedelete
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
534
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 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
536 if 'lfmr' in actions:
23707
997a96cf6344 largefiles: mark lfile as added in lfdirstate when the standin is added
Mads Kiilerich <madski@unity3d.com>
parents: 23631
diff changeset
537 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
538 for lfile, args, msg in actions['lfmr']:
23707
997a96cf6344 largefiles: mark lfile as added in lfdirstate when the standin is added
Mads Kiilerich <madski@unity3d.com>
parents: 23631
diff changeset
539 # 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: 23631
diff changeset
540 # 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
541 repo.dirstate.remove(lfile)
23707
997a96cf6344 largefiles: mark lfile as added in lfdirstate when the standin is added
Mads Kiilerich <madski@unity3d.com>
parents: 23631
diff changeset
542 # 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: 23631
diff changeset
543 lfdirstate.add(lfile)
997a96cf6344 largefiles: mark lfile as added in lfdirstate when the standin is added
Mads Kiilerich <madski@unity3d.com>
parents: 23631
diff changeset
544 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
545
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
546 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
547
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
548 # 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
549 # largefiles. This will handle identical edits without prompting the user.
27247
45a6233d5f50 filemerge: introduce a premerge flag and function
Siddharth Agarwal <sid0@fb.com>
parents: 27246
diff changeset
550 def overridefilemerge(origfn, premerge, repo, mynode, orig, fcd, fco, fca,
45a6233d5f50 filemerge: introduce a premerge flag and function
Siddharth Agarwal <sid0@fb.com>
parents: 27246
diff changeset
551 labels=None):
27690
df9b73d2d444 largefiles: fall back to the original for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents: 27674
diff changeset
552 if not lfutil.isstandin(orig) or fcd.isabsent() or fco.isabsent():
27247
45a6233d5f50 filemerge: introduce a premerge flag and function
Siddharth Agarwal <sid0@fb.com>
parents: 27246
diff changeset
553 return origfn(premerge, repo, mynode, orig, fcd, fco, fca,
45a6233d5f50 filemerge: introduce a premerge flag and function
Siddharth Agarwal <sid0@fb.com>
parents: 27246
diff changeset
554 labels=labels)
20298
9d350fa0708e largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents: 20297
diff changeset
555
32519
a40e979b9d97 largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32514
diff changeset
556 ahash = lfutil.readasstandin(fca).lower()
a40e979b9d97 largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32514
diff changeset
557 dhash = lfutil.readasstandin(fcd).lower()
a40e979b9d97 largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32514
diff changeset
558 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
559 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
560 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
561 (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
562 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
563 _('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
564 '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
565 '$$ &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
566 (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
567 0) == 1)):
20298
9d350fa0708e largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents: 20297
diff changeset
568 repo.wwrite(fcd.path(), fco.data(), fco.flags())
27674
86ede9eda252 filemerge: return whether the file was deleted
Siddharth Agarwal <sid0@fb.com>
parents: 27602
diff changeset
569 return True, 0, False
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
570
24961
4906dc0e038c copies: add matcher parameter to copy logic
Durham Goode <durham@fb.com>
parents: 24819
diff changeset
571 def copiespathcopies(orig, ctx1, ctx2, match=None):
4906dc0e038c copies: add matcher parameter to copy logic
Durham Goode <durham@fb.com>
parents: 24819
diff changeset
572 copies = orig(ctx1, ctx2, match=match)
24332
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24279
diff changeset
573 updated = {}
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24279
diff changeset
574
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24279
diff changeset
575 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: 24279
diff changeset
576 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: 24279
diff changeset
577
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24279
diff changeset
578 return updated
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24279
diff changeset
579
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
580 # 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
581 # 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
582 # 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
583 # 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
584 # dirstate updated.
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
585 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
586 # doesn't remove largefile on rename
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
587 if len(pats) < 2:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
588 # this isn't legal, let the original function deal with it
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
589 return orig(ui, repo, pats, opts, rename)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
590
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
591 # 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
592 # 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
593 # 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
594 # match largefiles and run it again.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
595 nonormalfiles = False
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
596 nolfiles = False
21091
dd584d1a75e7 largefiles: copy override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21090
diff changeset
597 installnormalfilesmatchfn(repo[None].manifest())
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
598 try:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
599 result = orig(ui, repo, pats, opts, rename)
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
600 except error.Abort as e:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
601 if str(e) != _('no files to copy'):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
602 raise e
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
603 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
604 nonormalfiles = True
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
605 result = 0
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
606 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
607 restorematchfn()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
608
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
609 # The first rename can cause our current working directory to be removed.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
610 # In that case there is nothing left to copy/rename so just quit.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
611 try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
612 repo.getcwd()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
613 except OSError:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
614 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
615
24018
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23988
diff changeset
616 def makestandin(relpath):
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23988
diff changeset
617 path = pathutil.canonpath(repo.root, repo.getcwd(), relpath)
29465
a7f7b7acf489 largefiles: replace invocation of os.path module by vfs in overrides.py
liscju <piotr.listkiewicz@gmail.com>
parents: 29065
diff changeset
618 return repo.wvfs.join(lfutil.standin(path))
24018
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23988
diff changeset
619
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23988
diff changeset
620 fullpats = scmutil.expandpats(pats)
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23988
diff changeset
621 dest = fullpats[-1]
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23988
diff changeset
622
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23988
diff changeset
623 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: 23988
diff changeset
624 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: 23988
diff changeset
625 os.makedirs(makestandin(dest))
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23988
diff changeset
626
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
627 try:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
628 # 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: 25289
diff changeset
629 # them to the dir state until later so lock during that time.
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
630 wlock = repo.wlock()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
631
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
632 manifest = repo[None].manifest()
26959
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26958
diff changeset
633 def overridematch(ctx, pats=(), opts=None, globbed=False,
26003
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25974
diff changeset
634 default='relpath', badfn=None):
26959
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26958
diff changeset
635 if opts is None:
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26958
diff changeset
636 opts = {}
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
637 newpats = []
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
638 # The patterns were previously mangled to add the standin
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
639 # directory; we need to remove that now
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
640 for pat in pats:
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
641 if matchmod.patkind(pat) is None and lfutil.shortname in pat:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
642 newpats.append(pat.replace(lfutil.shortname, ''))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
643 else:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
644 newpats.append(pat)
26003
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25974
diff changeset
645 match = oldmatch(ctx, newpats, opts, globbed, default, badfn=badfn)
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
646 m = copy.copy(match)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
647 lfile = lambda f: lfutil.standin(f) in manifest
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
648 m._files = [lfutil.standin(f) for f in m._files if lfile(f)]
25624
1c8c33eaea0a match: rename _fmap to _fileroots for clarity
Drew Gottlieb <drgott@google.com>
parents: 25490
diff changeset
649 m._fileroots = set(m._files)
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
650 origmatchfn = m.matchfn
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
651 def matchfn(f):
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
652 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
653 return (lfile is not None and
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
654 (f in manifest) and
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
655 origmatchfn(lfile) or
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
656 None)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
657 m.matchfn = matchfn
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
658 return m
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
659 oldmatch = installmatchfn(overridematch)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
660 listpats = []
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
661 for pat in pats:
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
662 if matchmod.patkind(pat) is not None:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
663 listpats.append(pat)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
664 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
665 listpats.append(makestandin(pat))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
666
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
667 try:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
668 origcopyfile = util.copyfile
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
669 copiedfiles = []
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
670 def overridecopyfile(src, dest):
15598
a77ce45584ef largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15576
diff changeset
671 if (lfutil.shortname in src and
a77ce45584ef largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15576
diff changeset
672 dest.startswith(repo.wjoin(lfutil.shortname))):
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
673 destlfile = dest.replace(lfutil.shortname, '')
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
674 if not opts['force'] and os.path.exists(destlfile):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
675 raise IOError('',
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
676 _('destination largefile already exists'))
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
677 copiedfiles.append((src, dest))
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
678 origcopyfile(src, dest)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
679
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
680 util.copyfile = overridecopyfile
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
681 result += orig(ui, repo, listpats, opts, rename)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
682 finally:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
683 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
684
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
685 lfdirstate = lfutil.openlfdirstate(ui, repo)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
686 for (src, dest) in copiedfiles:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
687 if (lfutil.shortname in src and
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
688 dest.startswith(repo.wjoin(lfutil.shortname))):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
689 srclfile = src.replace(repo.wjoin(lfutil.standin('')), '')
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
690 destlfile = dest.replace(repo.wjoin(lfutil.standin('')), '')
29465
a7f7b7acf489 largefiles: replace invocation of os.path module by vfs in overrides.py
liscju <piotr.listkiewicz@gmail.com>
parents: 29065
diff changeset
691 destlfiledir = repo.wvfs.dirname(repo.wjoin(destlfile)) or '.'
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
692 if not os.path.isdir(destlfiledir):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
693 os.makedirs(destlfiledir)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
694 if rename:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
695 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
696
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
697 # The file is gone, but this deletes any empty parent
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
698 # directories as a side-effect.
32088
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31878
diff changeset
699 repo.wvfs.unlinkpath(srclfile, ignoremissing=True)
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
700 lfdirstate.remove(srclfile)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
701 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
702 util.copyfile(repo.wjoin(srclfile),
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
703 repo.wjoin(destlfile))
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
704
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
705 lfdirstate.add(destlfile)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
706 lfdirstate.write()
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
707 except error.Abort as e:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
708 if str(e) != _('no files to copy'):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
709 raise e
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
710 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
711 nolfiles = True
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
712 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
713 restorematchfn()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
714 wlock.release()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
715
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
716 if nolfiles and nonormalfiles:
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
717 raise error.Abort(_('no files to copy'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
718
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
719 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
720
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
721 # 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
722 # 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
723 # 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
724 # the necessary largefiles.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
725 #
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
726 # 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
727 # 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
728 # 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
729 # resulting standins update the largefiles.
24566
66a69da9cde4 largefiles: override cmdutil.revert() instead of comands.revert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24456
diff changeset
730 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
731 # 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
732 # 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
733 # prevent others from changing them in their incorrect state.
28478
37552634a7b9 with: use context manager for wlock in overriderevert
Bryan O'Sullivan <bryano@fb.com>
parents: 28477
diff changeset
734 with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
735 lfdirstate = lfutil.openlfdirstate(ui, repo)
23039
1350b9170089 largefiles: remove confusing rev parameter for lfdirstatestatus
Mads Kiilerich <madski@unity3d.com>
parents: 23038
diff changeset
736 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
737 lfdirstate.write()
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
738 for lfile in s.modified:
32438
0eec36112e58 largefiles: add lfile argument to updatestandin() for efficiency (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32435
diff changeset
739 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
740 for lfile in s.deleted:
32397
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32396
diff changeset
741 fstandin = lfutil.standin(lfile)
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32396
diff changeset
742 if (repo.wvfs.exists(fstandin)):
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32396
diff changeset
743 repo.wvfs.unlink(fstandin)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
744
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
745 oldstandins = lfutil.getstandinsstate(repo)
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
746
26961
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26960
diff changeset
747 def overridematch(mctx, pats=(), opts=None, globbed=False,
26003
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25974
diff changeset
748 default='relpath', badfn=None):
26961
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26960
diff changeset
749 if opts is None:
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26960
diff changeset
750 opts = {}
26003
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25974
diff changeset
751 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
752 m = copy.copy(match)
24188
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24041
diff changeset
753
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24041
diff changeset
754 # 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: 24041
diff changeset
755 # 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: 24041
diff changeset
756 # 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: 24041
diff changeset
757 # this invocation of match.
24566
66a69da9cde4 largefiles: override cmdutil.revert() instead of comands.revert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24456
diff changeset
758 lfdirstate = lfutil.openlfdirstate(mctx.repo().ui, mctx.repo(),
66a69da9cde4 largefiles: override cmdutil.revert() instead of comands.revert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24456
diff changeset
759 False)
24188
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24041
diff changeset
760
32433
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32432
diff changeset
761 wctx = repo[None]
32435
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32434
diff changeset
762 matchfiles = []
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32434
diff changeset
763 for f in m._files:
24567
2703eb73a3af largefiles: extract and reuse 'standin' variable in overriderevert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24566
diff changeset
764 standin = lfutil.standin(f)
24568
5b85a5bc5bbb revert: evaluate filesets against working directory (issue4497)
Martin von Zweigbergk <martinvonz@google.com>
parents: 24567
diff changeset
765 if standin in ctx or standin in mctx:
32435
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32434
diff changeset
766 matchfiles.append(standin)
32433
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32432
diff changeset
767 elif standin in wctx or lfdirstate[f] == 'r':
32435
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32434
diff changeset
768 continue
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32434
diff changeset
769 else:
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32434
diff changeset
770 matchfiles.append(f)
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32434
diff changeset
771 m._files = matchfiles
25624
1c8c33eaea0a match: rename _fmap to _fileroots for clarity
Drew Gottlieb <drgott@google.com>
parents: 25490
diff changeset
772 m._fileroots = 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
773 origmatchfn = m.matchfn
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
774 def matchfn(f):
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
775 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
776 if lfile is not None:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
777 return (origmatchfn(lfile) and
24568
5b85a5bc5bbb revert: evaluate filesets against working directory (issue4497)
Martin von Zweigbergk <martinvonz@google.com>
parents: 24567
diff changeset
778 (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
779 return origmatchfn(f)
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
780 m.matchfn = matchfn
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
781 return m
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
782 oldmatch = installmatchfn(overridematch)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
783 try:
24566
66a69da9cde4 largefiles: override cmdutil.revert() instead of comands.revert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24456
diff changeset
784 orig(ui, repo, ctx, parents, *pats, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
785 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
786 restorematchfn()
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
787
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
788 newstandins = lfutil.getstandinsstate(repo)
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
789 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
790 # 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
791 # 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
792 # 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
793 # '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
794 # of target (standin) file.
0cb34b3991f8 largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21884
diff changeset
795 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
796 normallookup=True)
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
797
23183
51c9196a6bd0 largefiles: remove meaningless code path for "hg pull --rebase"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23145
diff changeset
798 # 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
799 # largefiles updated remotely
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
800 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
801 revsprepull = len(repo)
18977
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
802 if not source:
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
803 source = 'default'
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
804 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
805 result = orig(ui, repo, source, **opts)
18977
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
806 revspostpull = len(repo)
18981
83ead8cb0ff2 largefiles: implement pull --all-largefiles as a special case of --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18980
diff changeset
807 lfrevs = opts.get('lfrev', [])
16692
b9969574540a largefiles: add --all-largefiles flag to pull
Na'Tosha Bard <natosha@unity3d.com>
parents: 16691
diff changeset
808 if opts.get('all_largefiles'):
18981
83ead8cb0ff2 largefiles: implement pull --all-largefiles as a special case of --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18980
diff changeset
809 lfrevs.append('pulled()')
18978
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
810 if lfrevs and revspostpull > revsprepull:
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
811 numcached = 0
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
812 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
813 try:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
814 for rev in scmutil.revrange(repo, lfrevs):
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
815 ui.note(_('pulling largefiles for revision %s\n') % rev)
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
816 (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
817 numcached += len(cached)
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
818 finally:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
819 del repo.firstpulled
18978
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
820 ui.status(_("%d largefiles cached\n") % numcached)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
821 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
822
29628
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
823 def overridepush(orig, ui, repo, *args, **kwargs):
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
824 """Override push command and store --lfrev parameters in opargs"""
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
825 lfrevs = kwargs.pop('lfrev', None)
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
826 if lfrevs:
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
827 opargs = kwargs.setdefault('opargs', {})
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
828 opargs['lfrevs'] = scmutil.revrange(repo, lfrevs)
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
829 return orig(ui, repo, *args, **kwargs)
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
830
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
831 def exchangepushoperation(orig, *args, **kwargs):
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
832 """Override pushoperation constructor and store lfrevs parameter"""
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
833 lfrevs = kwargs.pop('lfrevs', None)
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
834 pushop = orig(*args, **kwargs)
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
835 pushop.lfrevs = lfrevs
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
836 return pushop
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
837
29065
dcb4209bd30d revset: replace extpredicate by revsetpredicate of registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28864
diff changeset
838 revsetpredicate = registrar.revsetpredicate()
28241
42910f9fffeb revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27992
diff changeset
839
42910f9fffeb revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27992
diff changeset
840 @revsetpredicate('pulled()')
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
841 def pulledrevsetsymbol(repo, subset, x):
28241
42910f9fffeb revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27992
diff changeset
842 """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
843
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
844 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
845
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
846 .. container:: verbose
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
847
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
848 Some examples:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
849
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
850 - 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
851
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
852 hg pull -lfrev "pulled()"
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
853
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
854 - 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
855
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
856 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
857
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
858 """
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
859
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
860 try:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
861 firstpulled = repo.firstpulled
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
862 except AttributeError:
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
863 raise error.Abort(_("pulled() only available in --lfrev"))
31802
aea06029919e revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents: 30994
diff changeset
864 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
865
16652
98a9266db803 largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16650
diff changeset
866 def overrideclone(orig, ui, source, dest=None, **opts):
17616
3a1c6b64e052 largefiles: don't convert dest=None to dest=hg.defaultdest() in clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17615
diff changeset
867 d = dest
3a1c6b64e052 largefiles: don't convert dest=None to dest=hg.defaultdest() in clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17615
diff changeset
868 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: 17615
diff changeset
869 d = hg.defaultdest(source)
3a1c6b64e052 largefiles: don't convert dest=None to dest=hg.defaultdest() in clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17615
diff changeset
870 if opts.get('all_largefiles') and not hg.islocal(d):
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
871 raise error.Abort(_(
21096
a45ed365904a i18n: fix "% inside _()" problem
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21095
diff changeset
872 '--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
873 d)
17617
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
874
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
875 return orig(ui, source, dest, **opts)
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
876
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
877 def hgclone(orig, ui, opts, *args, **kwargs):
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
878 result = orig(ui, opts, *args, **kwargs)
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
879
17824
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
880 if result is not None:
16652
98a9266db803 largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16650
diff changeset
881 sourcerepo, destrepo = result
17615
56136786000f largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents: 17614
diff changeset
882 repo = destrepo.local()
56136786000f largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents: 17614
diff changeset
883
24991
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24967
diff changeset
884 # 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: 24967
diff changeset
885 # 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: 24967
diff changeset
886 # hgrc can't be updated.
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24967
diff changeset
887 if not repo:
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24967
diff changeset
888 return result
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24967
diff changeset
889
24041
e1dbe0b215ae largefiles: set the extension as enabled locally after a clone requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 24018
diff changeset
890 # If largefiles is required for this repo, permanently enable it locally
e1dbe0b215ae largefiles: set the extension as enabled locally after a clone requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 24018
diff changeset
891 if 'largefiles' in repo.requirements:
30921
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
892 with repo.vfs('hgrc', 'a', text=True) as fp:
24041
e1dbe0b215ae largefiles: set the extension as enabled locally after a clone requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 24018
diff changeset
893 fp.write('\n[extensions]\nlargefiles=\n')
e1dbe0b215ae largefiles: set the extension as enabled locally after a clone requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 24018
diff changeset
894
17615
56136786000f largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents: 17614
diff changeset
895 # 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
896 # 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
897 # this option, so attempt whether or not this is a largefile repo.
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
898 if opts.get('all_largefiles'):
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
899 success, missing = lfcommands.downloadlfiles(ui, repo, None)
17617
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
900
17824
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
901 if missing != 0:
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
902 return None
17617
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
903
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
904 return result
16652
98a9266db803 largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16650
diff changeset
905
32671
9e67ce5c4fd0 largefiles: set the extension as enabled locally after a share requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 32519
diff changeset
906 def hgpostshare(orig, sourcerepo, destrepo, bookmarks=True, defaultpath=None):
9e67ce5c4fd0 largefiles: set the extension as enabled locally after a share requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 32519
diff changeset
907 orig(sourcerepo, destrepo, bookmarks, defaultpath)
9e67ce5c4fd0 largefiles: set the extension as enabled locally after a share requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 32519
diff changeset
908
9e67ce5c4fd0 largefiles: set the extension as enabled locally after a share requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 32519
diff changeset
909 # If largefiles is required for this repo, permanently enable it locally
9e67ce5c4fd0 largefiles: set the extension as enabled locally after a share requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 32519
diff changeset
910 if 'largefiles' in destrepo.requirements:
9e67ce5c4fd0 largefiles: set the extension as enabled locally after a share requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 32519
diff changeset
911 with destrepo.vfs('hgrc', 'a+', text=True) as fp:
9e67ce5c4fd0 largefiles: set the extension as enabled locally after a share requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 32519
diff changeset
912 fp.write('\n[extensions]\nlargefiles=\n')
9e67ce5c4fd0 largefiles: set the extension as enabled locally after a share requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 32519
diff changeset
913
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
914 def overriderebase(orig, ui, repo, **opts):
24213
d414c28db84d largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23988
diff changeset
915 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: 23988
diff changeset
916 return orig(ui, repo, **opts)
d414c28db84d largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23988
diff changeset
917
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
918 resuming = opts.get('continue')
f726b05ecfe6 largefiles: update standins only at the 1st commit of "hg rebase --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23183
diff changeset
919 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
920 repo._lfstatuswriters.append(lambda *msg, **opts: None)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
921 try:
17590
40c988f108d0 largefiles: preserve the exit status of the rebase command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17589
diff changeset
922 return orig(ui, repo, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
923 finally:
23190
383ff455cab8 largefiles: avoid printing messages while rebasing by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23189
diff changeset
924 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
925 repo._lfcommithooks.pop()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
926
26371
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
927 def overridearchivecmd(orig, ui, repo, dest, **opts):
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
928 repo.unfiltered().lfstatus = True
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
929
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
930 try:
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
931 return orig(ui, repo.unfiltered(), dest, **opts)
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
932 finally:
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
933 repo.unfiltered().lfstatus = False
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
934
27043
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
935 def hgwebarchive(orig, web, req, tmpl):
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
936 web.repo.lfstatus = True
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
937
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
938 try:
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
939 return orig(web, req, tmpl)
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
940 finally:
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
941 web.repo.lfstatus = False
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
942
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
943 def overridearchive(orig, repo, dest, node, kind, decode=True, matchfn=None,
24227
e0f06228bb66 archive: change the default prefix to '' from None
Matt Harbison <matt_harbison@yahoo.com>
parents: 24222
diff changeset
944 prefix='', mtime=None, subrepos=None):
27043
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
945 # 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: 26371
diff changeset
946 # unfiltered repo's attr, so check that as well.
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
947 if not repo.lfstatus and not repo.unfiltered().lfstatus:
26371
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
948 return orig(repo, dest, node, kind, decode, matchfn, prefix, mtime,
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
949 subrepos)
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
950
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
951 # 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
952 # largefile caches, neither of which are modified.
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
953 if node is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
954 lfcommands.cachelfiles(repo.ui, repo, node)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
955
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
956 if kind not in archival.archivers:
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
957 raise error.Abort(_("unknown archive type '%s'") % kind)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
958
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
959 ctx = repo[node]
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
960
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
961 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
962 if prefix:
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
963 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
964 _('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
965 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
966 prefix = archival.tidyprefix(dest, kind, prefix)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
967
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
968 def write(name, mode, islink, getdata):
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
969 if matchfn and not matchfn(name):
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
970 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
971 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
972 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
973 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
974 archiver.addfile(prefix + name, mode, islink, data)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
975
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
976 archiver = archival.archivers[kind](dest, mtime or ctx.date()[0])
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
977
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
978 if repo.ui.configbool("ui", "archivemeta", True):
26212
e93036747902 global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26144
diff changeset
979 write('.hg_archival.txt', 0o644, False,
24819
0974d3a0be29 largefiles: use common function to build content of .hg_archival.txt
Yuya Nishihara <yuya@tcha.org>
parents: 24809
diff changeset
980 lambda: archival.buildmetadata(ctx))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
981
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
982 for f in ctx:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
983 ff = ctx.flags(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
984 getdata = ctx[f].data
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
985 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
986 if lfile is not None:
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
987 if node is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
988 path = lfutil.findfile(repo, getdata().strip())
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
989
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
990 if path is None:
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
991 raise error.Abort(
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
992 _('largefile %s not found in repo store or system cache')
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
993 % lfile)
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
994 else:
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
995 path = lfile
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
996
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
997 f = lfile
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
998
28427
00bd72629a45 largefiles: use util.readfile in overrides
Bryan O'Sullivan <bryano@fb.com>
parents: 28310
diff changeset
999 getdata = lambda: util.readfile(path)
26212
e93036747902 global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26144
diff changeset
1000 write(f, 'x' in ff and 0o755 or 0o644, 'l' in ff, getdata)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1001
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1002 if subrepos:
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18341
diff changeset
1003 for subpath in sorted(ctx.substate):
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1004 sub = ctx.workingsub(subpath)
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
1005 submatch = matchmod.subdirmatcher(subpath, matchfn)
26371
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
1006 sub._repo.lfstatus = True
23587
a2f139d25845 subrepo: drop the 'ui' parameter to archive()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23551
diff changeset
1007 sub.archive(archiver, prefix, submatch)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1008
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1009 archiver.done()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1010
31878
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31802
diff changeset
1011 def hgsubrepoarchive(orig, repo, archiver, prefix, match=None, decode=True):
33610
d3ab31bf9c0e largefiles: avoid a crash when archiving a subrepo with largefiles disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 32671
diff changeset
1012 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: 32671
diff changeset
1013 if not lfenabled or not repo._repo.lfstatus:
31878
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31802
diff changeset
1014 return orig(repo, archiver, prefix, match, decode)
26371
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
1015
17695
75f25bd4c7d4 largefiles: download missing subrepo revs when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 17658
diff changeset
1016 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
1017 rev = repo._state[1]
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1018 ctx = repo._repo[rev]
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1019
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1020 if ctx.node() is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1021 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
1022
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1023 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
1024 # 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
1025 # 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
1026 if match and not match(f):
1894dac619de subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 17107
diff changeset
1027 return
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1028 data = getdata()
31878
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31802
diff changeset
1029 if decode:
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31802
diff changeset
1030 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
1031
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1032 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
1033
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1034 for f in ctx:
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1035 ff = ctx.flags(f)
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1036 getdata = ctx[f].data
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1037 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1038 if lfile is not None:
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1039 if ctx.node() is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1040 path = lfutil.findfile(repo._repo, getdata().strip())
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1041
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1042 if path is None:
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
1043 raise error.Abort(
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1044 _('largefile %s not found in repo store or system cache')
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1045 % lfile)
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1046 else:
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1047 path = lfile
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1048
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1049 f = lfile
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1050
28427
00bd72629a45 largefiles: use util.readfile in overrides
Bryan O'Sullivan <bryano@fb.com>
parents: 28310
diff changeset
1051 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
1052
26212
e93036747902 global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26144
diff changeset
1053 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
1054
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18341
diff changeset
1055 for subpath in sorted(ctx.substate):
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1056 sub = ctx.workingsub(subpath)
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
1057 submatch = matchmod.subdirmatcher(subpath, match)
26371
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
1058 sub._repo.lfstatus = True
31878
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31802
diff changeset
1059 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
1060
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
1061 # 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
1062 # 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
1063 # 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
1064 # largefiles were changed. This is used by bisect, backout and fetch.
24603
1bf71faf042e cmdutil: allow bailifchanged to ignore merging in progress
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24568
diff changeset
1065 def overridebailifchanged(orig, repo, *args, **kwargs):
1bf71faf042e cmdutil: allow bailifchanged to ignore merging in progress
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24568
diff changeset
1066 orig(repo, *args, **kwargs)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1067 repo.lfstatus = True
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1068 s = repo.status()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1069 repo.lfstatus = False
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1070 if s.modified or s.added or s.removed or s.deleted:
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
1071 raise error.Abort(_('uncommitted changes'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1072
28615
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 28560
diff changeset
1073 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: 28560
diff changeset
1074 repo.lfstatus = True
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 28560
diff changeset
1075 try:
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 28560
diff changeset
1076 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: 28560
diff changeset
1077 finally:
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 28560
diff changeset
1078 repo.lfstatus = False
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 28560
diff changeset
1079
23849
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23794
diff changeset
1080 def cmdutilforget(orig, ui, repo, match, prefix, explicitonly):
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23794
diff changeset
1081 normalmatcher = composenormalfilematcher(match, repo[None].manifest())
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23794
diff changeset
1082 bad, forgot = orig(ui, repo, normalmatcher, prefix, explicitonly)
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23794
diff changeset
1083 m = composelargefilematcher(match, repo[None].manifest())
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1084
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1085 try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1086 repo.lfstatus = True
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1087 s = repo.status(match=m, clean=True)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1088 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1089 repo.lfstatus = False
32433
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32432
diff changeset
1090 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
1091 forget = sorted(s.modified + s.added + s.deleted + s.clean)
32433
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32432
diff changeset
1092 forget = [f for f in forget if lfutil.standin(f) in manifest]
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1093
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1094 for f in forget:
32397
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32396
diff changeset
1095 fstandin = lfutil.standin(f)
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32396
diff changeset
1096 if fstandin not in repo.dirstate and not repo.wvfs.isdir(fstandin):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1097 ui.warn(_('not removing %s: file is already untracked\n')
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1098 % m.rel(f))
23849
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23794
diff changeset
1099 bad.append(f)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1100
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1101 for f in forget:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1102 if ui.verbose or not m.exact(f):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1103 ui.status(_('removing %s\n') % m.rel(f))
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1104
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1105 # Need to lock because standin files are deleted then removed from the
17407
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 17299
diff changeset
1106 # repository and we could race in-between.
28479
0e55e93b50b5 with: use context manager for wlock in cmdutilforget
Bryan O'Sullivan <bryano@fb.com>
parents: 28478
diff changeset
1107 with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1108 lfdirstate = lfutil.openlfdirstate(ui, repo)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1109 for f in forget:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1110 if lfdirstate[f] == 'a':
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1111 lfdirstate.drop(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1112 else:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1113 lfdirstate.remove(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1114 lfdirstate.write()
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
1115 standins = [lfutil.standin(f) for f in forget]
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
1116 for f in standins:
32088
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31878
diff changeset
1117 repo.wvfs.unlinkpath(f, ignoremissing=True)
23849
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23794
diff changeset
1118 rejected = repo[None].forget(standins)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1119
23849
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23794
diff changeset
1120 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: 23794
diff changeset
1121 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: 23794
diff changeset
1122 return bad, forgot
17591
cbacb5a813dd largefiles: preserve the exit status of the forget command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17590
diff changeset
1123
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1124 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
1125 """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
1126 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
1127
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1128 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
1129
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
1130 '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
1131 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
1132 """
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
1133 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
1134 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
1135 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
1136 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
1137 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
1138 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
1139 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
1140 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
1141 if lfhashes:
30105
85868ecf2c0d largefiles: make storefactory._openstore public
liscju <piotr.listkiewicz@gmail.com>
parents: 30068
diff changeset
1142 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
1143 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
1144 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
1145 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
1146
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
1147 def outgoinghook(ui, repo, other, opts, missing):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1148 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
1149 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
1150 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
1151 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
1152 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
1153 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
1154 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
1155 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
1156 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
1157 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
1158 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
1159 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
1160 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
1161 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
1162 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
1163 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
1164 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
1165 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
1166 pass
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1167 _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
1168
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
1169 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
1170 ui.status(_('largefiles: no files to upload\n'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1171 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
1172 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
1173 % (len(lfhashes)))
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
1174 for file in sorted(toupload):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1175 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
1176 showhashes(file)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1177 ui.status('\n')
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1178
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1179 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
1180 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
1181 if changes is None:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1182 if largeopt:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1183 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
1184 else:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1185 return (False, False)
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1186 elif largeopt:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1187 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
1188 if peer is None:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1189 # 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
1190 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
1191 return
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1192
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1193 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
1194 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
1195 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
1196 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
1197 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
1198 _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
1199
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1200 if not toupload:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1201 # 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
1202 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
1203 else:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1204 # 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
1205 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
1206 % (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
1207
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1208 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
1209 try:
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1210 repo.lfstatus = True
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1211 orig(ui, repo, *pats, **opts)
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1212 finally:
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1213 repo.lfstatus = False
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1214
26962
cd9cc7f30427 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26961
diff changeset
1215 def scmutiladdremove(orig, repo, matcher, prefix, opts=None, dry_run=None,
17658
a02c1ffddae9 largefiles: handle commit -A properly, after a --large commit (issue3542)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17617
diff changeset
1216 similarity=None):
26962
cd9cc7f30427 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26961
diff changeset
1217 if opts is None:
cd9cc7f30427 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26961
diff changeset
1218 opts = {}
16644
b371056ae353 largefiles: follow normal codepath for addremove if non-largefiles repo (issue3249)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16516
diff changeset
1219 if not lfutil.islfilesrepo(repo):
23545
f1b06a8aad42 commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents: 23541
diff changeset
1220 return orig(repo, matcher, prefix, opts, dry_run, similarity)
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1221 # 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: 17617
diff changeset
1222 lfdirstate = lfutil.openlfdirstate(repo.ui, repo)
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
1223 unsure, s = lfdirstate.status(matchmod.always(repo.root, repo.getcwd()), [],
22911
509e2cbee679 dirstate: separate 'lookup' status field from others
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22630
diff changeset
1224 False, False, False)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1225
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1226 # 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
1227 # 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
1228 # 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
1229 # confused state later.
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1230 if s.deleted:
23753
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23745
diff changeset
1231 m = copy.copy(matcher)
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23745
diff changeset
1232
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23745
diff changeset
1233 # 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: 23745
diff changeset
1234 # 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: 23745
diff changeset
1235 # 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: 23745
diff changeset
1236 # 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: 23745
diff changeset
1237 matchfn = m.matchfn
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23745
diff changeset
1238 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: 23745
diff changeset
1239
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23745
diff changeset
1240 removelargefiles(repo.ui, repo, True, m, **opts)
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1241 # 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
1242 # largefiles will be
23781
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23780
diff changeset
1243 added, bad = addlargefiles(repo.ui, repo, True, matcher, **opts)
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1244 # 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
1245 # function to take care of the rest. Make sure it doesn't do anything with
23541
891aaa7c0c70 scmutil: pass a matcher to scmutil.addremove() instead of a list of patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23538
diff changeset
1246 # largefiles by passing a matcher that will ignore them.
23781
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23780
diff changeset
1247 matcher = composenormalfilematcher(matcher, repo[None].manifest(), added)
23545
f1b06a8aad42 commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents: 23541
diff changeset
1248 return orig(repo, matcher, prefix, opts, dry_run, similarity)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1249
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
1250 # Calling purge with --all will cause the largefiles to be deleted.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1251 # Override repo.status to prevent this from happening.
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1252 def overridepurge(orig, ui, repo, *dirs, **opts):
23647
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23646
diff changeset
1253 # 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: 23646
diff changeset
1254 # 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: 23646
diff changeset
1255 # 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: 23646
diff changeset
1256 # 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: 23646
diff changeset
1257 # 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: 23646
diff changeset
1258 # one, defeating the monkey patch.
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23646
diff changeset
1259 #
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23646
diff changeset
1260 # 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: 23646
diff changeset
1261 # cleaner instead.
18011
848c428bb5ee largefile: status is buggy on repoproxy, so run unfiltered
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 17894
diff changeset
1262 repo = repo.unfiltered()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1263 oldstatus = repo.status
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1264 def overridestatus(node1='.', node2=None, match=None, ignored=False,
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1265 clean=False, unknown=False, listsubrepos=False):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1266 r = oldstatus(node1, node2, match, ignored, clean, unknown,
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1267 listsubrepos)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1268 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
1269 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
1270 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
1271 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
1272 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
1273 repo.status = overridestatus
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1274 orig(ui, repo, *dirs, **opts)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1275 repo.status = oldstatus
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1276 def overriderollback(orig, ui, repo, **opts):
28480
4692571df9ee with: use context manager for wlock in overridepurge
Bryan O'Sullivan <bryano@fb.com>
parents: 28479
diff changeset
1277 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
1278 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
1279 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
1280 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
1281 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
1282 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
1283 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
1284 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
1285
22285
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1286 pctx = repo['.']
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1287 for f in repo.dirstate:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1288 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
1289 orphans.discard(f)
22285
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1290 if repo.dirstate[f] == 'r':
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1291 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
1292 elif f in pctx:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1293 fctx = pctx[f]
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1294 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
1295 else:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1296 # 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
1297 # '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
1298 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
1299 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
1300 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
1301
15794
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15792
diff changeset
1302 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
1303 orphans = set(lfdirstate)
15794
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15792
diff changeset
1304 lfiles = lfutil.listlfiles(repo)
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15792
diff changeset
1305 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
1306 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
1307 orphans.discard(file)
7d1eac06ab2b largefiles: drop orphan entries from lfdristat at "hg rollback"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22096
diff changeset
1308 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
1309 lfdirstate.drop(lfile)
15794
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15792
diff changeset
1310 lfdirstate.write()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1311 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
1312
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1313 def overridetransplant(orig, ui, repo, *revs, **opts):
23274
0ec2e124fcc0 largefiles: update standins only at the 1st commit of "transplant --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23273
diff changeset
1314 resuming = opts.get('continue')
0ec2e124fcc0 largefiles: update standins only at the 1st commit of "transplant --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23273
diff changeset
1315 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
1316 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
1317 try:
bf502ccc46d7 largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15967
diff changeset
1318 result = orig(ui, repo, *revs, **opts)
bf502ccc46d7 largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15967
diff changeset
1319 finally:
23275
fae708cb32d1 largefiles: avoid printing messages while transplanting by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23274
diff changeset
1320 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
1321 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
1322 return result
16439
290850e7aa43 largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16248
diff changeset
1323
290850e7aa43 largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16248
diff changeset
1324 def overridecat(orig, ui, repo, file1, *pats, **opts):
17269
acfab0754584 largefiles: support revsets for cat
Matt Harbison <matt_harbison@yahoo.com>
parents: 17268
diff changeset
1325 ctx = scmutil.revsingle(repo, opts.get('rev'))
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1326 err = 1
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1327 notbad = set()
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1328 m = scmutil.match(ctx, (file1,) + pats, opts)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1329 origmatchfn = m.matchfn
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1330 def lfmatchfn(f):
21087
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
1331 if origmatchfn(f):
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
1332 return True
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1333 lf = lfutil.splitstandin(f)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1334 if lf is None:
21087
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
1335 return False
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1336 notbad.add(lf)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1337 return origmatchfn(lf)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1338 m.matchfn = lfmatchfn
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1339 origbadfn = m.bad
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1340 def lfbadfn(f, msg):
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1341 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
1342 origbadfn(f, msg)
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1343 m.bad = lfbadfn
24809
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1344
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1345 origvisitdirfn = m.visitdir
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1346 def lfvisitdirfn(dir):
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1347 if dir == lfutil.shortname:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1348 return True
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1349 ret = origvisitdirfn(dir)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1350 if ret:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1351 return ret
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1352 lf = lfutil.splitstandin(dir)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1353 if lf is None:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1354 return False
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1355 return origvisitdirfn(lf)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1356 m.visitdir = lfvisitdirfn
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1357
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1358 for f in ctx.walk(m):
30921
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1359 with cmdutil.makefileobj(repo, opts.get('output'), ctx.node(),
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1360 pathname=f) as fp:
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1361 lf = lfutil.splitstandin(f)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1362 if lf is None or origmatchfn(f):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1363 # duplicating unreachable code from commands.cat
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1364 data = ctx[f].data()
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1365 if opts.get('decode'):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1366 data = repo.wwritedata(f, data)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1367 fp.write(data)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1368 else:
32514
3e37b479ce2f largefiles: replace readstandin() by readasstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32438
diff changeset
1369 hash = lfutil.readasstandin(ctx[f])
30921
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1370 if not lfutil.inusercache(repo.ui, hash):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1371 store = storefactory.openstore(repo)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1372 success, missing = store.get([(lf, hash)])
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1373 if len(success) != 1:
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1374 raise error.Abort(
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1375 _('largefile %s is not in cache and could not be '
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1376 'downloaded') % lf)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1377 path = lfutil.usercachepath(repo.ui, hash)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1378 with open(path, "rb") as fpin:
30960
7356e6b1f5b8 util: increase filechunkiter size to 128k
Mads Kiilerich <madski@unity3d.com>
parents: 30921
diff changeset
1379 for chunk in util.filechunkiter(fpin):
30921
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1380 fp.write(chunk)
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1381 err = 0
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1382 return err
17878
d1d0140287b8 largefiles: don't copy largefiles from working dir to the store while converting
Matt Harbison <matt_harbison@yahoo.com>
parents: 17850
diff changeset
1383
27991
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27690
diff changeset
1384 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
1385 *args, **kwargs):
27991
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27690
diff changeset
1386 matcher = kwargs.get('matcher', None)
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27690
diff changeset
1387 # 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: 27690
diff changeset
1388 partial = matcher and not matcher.always()
28481
f087b7095381 with: use context manager for wlock in mergeupdate
Bryan O'Sullivan <bryano@fb.com>
parents: 28480
diff changeset
1389 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
1390 # branch | | |
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1391 # 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
1392 # -------+-------+---------+--------------
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1393 # 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
1394 # 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
1395 # 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
1396 # 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
1397 # 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
1398 # 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
1399 # 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
1400 # 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
1401 #
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1402 # (*) 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
1403 # (*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
1404
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1405 lfdirstate = lfutil.openlfdirstate(repo.ui, repo)
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
1406 unsure, s = lfdirstate.status(matchmod.always(repo.root,
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1407 repo.getcwd()),
30969
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1408 [], False, True, False)
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1409 oldclean = set(s.clean)
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1410 pctx = repo['.']
32432
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32397
diff changeset
1411 dctx = repo[node]
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1412 for lfile in unsure + s.modified:
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1413 lfileabs = repo.wvfs.join(lfile)
29465
a7f7b7acf489 largefiles: replace invocation of os.path module by vfs in overrides.py
liscju <piotr.listkiewicz@gmail.com>
parents: 29065
diff changeset
1414 if not repo.wvfs.exists(lfileabs):
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1415 continue
32396
1f6c932862e5 largefiles: replace hashrepofile by hashfile (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32395
diff changeset
1416 lfhash = lfutil.hashfile(lfileabs)
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1417 standin = lfutil.standin(lfile)
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1418 lfutil.writestandin(repo, standin, lfhash,
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1419 lfutil.getexecutable(lfileabs))
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1420 if (standin in pctx and
32514
3e37b479ce2f largefiles: replace readstandin() by readasstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32438
diff changeset
1421 lfhash == lfutil.readasstandin(pctx[standin])):
30969
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1422 oldclean.add(lfile)
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1423 for lfile in s.added:
32432
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32397
diff changeset
1424 fstandin = lfutil.standin(lfile)
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32397
diff changeset
1425 if fstandin not in dctx:
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32397
diff changeset
1426 # 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: 32397
diff changeset
1427 # (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: 32397
diff changeset
1428 continue
32438
0eec36112e58 largefiles: add lfile argument to updatestandin() for efficiency (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32435
diff changeset
1429 lfutil.updatestandin(repo, lfile, fstandin)
30969
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1430 # 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: 30181
diff changeset
1431 # interrupted before largefiles and lfdirstate are synchronized
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1432 for lfile in oldclean:
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1433 lfdirstate.normallookup(lfile)
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1434 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
1435
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1436 oldstandins = lfutil.getstandinsstate(repo)
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1437
27991
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27690
diff changeset
1438 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
1439
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1440 newstandins = lfutil.getstandinsstate(repo)
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1441 filelist = lfutil.getlfilestoupdate(oldstandins, newstandins)
30969
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1442
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1443 # 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: 30181
diff changeset
1444 # 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: 30181
diff changeset
1445 for lfile in oldclean.difference(filelist):
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1446 lfdirstate.normal(lfile)
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1447 lfdirstate.write()
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1448
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1449 if branchmerge or force or partial:
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1450 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
1451
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1452 lfcommands.updatelfiles(repo.ui, repo, filelist=filelist,
24967
b8c3a0994b37 largefiles: always consider updatelfiles 'checked' parameter set
Mads Kiilerich <madski@unity3d.com>
parents: 24966
diff changeset
1453 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
1454
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1455 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
1456
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1457 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
1458 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
1459
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1460 filelist = []
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1461 for f in files:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1462 lf = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1463 if lf is not None:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1464 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
1465 if filelist:
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1466 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
1467 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
1468
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1469 return result