annotate hgext/largefiles/overrides.py @ 35676:9c575c22dcf4

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