annotate hgext/largefiles/overrides.py @ 51601:ea3343104f07

largefiles: track if a matcher was tampered with This is used to make sure rust fast path is not taken for the modified matchers.
author Arseniy Alekseyev <aalekseyev@janestreet.com>
date Tue, 09 Apr 2024 11:00:52 +0100
parents d718eddf01d9
children 493034cc3265 187d7c859be7
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'''
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
10
50027
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
11 import contextlib
15168
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
43085
eef9a2d67051 py3: manually import pycompat.open into files that need it
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43077
diff changeset
17 from mercurial.pycompat import open
eef9a2d67051 py3: manually import pycompat.open into files that need it
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43077
diff changeset
18
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
19 from mercurial.hgweb import webcommands
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
20
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
21 from mercurial import (
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
22 archival,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
23 cmdutil,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
24 copies as copiesmod,
50027
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
25 dirstate,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
26 error,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
27 exchange,
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
28 extensions,
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
29 exthelper,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
30 filemerge,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
31 hg,
35885
7625b4f7db70 cmdutil: split functions of log-like commands to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35623
diff changeset
32 logcmdutil,
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
33 match as matchmod,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
34 merge,
44856
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44452
diff changeset
35 mergestate as mergestatemod,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
36 pathutil,
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
37 pycompat,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
38 scmutil,
31023
aea06029919e revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents: 30215
diff changeset
39 smartset,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
40 subrepo,
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
41 url as urlmod,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
42 util,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
43 )
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
44
46047
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
45 from mercurial.upgrade_utils import (
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
46 actions as upgrade_actions,
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
47 )
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
48
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
49 from . import (
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
50 lfcommands,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
51 lfutil,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
52 storefactory,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
53 )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
54
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
55 ACTION_ADD = mergestatemod.ACTION_ADD
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
56 ACTION_DELETED_CHANGED = mergestatemod.ACTION_DELETED_CHANGED
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
57 ACTION_GET = mergestatemod.ACTION_GET
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
58 ACTION_KEEP = mergestatemod.ACTION_KEEP
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
59 ACTION_REMOVE = mergestatemod.ACTION_REMOVE
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
60
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
61 eh = exthelper.exthelper()
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
62
43583
73e6d3346e4f largefiles: move lfstatus context manager to lfutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43506
diff changeset
63 lfstatus = lfutil.lfstatus
73e6d3346e4f largefiles: move lfstatus context manager to lfutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43506
diff changeset
64
48711
9bc86adf32f6 merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48709
diff changeset
65 MERGE_ACTION_LARGEFILE_MARK_REMOVED = mergestatemod.MergeAction('lfmr')
45298
a3cd63d6005b largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45297
diff changeset
66
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
67 # -- Utility functions: commonly/repeatedly needed functionality ---------------
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
68
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
69
23617
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
70 def composelargefilematcher(match, manifest):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
71 """create a matcher that matches only the largefiles in the original
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
72 matcher"""
23617
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
73 m = copy.copy(match)
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
74 m._was_tampered_with = True
23617
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
75 lfile = lambda f: lfutil.standin(f) in manifest
36311
b9da10f310f4 largfiles: replace filter() with listcomp when result needs to be a list
Augie Fackler <augie@google.com>
parents: 36205
diff changeset
76 m._files = [lf for lf in m._files if lfile(lf)]
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
77 m._fileset = set(m._files)
32388
4a23cdb32968 largefiles: replace always() method, not _always field
Martin von Zweigbergk <martinvonz@google.com>
parents: 32382
diff changeset
78 m.always = lambda: False
23617
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
79 origmatchfn = m.matchfn
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
80 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
81 return m
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
82
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
83
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
84 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
85 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
86 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
87 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
88
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
89 m = copy.copy(match)
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
90 m._was_tampered_with = True
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
91 notlfile = lambda f: not (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
92 lfutil.isstandin(f) or lfutil.standin(f) in manifest or f in excluded
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
93 )
36311
b9da10f310f4 largfiles: replace filter() with listcomp when result needs to be a list
Augie Fackler <augie@google.com>
parents: 36205
diff changeset
94 m._files = [lf for lf in m._files if notlfile(lf)]
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
95 m._fileset = set(m._files)
32388
4a23cdb32968 largefiles: replace always() method, not _always field
Martin von Zweigbergk <martinvonz@google.com>
parents: 32382
diff changeset
96 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
97 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
98 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
99 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
100
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
101
41654
f164076427b2 largefiles: use uipathfn instead of match.{rel,uipath}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41653
diff changeset
102 def addlargefiles(ui, repo, isaddremove, matcher, uipathfn, **opts):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
103 large = opts.get('large')
15227
a7686abf73a6 largefiles: factor out lfutil.getminsize()
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
104 lfsize = lfutil.getminsize(
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
105 ui, lfutil.islfilesrepo(repo), opts.get('lfsize')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
106 )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
107
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
108 lfmatcher = None
15739
be55285470cf largefiles: tiny code clean up
Michal Sznajder <michalsznajder@gmail.com>
parents: 15674
diff changeset
109 if lfutil.islfilesrepo(repo):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
110 lfpats = ui.configlist(lfutil.longname, b'patterns')
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
111 if lfpats:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
112 lfmatcher = matchmod.match(repo.root, b'', list(lfpats))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
113
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
114 lfnames = []
25440
1a95c57959f6 largefiles: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25189
diff changeset
115 m = matcher
1a95c57959f6 largefiles: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25189
diff changeset
116
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
117 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
118 for f in wctx.walk(matchmod.badmatch(m, lambda x, y: None)):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
119 exact = m.exact(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
120 lfile = lfutil.standin(f) in wctx
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
121 nfile = f in wctx
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
122 exists = lfile or nfile
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
123
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
124 # Don't warn the user when they attempt to add a normal tracked file.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
125 # The normal add code will do that for us.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
126 if exact and exists:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
127 if lfile:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
128 ui.warn(_(b'%s already a largefile\n') % uipathfn(f))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
129 continue
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
130
17232
25248e2ebaee largefiles: ensure addlargefiles() doesn't add a standin as a largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 17231
diff changeset
131 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
132 # 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
133 # (issue3507)
23733
86810cd85eb8 largefiles: convert addlargefiles() to vfs
Matt Harbison <matt_harbison@yahoo.com>
parents: 23726
diff changeset
134 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
135 continue
2446b63c89ec largefiles: fix a traceback when addremove follows a remove (issue3507)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17229
diff changeset
136
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
137 abovemin = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
138 lfsize and repo.wvfs.lstat(f).st_size >= lfsize * 1024 * 1024
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
139 )
15255
7ab05d752405 largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents: 15254
diff changeset
140 if large or abovemin or (lfmatcher and lfmatcher(f)):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
141 lfnames.append(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
142 if ui.verbose or not exact:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
143 ui.status(_(b'adding %s as a largefile\n') % uipathfn(f))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
144
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
145 bad = []
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
146
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
147 # 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
148 # 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
149 with repo.wlock():
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
150 if not opts.get('dry_run'):
23041
a36625ef1f35 largefiles: move initialization of standins variable to clarify its "scope"
Mads Kiilerich <madski@unity3d.com>
parents: 23040
diff changeset
151 standins = []
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
152 lfdirstate = lfutil.openlfdirstate(ui, repo)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
153 for f in lfnames:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
154 standinname = lfutil.standin(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
155 lfutil.writestandin(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
156 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
157 standinname,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
158 hash=b'',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
159 executable=lfutil.getexecutable(repo.wjoin(f)),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
160 )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
161 standins.append(standinname)
47648
093b1df410c9 largefile: use `set_tracked` in the `hg add` overwrite
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46494
diff changeset
162 lfdirstate.set_tracked(f)
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 48118
diff changeset
163 lfdirstate.write(repo.currenttransaction())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
164 bad += [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
165 lfutil.splitstandin(f)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
166 for f in repo[None].add(standins)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
167 if f in m.files()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
168 ]
23768
6b1428e55728 largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23767
diff changeset
169
6b1428e55728 largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23767
diff changeset
170 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
171 return added, bad
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
172
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
173
41654
f164076427b2 largefiles: use uipathfn instead of match.{rel,uipath}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41653
diff changeset
174 def removelargefiles(ui, repo, isaddremove, matcher, uipathfn, dryrun, **opts):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
175 after = opts.get('after')
23741
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
176 m = composelargefilematcher(matcher, repo[None].manifest())
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
177 with lfstatus(repo):
23741
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
178 s = repo.status(match=m, clean=not isaddremove)
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
179 manifest = repo[None].manifest()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
180 modified, added, deleted, clean = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
181 [f for f in list if lfutil.standin(f) in manifest]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
182 for list in (s.modified, s.added, s.deleted, s.clean)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
183 ]
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
184
18066
abe9799a86d6 largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents: 18012
diff changeset
185 def warn(files, msg):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
186 for f in files:
41654
f164076427b2 largefiles: use uipathfn instead of match.{rel,uipath}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41653
diff changeset
187 ui.warn(msg % uipathfn(f))
17576
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17575
diff changeset
188 return int(len(files) > 0)
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17575
diff changeset
189
15786
aca0f2b3c7e3 largefiles: fix confusion upon removal of added largefile (issue3176)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15663
diff changeset
190 if after:
22630
0290982e5ac7 largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22289
diff changeset
191 remove = deleted
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
192 result = warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
193 modified + added + clean, _(b'not removing %s: file still exists\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
194 )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
195 else:
22630
0290982e5ac7 largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22289
diff changeset
196 remove = deleted + clean
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
197 result = warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
198 modified,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
199 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
200 b'not removing %s: file is modified (use -f'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
201 b' to force removal)\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
202 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
203 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
204 result = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
205 warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
206 added,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
207 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
208 b'not removing %s: file has been marked for add'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
209 b' (use forget to undo)\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
210 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
211 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
212 or result
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
213 )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
214
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
215 # 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
216 # 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
217 with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
218 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
219 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
220 if ui.verbose or not m.exact(f):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
221 ui.status(_(b'removing %s\n') % uipathfn(f))
23592
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
222
37150
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
223 if not dryrun:
23592
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
224 if not after:
31309
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31099
diff changeset
225 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
226
37150
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
227 if dryrun:
23592
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
228 return result
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
229
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
230 remove = [lfutil.standin(f) for f in remove]
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
231 # 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
232 # function handle this.
23038
3f581bfbb268 largefiles: replace repo._isaddremove hack with a simple function parameter
Mads Kiilerich <madski@unity3d.com>
parents: 22919
diff changeset
233 if not isaddremove:
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
234 for f in remove:
31309
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31099
diff changeset
235 repo.wvfs.unlinkpath(f, ignoremissing=True)
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
236 repo[None].forget(remove)
23721
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23695
diff changeset
237
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23695
diff changeset
238 for f in remove:
47653
00d70f61d856 largefile: directly use set_untracked() for removing files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47652
diff changeset
239 lfdirstate.set_untracked(lfutil.splitstandin(f))
23721
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23695
diff changeset
240
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 48118
diff changeset
241 lfdirstate.write(repo.currenttransaction())
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
242
17576
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17575
diff changeset
243 return result
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17575
diff changeset
244
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
245
16449
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
246 # 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
247 # appear at their right place in the manifests.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
248 @eh.wrapfunction(webcommands, 'decodepath')
16449
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
249 def decodepath(orig, path):
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
250 return lfutil.splitstandin(path) or path
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
251
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
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
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
255
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
256 @eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
257 b'add',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
258 opts=[
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
259 (b'', b'large', None, _(b'add as largefile')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
260 (b'', b'normal', None, _(b'add as normal file')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
261 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
262 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
263 b'lfsize',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
264 b'',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
265 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
266 b'add all files above this size (in megabytes) '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
267 b'as largefiles (default: 10)'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
268 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
269 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
270 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
271 )
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
272 def overrideadd(orig, ui, repo, *pats, **opts):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
273 if opts.get('normal') and opts.get('large'):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
274 raise error.Abort(_(b'--normal cannot be used with --large'))
23886
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
275 return orig(ui, repo, *pats, **opts)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
276
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
277
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
278 @eh.wrapfunction(cmdutil, 'add')
41650
f8b18583049f add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41631
diff changeset
279 def cmdutiladd(orig, ui, repo, matcher, prefix, uipathfn, explicitonly, **opts):
23886
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
280 # The --normal flag short circuits this override
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
281 if opts.get('normal'):
41650
f8b18583049f add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41631
diff changeset
282 return orig(ui, repo, matcher, prefix, uipathfn, explicitonly, **opts)
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
283
41654
f164076427b2 largefiles: use uipathfn instead of match.{rel,uipath}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41653
diff changeset
284 ladded, lbad = addlargefiles(ui, repo, False, matcher, uipathfn, **opts)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
285 normalmatcher = composenormalfilematcher(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
286 matcher, repo[None].manifest(), ladded
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
287 )
41650
f8b18583049f add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41631
diff changeset
288 bad = orig(ui, repo, normalmatcher, prefix, uipathfn, explicitonly, **opts)
23886
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
289
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
290 bad.extend(f for f in lbad)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
291 return bad
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
292
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
293
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
294 @eh.wrapfunction(cmdutil, 'remove')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
295 def cmdutilremove(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
296 orig, ui, repo, matcher, prefix, uipathfn, after, force, subrepos, dryrun
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
297 ):
23782
304e69cb1ee9 largefiles: enable subrepo support for remove
Matt Harbison <matt_harbison@yahoo.com>
parents: 23769
diff changeset
298 normalmatcher = composenormalfilematcher(matcher, repo[None].manifest())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
299 result = orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
300 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
301 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
302 normalmatcher,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
303 prefix,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
304 uipathfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
305 after,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
306 force,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
307 subrepos,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
308 dryrun,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
309 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
310 return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
311 removelargefiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
312 ui, repo, False, matcher, uipathfn, dryrun, after=after, force=force
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
313 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
314 or result
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
315 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
316
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
317
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
318 @eh.wrapfunction(dirstate.dirstate, '_changing')
50027
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
319 @contextlib.contextmanager
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
320 def _changing(orig, self, repo, change_type):
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
321 pre = sub_dirstate = getattr(self, '_sub_dirstate', None)
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
322 try:
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
323 lfd = getattr(self, '_large_file_dirstate', False)
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
324 if sub_dirstate is None and not lfd:
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
325 sub_dirstate = lfutil.openlfdirstate(repo.ui, repo)
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
326 self._sub_dirstate = sub_dirstate
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
327 if not lfd:
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
328 assert self._sub_dirstate is not None
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
329 with orig(self, repo, change_type):
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
330 if sub_dirstate is None:
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
331 yield
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
332 else:
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
333 with sub_dirstate._changing(repo, change_type):
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
334 yield
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
335 finally:
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
336 self._sub_dirstate = pre
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
337
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49961
diff changeset
338
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
339 @eh.wrapfunction(dirstate.dirstate, 'running_status')
50142
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
340 @contextlib.contextmanager
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
341 def running_status(orig, self, repo):
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
342 pre = sub_dirstate = getattr(self, '_sub_dirstate', None)
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
343 try:
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
344 lfd = getattr(self, '_large_file_dirstate', False)
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
345 if sub_dirstate is None and not lfd:
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
346 sub_dirstate = lfutil.openlfdirstate(repo.ui, repo)
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
347 self._sub_dirstate = sub_dirstate
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
348 if not lfd:
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
349 assert self._sub_dirstate is not None
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
350 with orig(self, repo):
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
351 if sub_dirstate is None:
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
352 yield
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
353 else:
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
354 with sub_dirstate.running_status(repo):
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
355 yield
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
356 finally:
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
357 self._sub_dirstate = pre
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
358
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
359
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
360 @eh.wrapfunction(subrepo.hgsubrepo, 'status')
16515
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
361 def overridestatusfn(orig, repo, rev2, **opts):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
362 with lfstatus(repo._repo):
16515
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
363 return orig(repo, rev2, **opts)
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
364
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
365
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
366 @eh.wrapcommand(b'status')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
367 def overridestatus(orig, ui, repo, *pats, **opts):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
368 with lfstatus(repo):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
369 return orig(ui, repo, *pats, **opts)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
370
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
371
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
372 @eh.wrapfunction(subrepo.hgsubrepo, 'dirty')
33364
bf2daeddd42b subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents: 32945
diff changeset
373 def overridedirty(orig, repo, ignoreupdate=False, missing=False):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
374 with lfstatus(repo._repo):
33364
bf2daeddd42b subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents: 32945
diff changeset
375 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
376
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
377
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
378 @eh.wrapcommand(b'log')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
379 def overridelog(orig, ui, repo, *pats, **opts):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
380 def overridematchandpats(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
381 orig,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
382 ctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
383 pats=(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
384 opts=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
385 globbed=False,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
386 default=b'relpath',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
387 badfn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
388 ):
18341
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
389 """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
390 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
391 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
392 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
393 """
26339
4afdd4283d3e largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26338
diff changeset
394 if opts is None:
4afdd4283d3e largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26338
diff changeset
395 opts = {}
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
396 matchandpats = orig(ctx, pats, opts, globbed, default, badfn=badfn)
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
397 m, p = copy.copy(matchandpats)
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
398
22170
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
399 if m.always():
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
400 # 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
401 # to add standins.
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
402 return matchandpats
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
403
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
404 pats = set(p)
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
405
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
406 def fixpats(pat, tostandin=lfutil.standin):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
407 if pat.startswith(b'set:'):
24813
2553ef7355ab largefiles: don't mangle filesets when fixing up the log matcher
Matt Harbison <matt_harbison@yahoo.com>
parents: 24812
diff changeset
408 return pat
2553ef7355ab largefiles: don't mangle filesets when fixing up the log matcher
Matt Harbison <matt_harbison@yahoo.com>
parents: 24812
diff changeset
409
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
410 kindpat = matchmod._patsplit(pat, None)
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
411
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
412 if kindpat[0] is not None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
413 return kindpat[0] + b':' + tostandin(kindpat[1])
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
414 return tostandin(kindpat[1])
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
415
41667
8fa1a5fb8a28 largefiles: get cwd and relative paths from repo instead of matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 41654
diff changeset
416 cwd = repo.getcwd()
8fa1a5fb8a28 largefiles: get cwd and relative paths from repo instead of matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 41654
diff changeset
417 if cwd:
24208
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
418 hglf = lfutil.shortname
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
419 back = util.pconvert(repo.pathto(hglf)[: -len(hglf)])
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
420
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
421 def tostandin(f):
26781
1aee2ab0f902 spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents: 26607
diff changeset
422 # 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
423 # 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
424 # 'glob:../.hglf/foo*' into 'glob:../.hglf/../.hglf/foo*'.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
425 if f.startswith(back) and lfutil.splitstandin(f[len(back) :]):
24207
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
426 return f
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
427
24208
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
428 # 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
429 # 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
430 # 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
431 # prepended before building the standin.
41667
8fa1a5fb8a28 largefiles: get cwd and relative paths from repo instead of matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 41654
diff changeset
432 if os.path.isabs(cwd):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
433 f = f[len(back) :]
24208
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
434 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
435 f = cwd + b'/' + f
24208
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
436 return back + lfutil.standin(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
437
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
438 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
439
24207
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
440 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
441 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
442 return f
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
443 return lfutil.standin(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
444
32301
8a87bfc5bebb largefiles: move identical statement to after if/else
Martin von Zweigbergk <martinvonz@google.com>
parents: 32157
diff changeset
445 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
446
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
447 m._was_tampered_with = True
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
448
19472
32e502b26983 largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents: 19226
diff changeset
449 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
450 # Don't add '.hglf' to m.files, since that is already covered by '.'
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
451 if m._files[i] == b'.':
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
452 continue
19472
32e502b26983 largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents: 19226
diff changeset
453 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
454 # 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
455 # 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
456 # 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
457 # files.
31655
9d075911df49 largefiles: avoid meaningless changectx looking up
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31654
diff changeset
458 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
459 m._files[i] = standin
31655
9d075911df49 largefiles: avoid meaningless changectx looking up
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31654
diff changeset
460 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
461 m._files.append(standin)
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
462
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
463 m._fileset = set(m._files)
32388
4a23cdb32968 largefiles: replace always() method, not _always field
Martin von Zweigbergk <martinvonz@google.com>
parents: 32382
diff changeset
464 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
465 origmatchfn = m.matchfn
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
466
18341
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
467 def lfmatchfn(f):
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
468 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
469 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
470 return True
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
471 r = origmatchfn(f)
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
472 return r
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
473
18341
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
474 m.matchfn = lfmatchfn
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
475
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
476 ui.debug(b'updated patterns: %s\n' % b', '.join(sorted(pats)))
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
477 return m, pats
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
478
22169
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
479 # 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
480 # (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
481 # (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
482 # 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
483 # case (2).
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
484 oldmatchandpats = scmutil.matchandpats
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
485
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
486 def overridemakefilematcher(orig, repo, pats, opts, badfn=None):
24534
1925769b4ff8 log: prefer 'wctx' over 'pctx' for working context
Martin von Zweigbergk <martinvonz@google.com>
parents: 24474
diff changeset
487 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
488 match, pats = oldmatchandpats(wctx, pats, opts, badfn=badfn)
36002
f8ad57d24252 log: pass ctx to makefilematcher() and makehunksfilter() functions
Yuya Nishihara <yuya@tcha.org>
parents: 35887
diff changeset
489 return lambda ctx: match
22169
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
490
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
491 wrappedmatchandpats = extensions.wrappedfunction(
50787
584fc92dd8d7 wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50785
diff changeset
492 scmutil, 'matchandpats', overridematchandpats
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
493 )
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
494 wrappedmakefilematcher = extensions.wrappedfunction(
50787
584fc92dd8d7 wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50785
diff changeset
495 logcmdutil, '_makenofollowfilematcher', overridemakefilematcher
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
496 )
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
497 with wrappedmatchandpats, wrappedmakefilematcher:
17577
0f39e9355d3c largefiles: preserve the exit status of the log command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17576
diff changeset
498 return orig(ui, repo, *pats, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
499
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
500
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
501 @eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
502 b'verify',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
503 opts=[
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
504 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
505 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
506 b'large',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
507 None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
508 _(b'verify that all largefiles in current revision exists'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
509 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
510 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
511 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
512 b'lfa',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
513 None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
514 _(b'verify largefiles in all revisions, not just current'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
515 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
516 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
517 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
518 b'lfc',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
519 None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
520 _(b'verify local largefile contents, not just existence'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
521 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
522 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
523 )
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
524 def overrideverify(orig, ui, repo, *pats, **opts):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
525 large = opts.pop('large', False)
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
526 all = opts.pop('lfa', False)
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
527 contents = opts.pop('lfc', False)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
528
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
529 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
530 if large or all or contents:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
531 result = result or lfcommands.verifylfiles(ui, repo, all, contents)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
532 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
533
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
534
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
535 @eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
536 b'debugstate',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
537 opts=[(b'', b'large', None, _(b'display largefiles dirstate'))],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
538 )
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
539 def overridedebugstate(orig, ui, repo, *pats, **opts):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
540 large = opts.pop('large', False)
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
541 if large:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
542
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48913
diff changeset
543 class fakerepo:
21088
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
544 dirstate = lfutil.openlfdirstate(ui, repo)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
545
21088
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
546 orig(ui, fakerepo, *pats, **opts)
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
547 else:
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
548 orig(ui, repo, *pats, **opts)
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
549
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
550
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
551 # 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
552 # _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
553 # 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
554 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
555 # 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
556 # 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
557 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
558 # 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
559 # 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
560 # case further in the overridden calculateupdates function below.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
561 @eh.wrapfunction(merge, '_checkunknownfile')
49910
7b474609f199 merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49854
diff changeset
562 def overridecheckunknownfile(
7b474609f199 merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49854
diff changeset
563 origfn, dirstate, wvfs, dircache, wctx, mctx, f, f2=None
7b474609f199 merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49854
diff changeset
564 ):
7b474609f199 merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49854
diff changeset
565 if lfutil.standin(dirstate.normalize(f)) in wctx:
16093
7e30f5f2285f merge: refactor unknown file conflict checking
Matt Mackall <mpm@selenic.com>
parents: 16075
diff changeset
566 return False
49910
7b474609f199 merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49854
diff changeset
567 return origfn(dirstate, wvfs, dircache, wctx, mctx, f, f2)
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
568
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
569
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
570 # 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
571 # 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
572 #
23307
9dd0d0d61a24 largefiles: update comments to refer to the right overridden method
Martin von Zweigbergk <martinvonz@google.com>
parents: 23276
diff changeset
573 # 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
574 # 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
575 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
576 # 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
577 # 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
578 # 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
579 # 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
580 # 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
581 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
582 # 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
583 # 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
584 # 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
585 # triggers a merge action.
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
586 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
587 # 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
588 # 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
589 # 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
590 # 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
591 # presumably changed on purpose.
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
592 #
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
593 # 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
594 # 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
595 # will update the largefiles.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
596 @eh.wrapfunction(merge, 'calculateupdates')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
597 def overridecalculateupdates(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
598 origfn, repo, p1, p2, pas, branchmerge, force, acceptremote, *args, **kwargs
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
599 ):
18605
bcf29565d89f manifestmerge: pass in branchmerge and force separately
Siddharth Agarwal <sid0@fb.com>
parents: 18600
diff changeset
600 overwrite = force and not branchmerge
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
601 mresult = origfn(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
602 repo, p1, p2, pas, branchmerge, force, acceptremote, *args, **kwargs
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
603 )
19952
8eb99e5cec4a largefiles: don't process merge actions at all when overwriting
Mads Kiilerich <madski@unity3d.com>
parents: 19805
diff changeset
604
8eb99e5cec4a largefiles: don't process merge actions at all when overwriting
Mads Kiilerich <madski@unity3d.com>
parents: 19805
diff changeset
605 if overwrite:
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
606 return mresult
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
607
23529
38e55e55ae4d largefiles: rewrite merge code using dictionary with entry per file
Martin von Zweigbergk <martinvonz@google.com>
parents: 23528
diff changeset
608 # 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
609 lfiles = set()
45345
e5b4061f32be mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45344
diff changeset
610 for f in mresult.files():
27905
27f2f5c1d499 largefiles: actions will now always have a file - drop check
Mads Kiilerich <madski@unity3d.com>
parents: 27904
diff changeset
611 splitstandin = lfutil.splitstandin(f)
42755
749ef8c31187 rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents: 42587
diff changeset
612 if splitstandin is not None and splitstandin in p1:
23641
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23635
diff changeset
613 lfiles.add(splitstandin)
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23635
diff changeset
614 elif lfutil.standin(f) in p1:
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23635
diff changeset
615 lfiles.add(f)
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
616
27904
ee3123e19db9 largefiles: make prompt order deterministic
Mads Kiilerich <madski@unity3d.com>
parents: 27826
diff changeset
617 for lfile in sorted(lfiles):
23530
42ae1b1f048f largefiles: start by finding files of interest
Martin von Zweigbergk <martinvonz@google.com>
parents: 23529
diff changeset
618 standin = lfutil.standin(lfile)
45344
4c6004afd836 mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45298
diff changeset
619 (lm, largs, lmsg) = mresult.getfile(lfile, (None, None, None))
4c6004afd836 mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45298
diff changeset
620 (sm, sargs, smsg) = mresult.getfile(standin, (None, None, None))
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
621
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
622 if sm in (ACTION_GET, ACTION_DELETED_CHANGED) and lm != ACTION_REMOVE:
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
623 if sm == ACTION_DELETED_CHANGED:
26962
fa2daf0e61ab merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents: 26781
diff changeset
624 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
625 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
626 # 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
627 # the second parent
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
628 usermsg = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
629 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
630 b'remote turned local normal file %s into a largefile\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
631 b'use (l)argefile or keep (n)ormal file?'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
632 b'$$ &Largefile $$ &Normal file'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
633 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
634 % lfile
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
635 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
636 if repo.ui.promptchoice(usermsg, 0) == 0: # pick remote largefile
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
637 mresult.addfile(
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
638 lfile, ACTION_REMOVE, None, b'replaced by standin'
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
639 )
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
640 mresult.addfile(standin, ACTION_GET, sargs, b'replaces standin')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
641 else: # keep local normal file
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
642 mresult.addfile(lfile, ACTION_KEEP, None, b'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
643 if branchmerge:
45282
b442920ab1de merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45274
diff changeset
644 mresult.addfile(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
645 standin,
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
646 ACTION_KEEP,
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
647 None,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
648 b'replaced by non-standin',
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
649 )
23493
28f01c318c05 largefiles: don't use 'r' action for standin that doesn't exist
Martin von Zweigbergk <martinvonz@google.com>
parents: 23492
diff changeset
650 else:
45282
b442920ab1de merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45274
diff changeset
651 mresult.addfile(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
652 standin,
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
653 ACTION_REMOVE,
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
654 None,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
655 b'replaced by non-standin',
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
656 )
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
657 if lm in (ACTION_GET, ACTION_DELETED_CHANGED) and sm != ACTION_REMOVE:
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
658 if lm == ACTION_DELETED_CHANGED:
26962
fa2daf0e61ab merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents: 26781
diff changeset
659 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
660 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
661 # 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
662 # the second parent
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
663 usermsg = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
664 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
665 b'remote turned local largefile %s into a normal file\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
666 b'keep (l)argefile or use (n)ormal file?'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
667 b'$$ &Largefile $$ &Normal file'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
668 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
669 % lfile
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
670 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
671 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
672 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
673 # largefile can be restored from standin safely
45282
b442920ab1de merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45274
diff changeset
674 mresult.addfile(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
675 lfile,
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
676 ACTION_KEEP,
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
677 None,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
678 b'replaced by standin',
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
679 )
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
680 mresult.addfile(
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
681 standin, ACTION_KEEP, None, b'replaces standin'
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
682 )
22196
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
683 else:
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
684 # "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
685 # removal of itself
45282
b442920ab1de merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45274
diff changeset
686 mresult.addfile(
45298
a3cd63d6005b largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45297
diff changeset
687 lfile,
a3cd63d6005b largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45297
diff changeset
688 MERGE_ACTION_LARGEFILE_MARK_REMOVED,
a3cd63d6005b largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45297
diff changeset
689 None,
a3cd63d6005b largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45297
diff changeset
690 b'forget non-standin largefile',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
691 )
22196
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
692
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
693 # linear-merge should treat this largefile as 're-added'
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
694 mresult.addfile(standin, ACTION_ADD, None, b'keep standin')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
695 else: # pick remote normal file
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
696 mresult.addfile(lfile, ACTION_GET, largs, b'replaces standin')
45282
b442920ab1de merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45274
diff changeset
697 mresult.addfile(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
698 standin,
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
699 ACTION_REMOVE,
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
700 None,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
701 b'replaced by non-standin',
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
702 )
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
703
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
704 return mresult
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
705
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
706
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
707 @eh.wrapfunction(mergestatemod, 'recordupdates')
42456
87a34c767384 merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 41760
diff changeset
708 def mergerecordupdates(orig, repo, actions, branchmerge, getfiledata):
45298
a3cd63d6005b largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45297
diff changeset
709 if MERGE_ACTION_LARGEFILE_MARK_REMOVED 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
710 lfdirstate = lfutil.openlfdirstate(repo.ui, repo)
50048
c3c8ac540513 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50029
diff changeset
711 for lfile, args, msg in actions[MERGE_ACTION_LARGEFILE_MARK_REMOVED]:
c3c8ac540513 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50029
diff changeset
712 # this should be executed before 'orig', to execute 'remove'
c3c8ac540513 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50029
diff changeset
713 # before all other actions
c3c8ac540513 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50029
diff changeset
714 repo.dirstate.update_file(lfile, p1_tracked=True, wc_tracked=False)
c3c8ac540513 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50029
diff changeset
715 # make sure lfile doesn't get synclfdirstate'd as normal
c3c8ac540513 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50029
diff changeset
716 lfdirstate.update_file(lfile, p1_tracked=False, wc_tracked=True)
22196
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
717
42456
87a34c767384 merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 41760
diff changeset
718 return orig(repo, actions, branchmerge, getfiledata)
22196
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
719
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
720
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
721 # 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
722 # largefiles. This will handle identical edits without prompting the user.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
723 @eh.wrapfunction(filemerge, 'filemerge')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
724 def overridefilemerge(
48431
6b1049d71c3e filemerge: make `_filemerge()` do both premerge and merge
Martin von Zweigbergk <martinvonz@google.com>
parents: 48390
diff changeset
725 origfn, repo, wctx, mynode, orig, fcd, fco, fca, labels=None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
726 ):
27050
df9b73d2d444 largefiles: fall back to the original for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents: 27034
diff changeset
727 if not lfutil.isstandin(orig) or fcd.isabsent() or fco.isabsent():
48431
6b1049d71c3e filemerge: make `_filemerge()` do both premerge and merge
Martin von Zweigbergk <martinvonz@google.com>
parents: 48390
diff changeset
728 return origfn(repo, wctx, mynode, orig, fcd, fco, fca, labels=labels)
20298
9d350fa0708e largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents: 20297
diff changeset
729
31740
a40e979b9d97 largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31735
diff changeset
730 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
731 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
732 ohash = lfutil.readasstandin(fco).lower()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
733 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
734 ohash != ahash
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
735 and ohash != dhash
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
736 and (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
737 dhash == ahash
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
738 or repo.ui.promptchoice(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
739 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
740 b'largefile %s has a merge conflict\nancestor was %s\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
741 b'you can keep (l)ocal %s or take (o)ther %s.\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
742 b'what do you want to do?'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
743 b'$$ &Local $$ &Other'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
744 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
745 % (lfutil.splitstandin(orig), ahash, dhash, ohash),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
746 0,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
747 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
748 == 1
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
749 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
750 ):
20298
9d350fa0708e largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents: 20297
diff changeset
751 repo.wwrite(fcd.path(), fco.data(), fco.flags())
48506
608a35db186c filemerge: stop returning always-`True` value
Martin von Zweigbergk <martinvonz@google.com>
parents: 48432
diff changeset
752 return 0, False
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
753
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
754
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
755 @eh.wrapfunction(copiesmod, 'pathcopies')
24782
4906dc0e038c copies: add matcher parameter to copy logic
Durham Goode <durham@fb.com>
parents: 24680
diff changeset
756 def copiespathcopies(orig, ctx1, ctx2, match=None):
4906dc0e038c copies: add matcher parameter to copy logic
Durham Goode <durham@fb.com>
parents: 24680
diff changeset
757 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
758 updated = {}
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
759
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
760 for k, v in copies.items():
24230
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
761 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
762
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
763 return updated
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
764
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
765
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
766 # 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
767 # 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
768 # 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
769 # 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
770 # dirstate updated.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
771 @eh.wrapfunction(cmdutil, 'copy')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
772 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
773 # doesn't remove largefile on rename
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
774 if len(pats) < 2:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
775 # this isn't legal, let the original function deal with it
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
776 return orig(ui, repo, pats, opts, rename)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
777
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
778 # 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
779 # 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
780 # 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
781 # match largefiles and run it again.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
782 nonormalfiles = False
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
783 nolfiles = False
41581
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
784 manifest = repo[None].manifest()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
785
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
786 def normalfilesmatchfn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
787 orig,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
788 ctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
789 pats=(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
790 opts=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
791 globbed=False,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
792 default=b'relpath',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
793 badfn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
794 ):
41581
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
795 if opts is None:
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
796 opts = {}
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
797 match = orig(ctx, pats, opts, globbed, default, badfn=badfn)
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
798 return composenormalfilematcher(match, manifest)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
799
50787
584fc92dd8d7 wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50785
diff changeset
800 with extensions.wrappedfunction(scmutil, 'match', normalfilesmatchfn):
41581
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
801 try:
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
802 result = orig(ui, repo, pats, opts, rename)
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
803 except error.Abort as e:
45682
d2e1dcd4490d errors: name arguments to Abort constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 45557
diff changeset
804 if e.message != _(b'no files to copy'):
41581
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
805 raise e
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
806 else:
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
807 nonormalfiles = True
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
808 result = 0
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
809
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
810 # The first rename can cause our current working directory to be removed.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
811 # In that case there is nothing left to copy/rename so just quit.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
812 try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
813 repo.getcwd()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
814 except OSError:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
815 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
816
24006
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
817 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
818 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
819 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
820
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
821 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
822 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
823
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
824 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
825 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
826 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
827
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
828 try:
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
829 # 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
830 # 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
831 wlock = repo.wlock()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
832
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
833 manifest = repo[None].manifest()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
834
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
835 def overridematch(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
836 orig,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
837 ctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
838 pats=(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
839 opts=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
840 globbed=False,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
841 default=b'relpath',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
842 badfn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
843 ):
26341
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26340
diff changeset
844 if opts is None:
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26340
diff changeset
845 opts = {}
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
846 newpats = []
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
847 # The patterns were previously mangled to add the standin
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
848 # directory; we need to remove that now
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
849 for pat in pats:
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
850 if matchmod.patkind(pat) is None and lfutil.shortname in pat:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
851 newpats.append(pat.replace(lfutil.shortname, b''))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
852 else:
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
853 newpats.append(pat)
41580
9f11759fc5f5 largefiles: use wrappedfunction() for match() override in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41579
diff changeset
854 match = orig(ctx, newpats, opts, globbed, default, badfn=badfn)
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
855 m = copy.copy(match)
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
856 m._was_tampered_with = True
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
857 lfile = lambda f: lfutil.standin(f) in manifest
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
858 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
859 m._fileset = set(m._files)
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
860 origmatchfn = m.matchfn
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
861
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
862 def matchfn(f):
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
863 lfile = lfutil.splitstandin(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
864 return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
865 lfile is not None
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
866 and (f in manifest)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
867 and origmatchfn(lfile)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
868 or None
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
869 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
870
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
871 m.matchfn = matchfn
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
872 return m
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
873
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
874 listpats = []
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
875 for pat in pats:
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
876 if matchmod.patkind(pat) is not None:
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
877 listpats.append(pat)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
878 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
879 listpats.append(makestandin(pat))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
880
41579
028bb170e74d largefiles: use wrappedfunction() for util.copyfile() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 41578
diff changeset
881 copiedfiles = []
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
882
41579
028bb170e74d largefiles: use wrappedfunction() for util.copyfile() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 41578
diff changeset
883 def overridecopyfile(orig, src, dest, *args, **kwargs):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
884 if lfutil.shortname in src and dest.startswith(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
885 repo.wjoin(lfutil.shortname)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
886 ):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
887 destlfile = dest.replace(lfutil.shortname, b'')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
888 if not opts[b'force'] and os.path.exists(destlfile):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
889 raise IOError(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
890 b'', _(b'destination largefile already exists')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
891 )
41579
028bb170e74d largefiles: use wrappedfunction() for util.copyfile() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 41578
diff changeset
892 copiedfiles.append((src, dest))
028bb170e74d largefiles: use wrappedfunction() for util.copyfile() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 41578
diff changeset
893 orig(src, dest, *args, **kwargs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
894
50787
584fc92dd8d7 wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50785
diff changeset
895 with extensions.wrappedfunction(util, 'copyfile', overridecopyfile):
584fc92dd8d7 wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50785
diff changeset
896 with extensions.wrappedfunction(scmutil, 'match', overridematch):
41760
1eb2fc21da12 cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
897 result += orig(ui, repo, listpats, opts, rename)
21196
5c0d5b95b824 largefiles: remove directories emptied after their files are moved (issue3515)
Matt Harbison <matt_harbison@yahoo.com>
parents: 21110
diff changeset
898
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
899 lfdirstate = lfutil.openlfdirstate(ui, repo)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
900 for (src, dest) in copiedfiles:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
901 if lfutil.shortname in src and dest.startswith(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
902 repo.wjoin(lfutil.shortname)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
903 ):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
904 srclfile = src.replace(repo.wjoin(lfutil.standin(b'')), b'')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
905 destlfile = dest.replace(repo.wjoin(lfutil.standin(b'')), b'')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
906 destlfiledir = repo.wvfs.dirname(repo.wjoin(destlfile)) or b'.'
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
907 if not os.path.isdir(destlfiledir):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
908 os.makedirs(destlfiledir)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
909 if rename:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
910 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
911
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
912 # 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
913 # directories as a side-effect.
31309
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31099
diff changeset
914 repo.wvfs.unlinkpath(srclfile, ignoremissing=True)
47655
0ab58b1f228f largefile: use `set_untracked` in the override of copy/rename
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47654
diff changeset
915 lfdirstate.set_untracked(srclfile)
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
916 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
917 util.copyfile(repo.wjoin(srclfile), repo.wjoin(destlfile))
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
918
47650
1e5a9783bba8 largefile: use `set_tracked` in the `hg copy` overwrite
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47649
diff changeset
919 lfdirstate.set_tracked(destlfile)
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 48118
diff changeset
920 lfdirstate.write(repo.currenttransaction())
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
921 except error.Abort as e:
45682
d2e1dcd4490d errors: name arguments to Abort constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 45557
diff changeset
922 if e.message != _(b'no files to copy'):
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
923 raise e
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
924 else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
925 nolfiles = True
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
926 finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
927 wlock.release()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
928
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
929 if nolfiles and nonormalfiles:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
930 raise error.Abort(_(b'no files to copy'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
931
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
932 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
933
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
934
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
935 # 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
936 # 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
937 # 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
938 # the necessary largefiles.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
939 #
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
940 # 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
941 # 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
942 # 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
943 # resulting standins update the largefiles.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
944 @eh.wrapfunction(cmdutil, 'revert')
45375
8c466bcb0879 revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45348
diff changeset
945 def overriderevert(orig, ui, repo, ctx, *pats, **opts):
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
946 # 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
947 # 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
948 # prevent others from changing them in their incorrect state.
50138
270dc01481af large-files: use `running_status` in `overriderevert`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50103
diff changeset
949 with repo.wlock(), repo.dirstate.running_status(repo):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
950 lfdirstate = lfutil.openlfdirstate(ui, repo)
23039
1350b9170089 largefiles: remove confusing rev parameter for lfdirstatestatus
Mads Kiilerich <madski@unity3d.com>
parents: 23038
diff changeset
951 s = lfutil.lfdirstatestatus(lfdirstate, repo)
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 48118
diff changeset
952 lfdirstate.write(repo.currenttransaction())
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
953 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
954 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
955 for lfile in s.deleted:
31618
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
956 fstandin = lfutil.standin(lfile)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
957 if repo.wvfs.exists(fstandin):
31618
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
958 repo.wvfs.unlink(fstandin)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
959
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
960 oldstandins = lfutil.getstandinsstate(repo)
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
961
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
962 def overridematch(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
963 orig,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
964 mctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
965 pats=(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
966 opts=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
967 globbed=False,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
968 default=b'relpath',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
969 badfn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
970 ):
26343
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26342
diff changeset
971 if opts is None:
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26342
diff changeset
972 opts = {}
41582
7b2580e0dbbd largefiles: use wrappedfunction() in overriderevert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41581
diff changeset
973 match = orig(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
974 m = copy.copy(match)
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
975 m._was_tampered_with = True
24133
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
976
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
977 # 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
978 # 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
979 # 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
980 # this invocation of match.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
981 lfdirstate = lfutil.openlfdirstate(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
982 mctx.repo().ui, mctx.repo(), False
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
983 )
24133
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
984
31654
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31653
diff changeset
985 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
986 matchfiles = []
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
987 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
988 standin = lfutil.standin(f)
24438
5b85a5bc5bbb revert: evaluate filesets against working directory (issue4497)
Martin von Zweigbergk <martinvonz@google.com>
parents: 24437
diff changeset
989 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
990 matchfiles.append(standin)
48106
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
991 elif standin in wctx or lfdirstate.get_entry(f).removed:
31656
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
992 continue
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
993 else:
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
994 matchfiles.append(f)
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
995 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
996 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
997 origmatchfn = m.matchfn
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
998
21095
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
999 def matchfn(f):
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1000 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1001 if lfile is not None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1002 return origmatchfn(lfile) and (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
1003 return origmatchfn(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1004
21095
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
1005 m.matchfn = matchfn
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
1006 return m
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1007
50787
584fc92dd8d7 wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50785
diff changeset
1008 with extensions.wrappedfunction(scmutil, 'match', overridematch):
45375
8c466bcb0879 revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45348
diff changeset
1009 orig(ui, repo, ctx, *pats, **opts)
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
1010
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
1011 newstandins = lfutil.getstandinsstate(repo)
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
1012 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
1013 # 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
1014 # 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
1015 # 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
1016 # '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
1017 # of target (standin) file.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1018 lfcommands.updatelfiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1019 ui, repo, filelist, printmessage=False, normallookup=True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1020 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1021
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
1022
23183
51c9196a6bd0 largefiles: remove meaningless code path for "hg pull --rebase"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23145
diff changeset
1023 # 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
1024 # largefiles updated remotely
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1025 @eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1026 b'pull',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1027 opts=[
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1028 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1029 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1030 b'all-largefiles',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1031 None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1032 _(b'download all pulled versions of largefiles (DEPRECATED)'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1033 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1034 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1035 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1036 b'lfrev',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1037 [],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1038 _(b'download largefiles for these revisions'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1039 _(b'REV'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1040 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1041 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1042 )
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1043 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
1044 revsprepull = len(repo)
18977
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
1045 if not source:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1046 source = b'default'
18977
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
1047 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
1048 result = orig(ui, repo, source, **opts)
18977
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
1049 revspostpull = len(repo)
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
1050 lfrevs = opts.get('lfrev', [])
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
1051 if opts.get('all_largefiles'):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1052 lfrevs.append(b'pulled()')
18978
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
1053 if lfrevs and revspostpull > revsprepull:
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
1054 numcached = 0
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1055 repo.firstpulled = revsprepull # for pulled() revset expression
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1056 try:
48116
5ced12cfa41b errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents: 48106
diff changeset
1057 for rev in logcmdutil.revrange(repo, lfrevs):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1058 ui.note(_(b'pulling largefiles for revision %d\n') % rev)
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1059 (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
1060 numcached += len(cached)
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1061 finally:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1062 del repo.firstpulled
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1063 ui.status(_(b"%d largefiles cached\n") % numcached)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1064 return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1065
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1066
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1067 @eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1068 b'push',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1069 opts=[
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1070 (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1071 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1072 b'lfrev',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1073 [],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1074 _(b'upload largefiles for these revisions'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1075 _(b'REV'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1076 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1077 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1078 )
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
1079 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
1080 """Override push command and store --lfrev parameters in opargs"""
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
1081 lfrevs = kwargs.pop('lfrev', None)
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
1082 if lfrevs:
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
1083 opargs = kwargs.setdefault('opargs', {})
48116
5ced12cfa41b errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents: 48106
diff changeset
1084 opargs[b'lfrevs'] = logcmdutil.revrange(repo, lfrevs)
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
1085 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
1086
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1087
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1088 @eh.wrapfunction(exchange, 'pushoperation')
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
1089 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
1090 """Override pushoperation constructor and store lfrevs parameter"""
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
1091 lfrevs = kwargs.pop('lfrevs', None)
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
1092 pushop = orig(*args, **kwargs)
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
1093 pushop.lfrevs = lfrevs
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
1094 return pushop
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
1095
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1096
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1097 @eh.revsetpredicate(b'pulled()')
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1098 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
1099 """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
1100
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1101 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
1102
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1103 .. container:: verbose
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1104
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1105 Some examples:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1106
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1107 - 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
1108
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1109 hg pull -lfrev "pulled()"
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1110
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1111 - 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
1112
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1113 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
1114
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1115 """
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1116
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1117 try:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1118 firstpulled = repo.firstpulled
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
1119 except AttributeError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1120 raise error.Abort(_(b"pulled() only available in --lfrev"))
31023
aea06029919e revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents: 30215
diff changeset
1121 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
1122
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1123
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1124 @eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1125 b'clone',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1126 opts=[
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1127 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1128 b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1129 b'all-largefiles',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1130 None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1131 _(b'download all versions of all largefiles'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1132 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1133 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1134 )
16644
98a9266db803 largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16642
diff changeset
1135 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
1136 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
1137 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
1138 d = hg.defaultdest(source)
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
1139 if opts.get('all_largefiles') and not hg.islocal(d):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1140 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1141 _(b'--all-largefiles is incompatible with non-local destination %s')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1142 % d
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1143 )
17601
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
1144
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
1145 return orig(ui, source, dest, **opts)
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
1146
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1147
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1148 @eh.wrapfunction(hg, 'clone')
17601
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
1149 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
1150 result = orig(ui, opts, *args, **kwargs)
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
1151
17824
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
1152 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
1153 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
1154 repo = destrepo.local()
56136786000f largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents: 17598
diff changeset
1155
24812
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
1156 # 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
1157 # 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
1158 # 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
1159 if not repo:
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
1160 return result
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
1161
17599
56136786000f largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents: 17598
diff changeset
1162 # 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
1163 # 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
1164 # this option, so attempt whether or not this is a largefile repo.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1165 if opts.get(b'all_largefiles'):
45453
39ddb1121c4e largefiles: remove unused 'rev' parameter from downloadlfiles()
Yuya Nishihara <yuya@tcha.org>
parents: 45375
diff changeset
1166 success, missing = lfcommands.downloadlfiles(ui, repo)
17601
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
1167
17824
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
1168 if missing != 0:
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
1169 return None
17601
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
1170
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
1171 return result
16644
98a9266db803 largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16642
diff changeset
1172
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1173
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1174 @eh.wrapcommand(b'rebase', extension=b'rebase')
45545
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1175 def overriderebasecmd(orig, ui, repo, **opts):
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50892
diff changeset
1176 if not hasattr(repo, '_largefilesenabled'):
24158
d414c28db84d largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23976
diff changeset
1177 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
1178
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
1179 resuming = opts.get('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
1180 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
1181 repo._lfstatuswriters.append(lambda *msg, **opts: None)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1182 try:
45545
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1183 with ui.configoverride(
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1184 {(b'rebase', b'experimental.inmemory'): False}, b"largefiles"
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1185 ):
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1186 return orig(ui, repo, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1187 finally:
23190
383ff455cab8 largefiles: avoid printing messages while rebasing by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23189
diff changeset
1188 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
1189 repo._lfcommithooks.pop()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1190
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1191
45545
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1192 @eh.extsetup
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1193 def overriderebase(ui):
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1194 try:
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1195 rebase = extensions.find(b'rebase')
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1196 except KeyError:
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1197 pass
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1198 else:
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1199
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1200 def _dorebase(orig, *args, **kwargs):
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1201 kwargs['inmemory'] = False
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1202 return orig(*args, **kwargs)
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1203
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1204 extensions.wrapfunction(rebase, '_dorebase', _dorebase)
45545
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1205
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1206
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1207 @eh.wrapcommand(b'archive')
25811
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
1208 def overridearchivecmd(orig, ui, repo, dest, **opts):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
1209 with lfstatus(repo.unfiltered()):
25811
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
1210 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
1211
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1212
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1213 @eh.wrapfunction(webcommands, 'archive')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36736
diff changeset
1214 def hgwebarchive(orig, web):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
1215 with lfstatus(web.repo):
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36736
diff changeset
1216 return orig(web)
26417
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
1217
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1218
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1219 @eh.wrapfunction(archival, 'archive')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1220 def overridearchive(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1221 orig,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1222 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1223 dest,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1224 node,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1225 kind,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1226 decode=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1227 match=None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1228 prefix=b'',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1229 mtime=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1230 subrepos=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1231 ):
26417
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
1232 # 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
1233 # 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
1234 if not repo.lfstatus and not repo.unfiltered().lfstatus:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1235 return orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1236 repo, dest, node, kind, decode, match, prefix, mtime, subrepos
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1237 )
25811
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
1238
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
1239 # 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
1240 # largefile caches, neither of which are modified.
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1241 if node is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1242 lfcommands.cachelfiles(repo.ui, repo, node)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1243
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1244 if kind not in archival.archivers:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1245 raise error.Abort(_(b"unknown archive type '%s'") % kind)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1246
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1247 ctx = repo[node]
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1248
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1249 if kind == b'files':
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
1250 if prefix:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1251 raise error.Abort(_(b'cannot give prefix when archiving to files'))
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
1252 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
1253 prefix = archival.tidyprefix(dest, kind, prefix)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1254
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
1255 def write(name, mode, islink, getdata):
40407
3d76a8e627a6 archive: change "matcnfn" argument to a real matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 39854
diff changeset
1256 if match and not match(name):
15224
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
1257 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
1258 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
1259 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
1260 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
1261 archiver.addfile(prefix + name, mode, islink, data)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1262
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
1263 archiver = archival.archivers[kind](dest, mtime or ctx.date()[0])
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1264
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1265 if repo.ui.configbool(b"ui", b"archivemeta"):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1266 write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1267 b'.hg_archival.txt',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1268 0o644,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1269 False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1270 lambda: archival.buildmetadata(ctx),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1271 )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1272
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1273 for f in ctx:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1274 ff = ctx.flags(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1275 getdata = ctx[f].data
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1276 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1277 if lfile is not None:
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1278 if node is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1279 path = lfutil.findfile(repo, getdata().strip())
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1280
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1281 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
1282 raise error.Abort(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1283 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1284 b'largefile %s not found in repo store or system cache'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1285 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1286 % lfile
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1287 )
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1288 else:
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1289 path = lfile
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1290
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1291 f = lfile
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1292
27772
00bd72629a45 largefiles: use util.readfile in overrides
Bryan O'Sullivan <bryano@fb.com>
parents: 27655
diff changeset
1293 getdata = lambda: util.readfile(path)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1294 write(f, b'x' in ff and 0o755 or 0o644, b'l' in ff, getdata)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1295
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1296 if subrepos:
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18341
diff changeset
1297 for subpath in sorted(ctx.substate):
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1298 sub = ctx.workingsub(subpath)
40407
3d76a8e627a6 archive: change "matcnfn" argument to a real matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 39854
diff changeset
1299 submatch = matchmod.subdirmatcher(subpath, match)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1300 subprefix = prefix + subpath + b'/'
44015
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1301
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1302 # TODO: Only hgsubrepo instances have `_repo`, so figure out how to
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1303 # infer and possibly set lfstatus in hgsubrepoarchive. That would
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1304 # allow only hgsubrepos to set this, instead of the current scheme
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1305 # where the parent sets this for the child.
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1306 with (
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50892
diff changeset
1307 hasattr(sub, '_repo')
44015
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1308 and lfstatus(sub._repo)
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1309 or util.nullcontextmanager()
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1310 ):
43296
2cb787b65cf2 largefiles: use context manager for setting "lfstatus" on subrepos too
Martin von Zweigbergk <martinvonz@google.com>
parents: 43295
diff changeset
1311 sub.archive(archiver, subprefix, submatch)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1312
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1313 archiver.done()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1314
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1315
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1316 @eh.wrapfunction(subrepo.hgsubrepo, 'archive')
31099
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31023
diff changeset
1317 def hgsubrepoarchive(orig, repo, archiver, prefix, match=None, decode=True):
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50892
diff changeset
1318 lfenabled = hasattr(repo._repo, '_largefilesenabled')
32827
d3ab31bf9c0e largefiles: avoid a crash when archiving a subrepo with largefiles disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 31892
diff changeset
1319 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
1320 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
1321
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1322 repo._get(repo._state + (b'hg',))
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1323 rev = repo._state[1]
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1324 ctx = repo._repo[rev]
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1325
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1326 if ctx.node() is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1327 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
1328
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1329 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
1330 # 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
1331 # 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
1332 if match and not match(f):
1894dac619de subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 17107
diff changeset
1333 return
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1334 data = getdata()
31099
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31023
diff changeset
1335 if decode:
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31023
diff changeset
1336 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
1337
41631
3d9d5e612e67 subrepo: adjust subrepo prefix before calling subrepo.archive() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41582
diff changeset
1338 archiver.addfile(prefix + name, mode, islink, data)
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1339
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1340 for f in ctx:
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1341 ff = ctx.flags(f)
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1342 getdata = ctx[f].data
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1343 lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1344 if lfile is not None:
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1345 if ctx.node() is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1346 path = lfutil.findfile(repo._repo, getdata().strip())
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1347
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1348 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
1349 raise error.Abort(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1350 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1351 b'largefile %s not found in repo store or system cache'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1352 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1353 % lfile
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1354 )
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1355 else:
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1356 path = lfile
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1357
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1358 f = lfile
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1359
27772
00bd72629a45 largefiles: use util.readfile in overrides
Bryan O'Sullivan <bryano@fb.com>
parents: 27655
diff changeset
1360 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
1361
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1362 write(f, b'x' in ff and 0o755 or 0o644, b'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
1363
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18341
diff changeset
1364 for subpath in sorted(ctx.substate):
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
1365 sub = ctx.workingsub(subpath)
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
1366 submatch = matchmod.subdirmatcher(subpath, match)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1367 subprefix = prefix + subpath + b'/'
44015
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1368 # TODO: Only hgsubrepo instances have `_repo`, so figure out how to
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1369 # infer and possibly set lfstatus at the top of this function. That
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1370 # would allow only hgsubrepos to set this, instead of the current scheme
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1371 # where the parent sets this for the child.
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1372 with (
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50892
diff changeset
1373 hasattr(sub, '_repo')
44015
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1374 and lfstatus(sub._repo)
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1375 or util.nullcontextmanager()
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
1376 ):
43296
2cb787b65cf2 largefiles: use context manager for setting "lfstatus" on subrepos too
Martin von Zweigbergk <martinvonz@google.com>
parents: 43295
diff changeset
1377 sub.archive(archiver, subprefix, submatch, decode)
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
1378
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1379
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
1380 # 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
1381 # 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
1382 # 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
1383 # largefiles were changed. This is used by bisect, backout and fetch.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1384 @eh.wrapfunction(cmdutil, 'bailifchanged')
24472
1bf71faf042e cmdutil: allow bailifchanged to ignore merging in progress
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24438
diff changeset
1385 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
1386 orig(repo, *args, **kwargs)
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
1387 with lfstatus(repo):
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
1388 s = repo.status()
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1389 if s.modified or s.added or s.removed or s.deleted:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1390 raise error.Abort(_(b'uncommitted changes'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1391
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1392
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1393 @eh.wrapfunction(cmdutil, 'postcommitstatus')
27944
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 27905
diff changeset
1394 def postcommitstatus(orig, repo, *args, **kwargs):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
1395 with lfstatus(repo):
27944
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 27905
diff changeset
1396 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
1397
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1398
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1399 @eh.wrapfunction(cmdutil, 'forget')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1400 def cmdutilforget(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1401 orig, ui, repo, match, prefix, uipathfn, explicitonly, dryrun, interactive
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1402 ):
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
1403 normalmatcher = composenormalfilematcher(match, repo[None].manifest())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1404 bad, forgot = orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1405 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1406 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1407 normalmatcher,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1408 prefix,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1409 uipathfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1410 explicitonly,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1411 dryrun,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1412 interactive,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1413 )
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
1414 m = composelargefilematcher(match, repo[None].manifest())
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1415
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
1416 with lfstatus(repo):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1417 s = repo.status(match=m, clean=True)
31654
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31653
diff changeset
1418 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
1419 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
1420 forget = [f for f in forget if lfutil.standin(f) in manifest]
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1421
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1422 for f in forget:
31618
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
1423 fstandin = lfutil.standin(f)
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
1424 if fstandin not in repo.dirstate and not repo.wvfs.isdir(fstandin):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1425 ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1426 _(b'not removing %s: file is already untracked\n') % uipathfn(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1427 )
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
1428 bad.append(f)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1429
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1430 for f in forget:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1431 if ui.verbose or not m.exact(f):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1432 ui.status(_(b'removing %s\n') % uipathfn(f))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1433
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1434 # 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
1435 # 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
1436 with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1437 lfdirstate = lfutil.openlfdirstate(ui, repo)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1438 for f in forget:
47654
2af9709ea13c largefile: use `set_untracked` in the `forget` override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47653
diff changeset
1439 lfdirstate.set_untracked(f)
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 48118
diff changeset
1440 lfdirstate.write(repo.currenttransaction())
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
1441 standins = [lfutil.standin(f) for f in forget]
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
1442 for f in standins:
31309
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31099
diff changeset
1443 repo.wvfs.unlinkpath(f, ignoremissing=True)
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
1444 rejected = repo[None].forget(standins)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1445
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
1446 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
1447 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
1448 return bad, forgot
17579
cbacb5a813dd largefiles: preserve the exit status of the forget command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17578
diff changeset
1449
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1450
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1451 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
1452 """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
1453 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
1454
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1455 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
1456
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
1457 '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
1458 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
1459 """
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
1460 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
1461 lfhashes = set()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1462
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
1463 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
1464 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
1465 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
1466 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
1467 lfhashes.add(lfhash)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1468
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
1469 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
1470 if lfhashes:
29355
85868ecf2c0d largefiles: make storefactory._openstore public
liscju <piotr.listkiewicz@gmail.com>
parents: 29318
diff changeset
1471 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
1472 for fn, lfhash in knowns:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1473 if not lfexists[lfhash]: # lfhash doesn't exist on "other"
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1474 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
1475
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1476
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
1477 def outgoinghook(ui, repo, other, opts, missing):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1478 if opts.pop(b'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
1479 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
1480 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
1481 toupload = {}
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1482
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
1483 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
1484 if fn not in toupload:
49854
cb3918e5bc77 typing: disable [unsupported-operands] warning in the largefiles outgoing hook
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
1485 toupload[fn] = [] # pytype: disable=unsupported-operands
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
1486 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
1487 lfhashes.add(lfhash)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1488
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
1489 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
1490 for lfhash in sorted(toupload[fn]):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1491 ui.debug(b' %s\n' % lfhash)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1492
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
1493 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
1494 toupload = set()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1495
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
1496 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
1497 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
1498 lfhashes.add(lfhash)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1499
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
1500 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
1501 pass
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1502
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1503 _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
1504
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
1505 if not toupload:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1506 ui.status(_(b'largefiles: no files to upload\n'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1507 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1508 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1509 _(b'largefiles to upload (%d entities):\n') % (len(lfhashes))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1510 )
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
1511 for file in sorted(toupload):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1512 ui.status(lfutil.splitstandin(file) + b'\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
1513 showhashes(file)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1514 ui.status(b'\n')
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1515
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1516
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1517 @eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1518 b'outgoing', opts=[(b'', b'large', None, _(b'display outgoing largefiles'))]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1519 )
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1520 def _outgoingcmd(orig, *args, **kwargs):
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1521 # Nothing to do here other than add the extra help option- the hook above
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1522 # processes it.
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1523 return orig(*args, **kwargs)
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
1524
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1525
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1526 def summaryremotehook(ui, repo, opts, changes):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1527 largeopt = opts.get(b'large', False)
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1528 if changes is None:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1529 if largeopt:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1530 return (False, True) # only outgoing check is needed
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1531 else:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1532 return (False, False)
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1533 elif largeopt:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1534 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
1535 if peer is None:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1536 # i18n: column positioning for "hg summary"
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1537 ui.status(_(b'largefiles: (no remote repo)\n'))
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1538 return
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1539
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1540 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
1541 lfhashes = set()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1542
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
1543 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
1544 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
1545 lfhashes.add(lfhash)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1546
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
1547 _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
1548
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1549 if not toupload:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1550 # i18n: column positioning for "hg summary"
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1551 ui.status(_(b'largefiles: (no files to upload)\n'))
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1552 else:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1553 # i18n: column positioning for "hg summary"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1554 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1555 _(b'largefiles: %d entities for %d files to upload\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1556 % (len(lfhashes), len(toupload))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1557 )
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
1558
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1559
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1560 @eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1561 b'summary', opts=[(b'', b'large', None, _(b'display outgoing largefiles'))]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1562 )
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1563 def overridesummary(orig, ui, repo, *pats, **opts):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
1564 with lfstatus(repo):
15787
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
1565 orig(ui, repo, *pats, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1566
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1567
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1568 @eh.wrapfunction(scmutil, 'addremove')
50029
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
1569 def scmutiladdremove(
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
1570 orig,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
1571 repo,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
1572 matcher,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
1573 prefix,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
1574 uipathfn,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
1575 opts=None,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
1576 open_tr=None,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
1577 ):
26344
cd9cc7f30427 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26343
diff changeset
1578 if opts is None:
cd9cc7f30427 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26343
diff changeset
1579 opts = {}
16636
b371056ae353 largefiles: follow normal codepath for addremove if non-largefiles repo (issue3249)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16516
diff changeset
1580 if not lfutil.islfilesrepo(repo):
50029
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
1581 return orig(repo, matcher, prefix, uipathfn, opts, open_tr=open_tr)
50139
ce657d7b7c39 large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50138
diff changeset
1582
ce657d7b7c39 large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50138
diff changeset
1583 # open the transaction and changing_files context
ce657d7b7c39 large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50138
diff changeset
1584 if open_tr is not None:
ce657d7b7c39 large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50138
diff changeset
1585 open_tr()
ce657d7b7c39 large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50138
diff changeset
1586
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1587 # Get the list of missing largefiles so we can remove them
50140
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
1588 with repo.dirstate.running_status(repo):
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
1589 lfdirstate = lfutil.openlfdirstate(repo.ui, repo)
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
1590 unsure, s, mtime_boundary = lfdirstate.status(
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
1591 matchmod.always(),
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
1592 subrepos=[],
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
1593 ignored=False,
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
1594 clean=False,
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
1595 unknown=False,
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
1596 )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1597
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1598 # 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
1599 # 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
1600 # 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
1601 # confused state later.
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
1602 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
1603 m = copy.copy(matcher)
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
1604 m._was_tampered_with = 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
1605
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
1606 # 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
1607 # 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
1608 # 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
1609 # 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
1610 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
1611 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
1612
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1613 removelargefiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1614 repo.ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1615 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1616 True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1617 m,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1618 uipathfn,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1619 opts.get(b'dry_run'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1620 **pycompat.strkwargs(opts)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1621 )
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1622 # 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
1623 # largefiles will be
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1624 added, bad = addlargefiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1625 repo.ui, repo, True, matcher, uipathfn, **pycompat.strkwargs(opts)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1626 )
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
1627 # 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
1628 # 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
1629 # 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
1630 matcher = composenormalfilematcher(matcher, repo[None].manifest(), added)
50029
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
1631
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
1632 return orig(repo, matcher, prefix, uipathfn, opts, open_tr=open_tr)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1633
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1634
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
1635 # Calling purge with --all will cause the largefiles to be deleted.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1636 # Override repo.status to prevent this from happening.
46368
bb3a5c0df06b purge: move extension into core mercurial
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46047
diff changeset
1637 @eh.wrapcommand(b'purge')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1638 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
1639 # 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
1640 # 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
1641 # 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
1642 # 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
1643 # 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
1644 # 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
1645 #
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23634
diff changeset
1646 # 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
1647 # 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
1648 repo = repo.unfiltered()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1649 oldstatus = repo.status
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1650
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1651 def overridestatus(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1652 node1=b'.',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1653 node2=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1654 match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1655 ignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1656 clean=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1657 unknown=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1658 listsubrepos=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1659 ):
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1660 r = oldstatus(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1661 node1, node2, match, ignored, clean, unknown, listsubrepos
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1662 )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1663 lfdirstate = lfutil.openlfdirstate(ui, repo)
48106
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
1664 unknown = [
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
1665 f for f in r.unknown if not lfdirstate.get_entry(f).any_tracked
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
1666 ]
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
1667 ignored = [
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
1668 f for f in r.ignored if not lfdirstate.get_entry(f).any_tracked
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
1669 ]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1670 return scmutil.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1671 r.modified, r.added, r.removed, r.deleted, unknown, ignored, r.clean
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1672 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1673
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1674 repo.status = overridestatus
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1675 orig(ui, repo, *dirs, **opts)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1676 repo.status = oldstatus
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
1677
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1678
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1679 @eh.wrapcommand(b'rollback')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1680 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
1681 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
1682 before = repo.dirstate.parents()
44452
9d2b2df2c2ba cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents: 44129
diff changeset
1683 orphans = {
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1684 f
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1685 for f in repo.dirstate
48106
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
1686 if lfutil.isstandin(f) and not repo.dirstate.get_entry(f).removed
44452
9d2b2df2c2ba cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents: 44129
diff changeset
1687 }
22094
7d7065476fea largefiles: put whole rollback-ing process into the same "wlock" scope
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21934
diff changeset
1688 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
1689 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
1690 if before == after:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1691 return result # no need to restore standins
22283
cb556ea76dcd largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22196
diff changeset
1692
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1693 pctx = repo[b'.']
22285
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1694 for f in repo.dirstate:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1695 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
1696 orphans.discard(f)
48106
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
1697 if repo.dirstate.get_entry(f).removed:
22285
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1698 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
1699 elif f in pctx:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1700 fctx = pctx[f]
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1701 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
1702 else:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
1703 # 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
1704 # 'm' or 'n' (coming from the 2nd parent) cases
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1705 lfutil.writestandin(repo, f, b'', 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
1706 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
1707 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
1708
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
1709 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
1710
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1711
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1712 @eh.wrapcommand(b'transplant', extension=b'transplant')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
1713 def overridetransplant(orig, ui, repo, *revs, **opts):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
1714 resuming = opts.get('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
1715 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
1716 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
1717 try:
bf502ccc46d7 largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15967
diff changeset
1718 result = orig(ui, repo, *revs, **opts)
bf502ccc46d7 largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15967
diff changeset
1719 finally:
23275
fae708cb32d1 largefiles: avoid printing messages while transplanting by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23274
diff changeset
1720 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
1721 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
1722 return result
16439
290850e7aa43 largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16248
diff changeset
1723
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1724
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1725 @eh.wrapcommand(b'cat')
16439
290850e7aa43 largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16248
diff changeset
1726 def overridecat(orig, ui, repo, file1, *pats, **opts):
50880
ee393dbfe5cb largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50787
diff changeset
1727 ctx = logcmdutil.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
1728 err = 1
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1729 notbad = set()
50880
ee393dbfe5cb largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50787
diff changeset
1730 m = scmutil.match(ctx, (file1,) + pats, pycompat.byteskwargs(opts))
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
1731 m._was_tampered_with = True
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1732 origmatchfn = m.matchfn
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1733
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1734 def lfmatchfn(f):
21087
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
1735 if origmatchfn(f):
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
1736 return True
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1737 lf = lfutil.splitstandin(f)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1738 if lf is None:
21087
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
1739 return False
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1740 notbad.add(lf)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1741 return origmatchfn(lf)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1742
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1743 m.matchfn = lfmatchfn
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1744 origbadfn = m.bad
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1745
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1746 def lfbadfn(f, msg):
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1747 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
1748 origbadfn(f, msg)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1749
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1750 m.bad = lfbadfn
24670
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1751
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1752 origvisitdirfn = m.visitdir
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1753
24670
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1754 def lfvisitdirfn(dir):
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1755 if dir == lfutil.shortname:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1756 return True
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1757 ret = origvisitdirfn(dir)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1758 if ret:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1759 return ret
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1760 lf = lfutil.splitstandin(dir)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1761 if lf is None:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1762 return False
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1763 return origvisitdirfn(lf)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1764
24670
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1765 m.visitdir = lfvisitdirfn
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
1766
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1767 for f in ctx.walk(m):
50880
ee393dbfe5cb largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50787
diff changeset
1768 with cmdutil.makefileobj(ctx, opts.get('output'), pathname=f) as fp:
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1769 lf = lfutil.splitstandin(f)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1770 if lf is None or origmatchfn(f):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1771 # duplicating unreachable code from commands.cat
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1772 data = ctx[f].data()
50880
ee393dbfe5cb largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50787
diff changeset
1773 if opts.get('decode'):
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1774 data = repo.wwritedata(f, data)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1775 fp.write(data)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1776 else:
31735
3e37b479ce2f largefiles: replace readstandin() by readasstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31659
diff changeset
1777 hash = lfutil.readasstandin(ctx[f])
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1778 if not lfutil.inusercache(repo.ui, hash):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1779 store = storefactory.openstore(repo)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1780 success, missing = store.get([(lf, hash)])
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1781 if len(success) != 1:
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1782 raise error.Abort(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1783 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1784 b'largefile %s is not in cache and could not be '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1785 b'downloaded'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1786 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1787 % lf
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1788 )
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1789 path = lfutil.usercachepath(repo.ui, hash)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1790 with open(path, b"rb") as fpin:
30181
7356e6b1f5b8 util: increase filechunkiter size to 128k
Mads Kiilerich <madski@unity3d.com>
parents: 30142
diff changeset
1791 for chunk in util.filechunkiter(fpin):
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1792 fp.write(chunk)
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
1793 err = 0
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
1794 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
1795
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1796
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1797 @eh.wrapfunction(merge, '_update')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1798 def mergeupdate(orig, repo, node, branchmerge, force, *args, **kwargs):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
1799 matcher = kwargs.get('matcher', None)
27344
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27050
diff changeset
1800 # 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
1801 partial = matcher and not matcher.always()
50103
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1802 with repo.wlock(), repo.dirstate.changing_parents(repo):
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1803 # branch | | |
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1804 # 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
1805 # -------+-------+---------+--------------
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1806 # 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
1807 # 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
1808 # 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
1809 # 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
1810 # 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
1811 # 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
1812 # 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
1813 # 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
1814 #
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1815 # (*) 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
1816 # (*1) deprecated, but used internally (e.g: "rebase --collapse")
50141
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
1817 with repo.dirstate.running_status(repo):
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
1818 lfdirstate = lfutil.openlfdirstate(repo.ui, repo)
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
1819 unsure, s, mtime_boundary = lfdirstate.status(
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
1820 matchmod.always(),
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
1821 subrepos=[],
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
1822 ignored=False,
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
1823 clean=True,
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
1824 unknown=False,
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
1825 )
30190
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1826 oldclean = set(s.clean)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1827 pctx = repo[b'.']
31653
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
1828 dctx = repo[node]
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1829 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
1830 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
1831 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
1832 continue
31617
1f6c932862e5 largefiles: replace hashrepofile by hashfile (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31616
diff changeset
1833 lfhash = lfutil.hashfile(lfileabs)
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1834 standin = lfutil.standin(lfile)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1835 lfutil.writestandin(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1836 repo, standin, lfhash, lfutil.getexecutable(lfileabs)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1837 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1838 if standin in pctx and lfhash == lfutil.readasstandin(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1839 pctx[standin]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1840 ):
30190
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1841 oldclean.add(lfile)
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1842 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
1843 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
1844 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
1845 # 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
1846 # (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
1847 continue
31659
0eec36112e58 largefiles: add lfile argument to updatestandin() for efficiency (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31656
diff changeset
1848 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
1849 # 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
1850 # 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
1851 for lfile in oldclean:
50102
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
1852 entry = lfdirstate.get_entry(lfile)
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
1853 lfdirstate.hacky_extension_update_file(
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
1854 lfile,
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
1855 wc_tracked=entry.tracked,
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
1856 p1_tracked=entry.p1_tracked,
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
1857 p2_info=entry.p2_info,
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
1858 possibly_dirty=True,
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
1859 )
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 48118
diff changeset
1860 lfdirstate.write(repo.currenttransaction())
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1861
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
1862 oldstandins = lfutil.getstandinsstate(repo)
45545
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1863 wc = kwargs.get('wc')
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1864 if wc and wc.isinmemory():
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1865 # largefiles is not a good candidate for in-memory merge (large
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1866 # files, custom dirstate, matcher usage).
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1867 raise error.ProgrammingError(
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1868 b'largefiles is not compatible with in-memory merge'
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
1869 )
50103
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1870 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
1871
50103
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1872 newstandins = lfutil.getstandinsstate(repo)
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1873 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
1874
50103
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1875 # to avoid leaving all largefiles as dirty and thus rehash them, mark
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1876 # all the ones that didn't change as clean
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1877 for lfile in oldclean.difference(filelist):
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1878 lfdirstate.update_file(lfile, p1_tracked=True, wc_tracked=True)
30190
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
1879
50103
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1880 if branchmerge or force or partial:
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1881 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
1882
50103
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1883 lfcommands.updatelfiles(
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1884 repo.ui, repo, filelist=filelist, normallookup=partial
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
1885 )
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1886
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
1887 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
1888
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1889
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1890 @eh.wrapfunction(scmutil, 'marktouched')
22289
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1891 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
1892 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
1893
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1894 filelist = []
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1895 for f in files:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1896 lf = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1897 if lf is not None:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
1898 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
1899 if filelist:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1900 lfcommands.updatelfiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1901 repo.ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1902 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1903 filelist=filelist,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1904 printmessage=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1905 normallookup=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1906 )
22289
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1907
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
1908 return result
35303
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
1909
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1910
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1911 @eh.wrapfunction(upgrade_actions, 'preservedrequirements')
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1912 @eh.wrapfunction(upgrade_actions, 'supporteddestrequirements')
35303
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
1913 def upgraderequirements(orig, repo):
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
1914 reqs = orig(repo)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1915 if b'largefiles' in repo.requirements:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1916 reqs.add(b'largefiles')
35303
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
1917 return reqs
35564
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1918
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1919
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1920 _lfscheme = b'largefile://'
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
1921
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1922
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
1923 @eh.wrapfunction(urlmod, 'open')
46464
32da58916fd0 largefiles: properly pass kwargs into url.open
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 46047
diff changeset
1924 def openlargefile(orig, ui, url_, data=None, **kwargs):
35564
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1925 if url_.startswith(_lfscheme):
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1926 if data:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1927 msg = b"cannot use data on a 'largefile://' url"
35564
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1928 raise error.ProgrammingError(msg)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
1929 lfid = url_[len(_lfscheme) :]
35564
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1930 return storefactory.getlfile(ui, lfid)
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
1931 else:
46464
32da58916fd0 largefiles: properly pass kwargs into url.open
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 46047
diff changeset
1932 return orig(ui, url_, data=data, **kwargs)