annotate hgext/largefiles/overrides.py @ 32432:32d998dc2a00

largefiles: omit updating newly added standin at linear merging Updating standin for newly added largefile is needed, only if same name largefile exists in destination context at linear merging. In such case, updated standin is used to detect divergence of largefile at overridefilemerge(). Otherwise, standin doesn't have any responsibility for its content (usually, it is empty).
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Mon, 27 Mar 2017 09:44:34 +0900
parents 8228bc8fed8c
children 1af4a1641bdb
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.
19472
32e502b26983 largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents: 19226
diff changeset
368 if standin in repo[ctx.node()]:
32e502b26983 largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents: 19226
diff changeset
369 m._files[i] = standin
23988
344939126579 largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents: 23905
diff changeset
370 elif m._files[i] not in repo[ctx.node()] \
344939126579 largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents: 23905
diff changeset
371 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
372 m._files.append(standin)
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
373
25624
1c8c33eaea0a match: rename _fmap to _fileroots for clarity
Drew Gottlieb <drgott@google.com>
parents: 25490
diff changeset
374 m._fileroots = set(m._files)
18813
d780c472463c largefiles: fix _always for match overrides
Siddharth Agarwal <sid0@fb.com>
parents: 18782
diff changeset
375 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
376 origmatchfn = m.matchfn
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
377 def lfmatchfn(f):
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
378 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
379 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
380 return True
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
381 r = origmatchfn(f)
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
382 return r
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
383 m.matchfn = lfmatchfn
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
384
24278
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24277
diff changeset
385 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
386 return m, pats
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
387
22169
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
388 # 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
389 # (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
390 # (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
391 # 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
392 # 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
393 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
394 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
395 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
396 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
397
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
398 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
399 oldmakelogfilematcher = cmdutil._makenofollowlogfilematcher
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
400 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
401
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
402 try:
17589
0f39e9355d3c largefiles: preserve the exit status of the log command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17588
diff changeset
403 return orig(ui, repo, *pats, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
404 finally:
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
405 restorematchandpatsfn()
22169
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
406 setattr(cmdutil, '_makenofollowlogfilematcher', oldmakelogfilematcher)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
407
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
408 def overrideverify(orig, ui, repo, *pats, **opts):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
409 large = opts.pop('large', False)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
410 all = opts.pop('lfa', False)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
411 contents = opts.pop('lfc', False)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
412
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
413 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
414 if large or all or contents:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
415 result = result or lfcommands.verifylfiles(ui, repo, all, contents)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
416 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
417
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
418 def overridedebugstate(orig, ui, repo, *pats, **opts):
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
419 large = opts.pop('large', False)
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
420 if large:
21088
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
421 class fakerepo(object):
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
422 dirstate = lfutil.openlfdirstate(ui, repo)
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
423 orig(ui, fakerepo, *pats, **opts)
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
424 else:
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
425 orig(ui, repo, *pats, **opts)
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
426
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
427 # 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
428 # _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
429 # 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
430 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
431 # 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
432 # 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
433 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
434 # 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
435 # 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
436 # 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
437 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
438 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
439 return False
23665
0297d8469350 merge: don't overwrite untracked file at directory rename target
Martin von Zweigbergk <martinvonz@google.com>
parents: 23656
diff changeset
440 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
441
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
442 # 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
443 # 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
444 #
23307
9dd0d0d61a24 largefiles: update comments to refer to the right overridden method
Martin von Zweigbergk <martinvonz@google.com>
parents: 23276
diff changeset
445 # 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
446 # 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
447 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
448 # 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
449 # 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
450 # 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
451 # 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
452 # 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
453 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
454 # 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
455 # 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
456 # 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
457 # triggers a merge action.
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
458 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
459 # 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
460 # 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
461 # 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
462 # 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
463 # presumably changed on purpose.
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
464 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
465 # 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
466 # 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
467 # will update the largefiles.
21081
ffd7b6ce46ff merge: pass merge ancestor to calculateupdates as a list
Mads Kiilerich <madski@unity3d.com>
parents: 21080
diff changeset
468 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
469 acceptremote, *args, **kwargs):
18605
bcf29565d89f manifestmerge: pass in branchmerge and force separately
Siddharth Agarwal <sid0@fb.com>
parents: 18600
diff changeset
470 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
471 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
472 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
473
8eb99e5cec4a largefiles: don't process merge actions at all when overwriting
Mads Kiilerich <madski@unity3d.com>
parents: 19805
diff changeset
474 if overwrite:
23534
a5887f2da5e6 merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents: 23511
diff changeset
475 return actions, diverge, renamedelete
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
476
23537
38e55e55ae4d largefiles: rewrite merge code using dictionary with entry per file
Martin von Zweigbergk <martinvonz@google.com>
parents: 23536
diff changeset
477 # 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
478 lfiles = set()
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
479 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
480 splitstandin = lfutil.splitstandin(f)
23653
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23647
diff changeset
481 if splitstandin in p1:
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23647
diff changeset
482 lfiles.add(splitstandin)
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23647
diff changeset
483 elif lfutil.standin(f) in p1:
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23647
diff changeset
484 lfiles.add(f)
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
485
28559
ee3123e19db9 largefiles: make prompt order deterministic
Mads Kiilerich <madski@unity3d.com>
parents: 28481
diff changeset
486 for lfile in sorted(lfiles):
23538
42ae1b1f048f largefiles: start by finding files of interest
Martin von Zweigbergk <martinvonz@google.com>
parents: 23537
diff changeset
487 standin = lfutil.standin(lfile)
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
488 (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
489 (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
490 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
491 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
492 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
493 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
494 # 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
495 # 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
496 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
497 '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
498 '$$ &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
499 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
500 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
501 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
502 else: # keep local normal file
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
503 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
504 if branchmerge:
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
505 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
506 else:
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
507 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
508 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
509 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
510 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
511 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
512 # 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
513 # 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
514 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
515 '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
516 '$$ &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
517 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
518 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
519 # 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
520 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
521 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
522 else:
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
523 # "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
524 # removal of itself
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
525 actions[lfile] = ('lfmr', None,
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
526 '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
527
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
528 # 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
529 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
530 else: # pick remote normal file
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
531 actions[lfile] = ('g', largs, 'replaces standin')
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
532 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
533
23654
7fd1a6c27e60 largefiles: don't duplicate 'actions' into 'actionbyfile'
Martin von Zweigbergk <martinvonz@google.com>
parents: 23653
diff changeset
534 return actions, diverge, renamedelete
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
535
22196
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
536 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
537 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
538 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
539 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
540 # 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
541 # 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
542 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
543 # 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
544 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
545 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
546
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
547 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
548
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
549 # 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
550 # 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
551 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
552 labels=None):
27690
df9b73d2d444 largefiles: fall back to the original for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents: 27674
diff changeset
553 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
554 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
555 labels=labels)
20298
9d350fa0708e largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents: 20297
diff changeset
556
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
557 ahash = fca.data().strip().lower()
40800668e019 largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents: 20638
diff changeset
558 dhash = fcd.data().strip().lower()
40800668e019 largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents: 20638
diff changeset
559 ohash = fco.data().strip().lower()
40800668e019 largefiles: don't prompt when one side of merge was changed but didn't change
Mads Kiilerich <madski@unity3d.com>
parents: 20638
diff changeset
560 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
561 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
562 (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
563 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
564 _('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
565 '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
566 '$$ &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
567 (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
568 0) == 1)):
20298
9d350fa0708e largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents: 20297
diff changeset
569 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
570 return True, 0, False
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
571
24961
4906dc0e038c copies: add matcher parameter to copy logic
Durham Goode <durham@fb.com>
parents: 24819
diff changeset
572 def copiespathcopies(orig, ctx1, ctx2, match=None):
4906dc0e038c copies: add matcher parameter to copy logic
Durham Goode <durham@fb.com>
parents: 24819
diff changeset
573 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
574 updated = {}
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24279
diff changeset
575
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24279
diff changeset
576 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
577 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
578
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24279
diff changeset
579 return updated
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24279
diff changeset
580
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
581 # 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
582 # 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
583 # 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
584 # 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
585 # dirstate updated.
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
586 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
587 # doesn't remove largefile on rename
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
588 if len(pats) < 2:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
589 # this isn't legal, let the original function deal with it
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
590 return orig(ui, repo, pats, opts, rename)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
591
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
592 # 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
593 # 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
594 # 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
595 # match largefiles and run it again.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
596 nonormalfiles = False
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
597 nolfiles = False
21091
dd584d1a75e7 largefiles: copy override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21090
diff changeset
598 installnormalfilesmatchfn(repo[None].manifest())
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
599 try:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
600 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
601 except error.Abort as e:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
602 if str(e) != _('no files to copy'):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
603 raise e
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
604 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
605 nonormalfiles = True
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
606 result = 0
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
607 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
608 restorematchfn()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
609
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
610 # The first rename can cause our current working directory to be removed.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
611 # In that case there is nothing left to copy/rename so just quit.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
612 try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
613 repo.getcwd()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
614 except OSError:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
615 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
616
24018
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23988
diff changeset
617 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
618 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
619 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
620
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23988
diff changeset
621 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
622 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
623
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 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
625 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
626 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
627
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
628 try:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
629 # 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
630 # 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
631 wlock = repo.wlock()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
632
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
633 manifest = repo[None].manifest()
26959
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26958
diff changeset
634 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
635 default='relpath', badfn=None):
26959
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26958
diff changeset
636 if opts is None:
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26958
diff changeset
637 opts = {}
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
638 newpats = []
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
639 # The patterns were previously mangled to add the standin
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
640 # directory; we need to remove that now
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
641 for pat in pats:
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
642 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
643 newpats.append(pat.replace(lfutil.shortname, ''))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
644 else:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
645 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
646 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
647 m = copy.copy(match)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
648 lfile = lambda f: lfutil.standin(f) in manifest
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
649 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
650 m._fileroots = set(m._files)
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
651 origmatchfn = m.matchfn
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
652 def matchfn(f):
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
653 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
654 return (lfile is not None and
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
655 (f in manifest) and
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
656 origmatchfn(lfile) or
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
657 None)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
658 m.matchfn = matchfn
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
659 return m
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
660 oldmatch = installmatchfn(overridematch)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
661 listpats = []
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
662 for pat in pats:
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
663 if matchmod.patkind(pat) is not None:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
664 listpats.append(pat)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
665 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
666 listpats.append(makestandin(pat))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
667
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
668 try:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
669 origcopyfile = util.copyfile
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
670 copiedfiles = []
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
671 def overridecopyfile(src, dest):
15598
a77ce45584ef largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15576
diff changeset
672 if (lfutil.shortname in src and
a77ce45584ef largefiles: fix rename (issue3093)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15576
diff changeset
673 dest.startswith(repo.wjoin(lfutil.shortname))):
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
674 destlfile = dest.replace(lfutil.shortname, '')
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
675 if not opts['force'] and os.path.exists(destlfile):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
676 raise IOError('',
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
677 _('destination largefile already exists'))
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
678 copiedfiles.append((src, dest))
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
679 origcopyfile(src, dest)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
680
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
681 util.copyfile = overridecopyfile
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
682 result += orig(ui, repo, listpats, opts, rename)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
683 finally:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
684 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
685
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
686 lfdirstate = lfutil.openlfdirstate(ui, repo)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
687 for (src, dest) in copiedfiles:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
688 if (lfutil.shortname in src and
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
689 dest.startswith(repo.wjoin(lfutil.shortname))):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
690 srclfile = src.replace(repo.wjoin(lfutil.standin('')), '')
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
691 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
692 destlfiledir = repo.wvfs.dirname(repo.wjoin(destlfile)) or '.'
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
693 if not os.path.isdir(destlfiledir):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
694 os.makedirs(destlfiledir)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
695 if rename:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
696 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
697
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
698 # 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
699 # directories as a side-effect.
32088
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31878
diff changeset
700 repo.wvfs.unlinkpath(srclfile, ignoremissing=True)
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
701 lfdirstate.remove(srclfile)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
702 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
703 util.copyfile(repo.wjoin(srclfile),
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
704 repo.wjoin(destlfile))
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
705
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
706 lfdirstate.add(destlfile)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
707 lfdirstate.write()
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
708 except error.Abort as e:
25490
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
709 if str(e) != _('no files to copy'):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
710 raise e
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
711 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25289
diff changeset
712 nolfiles = True
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
713 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
714 restorematchfn()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
715 wlock.release()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
716
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
717 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
718 raise error.Abort(_('no files to copy'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
719
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
720 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
721
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
722 # 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
723 # 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
724 # 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
725 # the necessary largefiles.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
726 #
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
727 # 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
728 # 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
729 # 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
730 # 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
731 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
732 # 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
733 # 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
734 # 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
735 with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
736 lfdirstate = lfutil.openlfdirstate(ui, repo)
23039
1350b9170089 largefiles: remove confusing rev parameter for lfdirstatestatus
Mads Kiilerich <madski@unity3d.com>
parents: 23038
diff changeset
737 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
738 lfdirstate.write()
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
739 for lfile in s.modified:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
740 lfutil.updatestandin(repo, lfutil.standin(lfile))
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
741 for lfile in s.deleted:
32397
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32396
diff changeset
742 fstandin = lfutil.standin(lfile)
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32396
diff changeset
743 if (repo.wvfs.exists(fstandin)):
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32396
diff changeset
744 repo.wvfs.unlink(fstandin)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
745
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
746 oldstandins = lfutil.getstandinsstate(repo)
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
747
26961
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26960
diff changeset
748 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
749 default='relpath', badfn=None):
26961
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26960
diff changeset
750 if opts is None:
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26960
diff changeset
751 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
752 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
753 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
754
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24041
diff changeset
755 # 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
756 # 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
757 # 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
758 # this invocation of match.
24566
66a69da9cde4 largefiles: override cmdutil.revert() instead of comands.revert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24456
diff changeset
759 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
760 False)
24188
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24041
diff changeset
761
21095
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
762 def tostandin(f):
24567
2703eb73a3af largefiles: extract and reuse 'standin' variable in overriderevert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24566
diff changeset
763 standin = lfutil.standin(f)
24568
5b85a5bc5bbb revert: evaluate filesets against working directory (issue4497)
Martin von Zweigbergk <martinvonz@google.com>
parents: 24567
diff changeset
764 if standin in ctx or standin in mctx:
24567
2703eb73a3af largefiles: extract and reuse 'standin' variable in overriderevert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24566
diff changeset
765 return standin
2703eb73a3af largefiles: extract and reuse 'standin' variable in overriderevert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24566
diff changeset
766 elif standin in repo[None] or lfdirstate[f] == 'r':
21095
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
767 return None
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
768 return f
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
769 m._files = [tostandin(f) for f in m._files]
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
770 m._files = [f for f in m._files if f is not None]
25624
1c8c33eaea0a match: rename _fmap to _fileroots for clarity
Drew Gottlieb <drgott@google.com>
parents: 25490
diff changeset
771 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
772 origmatchfn = m.matchfn
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
773 def matchfn(f):
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
774 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
775 if lfile is not None:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
776 return (origmatchfn(lfile) and
24568
5b85a5bc5bbb revert: evaluate filesets against working directory (issue4497)
Martin von Zweigbergk <martinvonz@google.com>
parents: 24567
diff changeset
777 (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
778 return origmatchfn(f)
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
779 m.matchfn = matchfn
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
780 return m
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
781 oldmatch = installmatchfn(overridematch)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
782 try:
24566
66a69da9cde4 largefiles: override cmdutil.revert() instead of comands.revert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24456
diff changeset
783 orig(ui, repo, ctx, parents, *pats, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
784 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
785 restorematchfn()
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
786
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
787 newstandins = lfutil.getstandinsstate(repo)
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
788 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
789 # 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
790 # 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
791 # 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
792 # '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
793 # of target (standin) file.
0cb34b3991f8 largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21884
diff changeset
794 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
795 normallookup=True)
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
796
23183
51c9196a6bd0 largefiles: remove meaningless code path for "hg pull --rebase"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23145
diff changeset
797 # 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
798 # largefiles updated remotely
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
799 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
800 revsprepull = len(repo)
18977
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
801 if not source:
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
802 source = 'default'
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
803 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
804 result = orig(ui, repo, source, **opts)
18977
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
805 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
806 lfrevs = opts.get('lfrev', [])
16692
b9969574540a largefiles: add --all-largefiles flag to pull
Na'Tosha Bard <natosha@unity3d.com>
parents: 16691
diff changeset
807 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
808 lfrevs.append('pulled()')
18978
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
809 if lfrevs and revspostpull > revsprepull:
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
810 numcached = 0
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
811 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
812 try:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
813 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
814 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
815 (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
816 numcached += len(cached)
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
817 finally:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
818 del repo.firstpulled
18978
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
819 ui.status(_("%d largefiles cached\n") % numcached)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
820 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
821
29628
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
822 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
823 """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
824 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
825 if lfrevs:
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
826 opargs = kwargs.setdefault('opargs', {})
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
827 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
828 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
829
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
830 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
831 """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
832 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
833 pushop = orig(*args, **kwargs)
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
834 pushop.lfrevs = lfrevs
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
835 return pushop
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 29465
diff changeset
836
29065
dcb4209bd30d revset: replace extpredicate by revsetpredicate of registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28864
diff changeset
837 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
838
42910f9fffeb revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27992
diff changeset
839 @revsetpredicate('pulled()')
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
840 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
841 """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
842
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
843 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
844
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
845 .. container:: verbose
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
846
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
847 Some examples:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
848
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
849 - 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
850
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
851 hg pull -lfrev "pulled()"
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
852
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
853 - 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
854
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
855 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
856
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 try:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
860 firstpulled = repo.firstpulled
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
861 except AttributeError:
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
862 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
863 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
864
16652
98a9266db803 largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16650
diff changeset
865 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
866 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
867 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
868 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
869 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
870 raise error.Abort(_(
21096
a45ed365904a i18n: fix "% inside _()" problem
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21095
diff changeset
871 '--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
872 d)
17617
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
873
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
874 return orig(ui, source, dest, **opts)
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
875
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
876 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
877 result = orig(ui, opts, *args, **kwargs)
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
878
17824
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
879 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
880 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
881 repo = destrepo.local()
56136786000f largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents: 17614
diff changeset
882
24991
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24967
diff changeset
883 # 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
884 # 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
885 # 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
886 if not repo:
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24967
diff changeset
887 return result
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24967
diff changeset
888
24041
e1dbe0b215ae largefiles: set the extension as enabled locally after a clone requiring it
Matt Harbison <matt_harbison@yahoo.com>
parents: 24018
diff changeset
889 # 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
890 if 'largefiles' in repo.requirements:
30921
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
891 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
892 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
893
17615
56136786000f largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents: 17614
diff changeset
894 # 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
895 # 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
896 # 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
897 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
898 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
899
17824
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
900 if missing != 0:
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
901 return None
17617
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
902
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17616
diff changeset
903 return result
16652
98a9266db803 largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16650
diff changeset
904
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
905 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
906 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
907 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
908
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
909 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
910 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
911 repo._lfstatuswriters.append(lambda *msg, **opts: None)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
912 try:
17590
40c988f108d0 largefiles: preserve the exit status of the rebase command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17589
diff changeset
913 return orig(ui, repo, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
914 finally:
23190
383ff455cab8 largefiles: avoid printing messages while rebasing by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23189
diff changeset
915 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
916 repo._lfcommithooks.pop()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
917
26371
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
918 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
919 repo.unfiltered().lfstatus = True
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
920
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
921 try:
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
922 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
923 finally:
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
924 repo.unfiltered().lfstatus = False
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
925
27043
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
926 def hgwebarchive(orig, web, req, tmpl):
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
927 web.repo.lfstatus = True
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
928
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
929 try:
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
930 return orig(web, req, tmpl)
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
931 finally:
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
932 web.repo.lfstatus = False
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
933
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
934 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
935 prefix='', mtime=None, subrepos=None):
27043
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 26371
diff changeset
936 # 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
937 # 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
938 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
939 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
940 subrepos)
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
941
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
942 # 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
943 # largefile caches, neither of which are modified.
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
944 if node is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
945 lfcommands.cachelfiles(repo.ui, repo, node)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
946
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
947 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
948 raise error.Abort(_("unknown archive type '%s'") % kind)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
949
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
950 ctx = repo[node]
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
951
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
952 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
953 if prefix:
27227
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27053
diff changeset
954 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
955 _('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
956 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
957 prefix = archival.tidyprefix(dest, kind, prefix)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
958
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
959 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
960 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
961 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
962 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
963 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
964 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
965 archiver.addfile(prefix + name, mode, islink, data)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
966
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
967 archiver = archival.archivers[kind](dest, mtime or ctx.date()[0])
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
968
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
969 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
970 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
971 lambda: archival.buildmetadata(ctx))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
972
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
973 for f in ctx:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
974 ff = ctx.flags(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
975 getdata = ctx[f].data
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
976 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
977 if lfile is not None:
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
978 if node is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
979 path = lfutil.findfile(repo, getdata().strip())
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
980
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
981 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
982 raise error.Abort(
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
983 _('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
984 % lfile)
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
985 else:
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
986 path = lfile
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
987
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
988 f = lfile
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
989
28427
00bd72629a45 largefiles: use util.readfile in overrides
Bryan O'Sullivan <bryano@fb.com>
parents: 28310
diff changeset
990 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
991 write(f, 'x' in ff and 0o755 or 0o644, 'l' in ff, getdata)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
992
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
993 if subrepos:
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18341
diff changeset
994 for subpath in sorted(ctx.substate):
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
995 sub = ctx.workingsub(subpath)
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
996 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
997 sub._repo.lfstatus = True
23587
a2f139d25845 subrepo: drop the 'ui' parameter to archive()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23551
diff changeset
998 sub.archive(archiver, prefix, submatch)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
999
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1000 archiver.done()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1001
31878
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31802
diff changeset
1002 def hgsubrepoarchive(orig, repo, archiver, prefix, match=None, decode=True):
26371
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 26214
diff changeset
1003 if not repo._repo.lfstatus:
31878
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31802
diff changeset
1004 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
1005
17695
75f25bd4c7d4 largefiles: download missing subrepo revs when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 17658
diff changeset
1006 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
1007 rev = repo._state[1]
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1008 ctx = repo._repo[rev]
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1009
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1010 if ctx.node() is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1011 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
1012
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1013 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
1014 # 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
1015 # 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
1016 if match and not match(f):
1894dac619de subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 17107
diff changeset
1017 return
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1018 data = getdata()
31878
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31802
diff changeset
1019 if decode:
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31802
diff changeset
1020 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
1021
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1022 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
1023
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1024 for f in ctx:
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1025 ff = ctx.flags(f)
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1026 getdata = ctx[f].data
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1027 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1028 if lfile is not None:
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1029 if ctx.node() is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1030 path = lfutil.findfile(repo._repo, getdata().strip())
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1031
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1032 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
1033 raise error.Abort(
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1034 _('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
1035 % lfile)
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1036 else:
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1037 path = lfile
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1038
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1039 f = lfile
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1040
28427
00bd72629a45 largefiles: use util.readfile in overrides
Bryan O'Sullivan <bryano@fb.com>
parents: 28310
diff changeset
1041 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
1042
26212
e93036747902 global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26144
diff changeset
1043 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
1044
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18341
diff changeset
1045 for subpath in sorted(ctx.substate):
26144
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 26003
diff changeset
1046 sub = ctx.workingsub(subpath)
30068
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 30061
diff changeset
1047 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
1048 sub._repo.lfstatus = True
31878
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31802
diff changeset
1049 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
1050
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
1051 # 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
1052 # 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
1053 # 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
1054 # 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
1055 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
1056 orig(repo, *args, **kwargs)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1057 repo.lfstatus = True
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1058 s = repo.status()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1059 repo.lfstatus = False
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1060 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
1061 raise error.Abort(_('uncommitted changes'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1062
28615
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 28560
diff changeset
1063 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
1064 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
1065 try:
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 28560
diff changeset
1066 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
1067 finally:
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 28560
diff changeset
1068 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
1069
23849
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23794
diff changeset
1070 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
1071 normalmatcher = composenormalfilematcher(match, repo[None].manifest())
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23794
diff changeset
1072 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
1073 m = composelargefilematcher(match, repo[None].manifest())
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1074
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1075 try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1076 repo.lfstatus = True
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1077 s = repo.status(match=m, clean=True)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1078 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1079 repo.lfstatus = False
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1080 forget = sorted(s.modified + s.added + s.deleted + s.clean)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1081 forget = [f for f in forget if lfutil.standin(f) in repo[None].manifest()]
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1082
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1083 for f in forget:
32397
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32396
diff changeset
1084 fstandin = lfutil.standin(f)
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32396
diff changeset
1085 if fstandin not in repo.dirstate and not repo.wvfs.isdir(fstandin):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1086 ui.warn(_('not removing %s: file is already untracked\n')
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1087 % m.rel(f))
23849
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23794
diff changeset
1088 bad.append(f)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1089
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1090 for f in forget:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1091 if ui.verbose or not m.exact(f):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1092 ui.status(_('removing %s\n') % m.rel(f))
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1093
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1094 # 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
1095 # 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
1096 with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1097 lfdirstate = lfutil.openlfdirstate(ui, repo)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1098 for f in forget:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1099 if lfdirstate[f] == 'a':
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1100 lfdirstate.drop(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1101 else:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1102 lfdirstate.remove(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1103 lfdirstate.write()
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
1104 standins = [lfutil.standin(f) for f in forget]
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
1105 for f in standins:
32088
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31878
diff changeset
1106 repo.wvfs.unlinkpath(f, ignoremissing=True)
23849
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23794
diff changeset
1107 rejected = repo[None].forget(standins)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1108
23849
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23794
diff changeset
1109 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
1110 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
1111 return bad, forgot
17591
cbacb5a813dd largefiles: preserve the exit status of the forget command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17590
diff changeset
1112
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1113 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
1114 """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
1115 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
1116
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1117 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
1118
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
1119 '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
1120 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
1121 """
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
1122 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
1123 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
1124 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
1125 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
1126 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
1127 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
1128 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
1129 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
1130 if lfhashes:
30105
85868ecf2c0d largefiles: make storefactory._openstore public
liscju <piotr.listkiewicz@gmail.com>
parents: 30068
diff changeset
1131 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
1132 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
1133 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
1134 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
1135
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
1136 def outgoinghook(ui, repo, other, opts, missing):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1137 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
1138 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
1139 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
1140 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
1141 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
1142 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
1143 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
1144 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
1145 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
1146 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
1147 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
1148 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
1149 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
1150 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
1151 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
1152 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
1153 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
1154 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
1155 pass
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1156 _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
1157
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
1158 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
1159 ui.status(_('largefiles: no files to upload\n'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1160 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
1161 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
1162 % (len(lfhashes)))
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
1163 for file in sorted(toupload):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1164 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
1165 showhashes(file)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1166 ui.status('\n')
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1167
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1168 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
1169 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
1170 if changes is None:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1171 if largeopt:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1172 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
1173 else:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1174 return (False, False)
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1175 elif largeopt:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1176 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
1177 if peer is None:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1178 # 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
1179 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
1180 return
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1181
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1182 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
1183 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
1184 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
1185 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
1186 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
1187 _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
1188
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1189 if not toupload:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1190 # 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
1191 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
1192 else:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1193 # 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
1194 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
1195 % (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
1196
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1197 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
1198 try:
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1199 repo.lfstatus = True
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1200 orig(ui, repo, *pats, **opts)
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1201 finally:
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1202 repo.lfstatus = False
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1203
26962
cd9cc7f30427 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26961
diff changeset
1204 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
1205 similarity=None):
26962
cd9cc7f30427 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26961
diff changeset
1206 if opts is None:
cd9cc7f30427 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26961
diff changeset
1207 opts = {}
16644
b371056ae353 largefiles: follow normal codepath for addremove if non-largefiles repo (issue3249)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16516
diff changeset
1208 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
1209 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
1210 # 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
1211 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
1212 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
1213 False, False, False)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1214
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1215 # 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
1216 # 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
1217 # 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
1218 # confused state later.
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1219 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
1220 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
1221
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23745
diff changeset
1222 # 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
1223 # 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
1224 # 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
1225 # 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
1226 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
1227 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
1228
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23745
diff changeset
1229 removelargefiles(repo.ui, repo, True, m, **opts)
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1230 # 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
1231 # 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
1232 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
1233 # 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
1234 # 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
1235 # 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
1236 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
1237 return orig(repo, matcher, prefix, opts, dry_run, similarity)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1238
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
1239 # Calling purge with --all will cause the largefiles to be deleted.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1240 # 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
1241 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
1242 # 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
1243 # 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
1244 # 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
1245 # 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
1246 # 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
1247 # 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
1248 #
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23646
diff changeset
1249 # 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
1250 # 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
1251 repo = repo.unfiltered()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1252 oldstatus = repo.status
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1253 def overridestatus(node1='.', node2=None, match=None, ignored=False,
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1254 clean=False, unknown=False, listsubrepos=False):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1255 r = oldstatus(node1, node2, match, ignored, clean, unknown,
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1256 listsubrepos)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1257 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
1258 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
1259 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
1260 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
1261 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
1262 repo.status = overridestatus
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1263 orig(ui, repo, *dirs, **opts)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1264 repo.status = oldstatus
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1265 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
1266 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
1267 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
1268 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
1269 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
1270 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
1271 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
1272 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
1273 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
1274
22285
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1275 pctx = repo['.']
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1276 for f in repo.dirstate:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1277 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
1278 orphans.discard(f)
22285
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1279 if repo.dirstate[f] == 'r':
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1280 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
1281 elif f in pctx:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1282 fctx = pctx[f]
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1283 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
1284 else:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1285 # 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
1286 # '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
1287 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
1288 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
1289 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
1290
15794
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15792
diff changeset
1291 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
1292 orphans = set(lfdirstate)
15794
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15792
diff changeset
1293 lfiles = lfutil.listlfiles(repo)
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15792
diff changeset
1294 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
1295 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
1296 orphans.discard(file)
7d1eac06ab2b largefiles: drop orphan entries from lfdristat at "hg rollback"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22096
diff changeset
1297 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
1298 lfdirstate.drop(lfile)
15794
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15792
diff changeset
1299 lfdirstate.write()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1300 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
1301
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1302 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
1303 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
1304 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
1305 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
1306 try:
bf502ccc46d7 largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15967
diff changeset
1307 result = orig(ui, repo, *revs, **opts)
bf502ccc46d7 largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15967
diff changeset
1308 finally:
23275
fae708cb32d1 largefiles: avoid printing messages while transplanting by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23274
diff changeset
1309 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
1310 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
1311 return result
16439
290850e7aa43 largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16248
diff changeset
1312
290850e7aa43 largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16248
diff changeset
1313 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
1314 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
1315 err = 1
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1316 notbad = set()
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1317 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
1318 origmatchfn = m.matchfn
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1319 def lfmatchfn(f):
21087
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
1320 if origmatchfn(f):
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
1321 return True
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1322 lf = lfutil.splitstandin(f)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1323 if lf is None:
21087
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
1324 return False
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1325 notbad.add(lf)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1326 return origmatchfn(lf)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1327 m.matchfn = lfmatchfn
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1328 origbadfn = m.bad
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1329 def lfbadfn(f, msg):
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1330 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
1331 origbadfn(f, msg)
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1332 m.bad = lfbadfn
24809
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1333
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1334 origvisitdirfn = m.visitdir
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1335 def lfvisitdirfn(dir):
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1336 if dir == lfutil.shortname:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1337 return True
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1338 ret = origvisitdirfn(dir)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1339 if ret:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1340 return ret
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1341 lf = lfutil.splitstandin(dir)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1342 if lf is None:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1343 return False
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1344 return origvisitdirfn(lf)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1345 m.visitdir = lfvisitdirfn
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24667
diff changeset
1346
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1347 for f in ctx.walk(m):
30921
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1348 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
1349 pathname=f) as fp:
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1350 lf = lfutil.splitstandin(f)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1351 if lf is None or origmatchfn(f):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1352 # duplicating unreachable code from commands.cat
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1353 data = ctx[f].data()
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1354 if opts.get('decode'):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1355 data = repo.wwritedata(f, data)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1356 fp.write(data)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1357 else:
32395
10561eb97c7f largefiles: call readstandin() with changectx itself instead of rev or node
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32393
diff changeset
1358 hash = lfutil.readstandin(repo, lf, ctx)
30921
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1359 if not lfutil.inusercache(repo.ui, hash):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1360 store = storefactory.openstore(repo)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1361 success, missing = store.get([(lf, hash)])
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1362 if len(success) != 1:
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1363 raise error.Abort(
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1364 _('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
1365 'downloaded') % lf)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1366 path = lfutil.usercachepath(repo.ui, hash)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1367 with open(path, "rb") as fpin:
30960
7356e6b1f5b8 util: increase filechunkiter size to 128k
Mads Kiilerich <madski@unity3d.com>
parents: 30921
diff changeset
1368 for chunk in util.filechunkiter(fpin):
30921
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1369 fp.write(chunk)
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1370 err = 0
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18458
diff changeset
1371 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
1372
27991
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27690
diff changeset
1373 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
1374 *args, **kwargs):
27991
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27690
diff changeset
1375 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
1376 # 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
1377 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
1378 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
1379 # branch | | |
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1380 # 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
1381 # -------+-------+---------+--------------
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1382 # 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
1383 # 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
1384 # 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
1385 # 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
1386 # 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
1387 # 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
1388 # 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
1389 # 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
1390 #
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1391 # (*) 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
1392 # (*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
1393
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1394 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
1395 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
1396 repo.getcwd()),
30969
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1397 [], False, True, False)
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1398 oldclean = set(s.clean)
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1399 pctx = repo['.']
32432
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32397
diff changeset
1400 dctx = repo[node]
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1401 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
1402 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
1403 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
1404 continue
32396
1f6c932862e5 largefiles: replace hashrepofile by hashfile (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32395
diff changeset
1405 lfhash = lfutil.hashfile(lfileabs)
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1406 standin = lfutil.standin(lfile)
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1407 lfutil.writestandin(repo, standin, lfhash,
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1408 lfutil.getexecutable(lfileabs))
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1409 if (standin in pctx and
32395
10561eb97c7f largefiles: call readstandin() with changectx itself instead of rev or node
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32393
diff changeset
1410 lfhash == lfutil.readstandin(repo, lfile, pctx)):
30969
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1411 oldclean.add(lfile)
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1412 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
1413 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
1414 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
1415 # 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
1416 # (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
1417 continue
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32397
diff changeset
1418 lfutil.updatestandin(repo, fstandin)
30969
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1419 # 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
1420 # 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
1421 for lfile in oldclean:
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1422 lfdirstate.normallookup(lfile)
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1423 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
1424
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1425 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
1426
27991
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27690
diff changeset
1427 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
1428
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1429 newstandins = lfutil.getstandinsstate(repo)
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1430 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
1431
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1432 # 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
1433 # 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
1434 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
1435 lfdirstate.normal(lfile)
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1436 lfdirstate.write()
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 30181
diff changeset
1437
24966
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24961
diff changeset
1438 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
1439 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
1440
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1441 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
1442 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
1443
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1444 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
1445
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1446 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
1447 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
1448
32392
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1449 filelist = []
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1450 for f in files:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1451 lf = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1452 if lf is not None:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32088
diff changeset
1453 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
1454 if filelist:
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1455 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
1456 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
1457
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1458 return result