Mercurial > hg
annotate hgext/largefiles/reposetup.py @ 43105:649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
.iteritems() -> .items() is the last source transform being performed.
But it is also the most widely used.
This commit adds a pycompat.iteritems symbol and imports it in place
of .iteritems() for usage in hgext/. I chose to stop at just hgext/
because the patch will be large and it is an easy boundary to stop at
since we can disable source transformation on a per-package basis.
There are places where the type does implement items() and we could
call items() directly. However, this would require critical thought
and I thought it would be easier to just blindly change the code. We
know which call sites need to be audited in the future because they
have "pycompat.iteritems."
With this change, we no longer perform source transformation on
hgext!
Differential Revision: https://phab.mercurial-scm.org/D7014
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 06 Oct 2019 19:25:18 -0400 |
parents | 687b865b95ad |
children | 0371a8c84827 |
rev | line source |
---|---|
15168 | 1 # Copyright 2009-2010 Gregory P. Ward |
2 # Copyright 2009-2010 Intelerad Medical Systems Incorporated | |
3 # Copyright 2010-2011 Fog Creek Software | |
4 # Copyright 2010-2011 Unity Technologies | |
5 # | |
6 # This software may be used and distributed according to the terms of the | |
7 # GNU General Public License version 2 or any later version. | |
8 | |
9 '''setup for largefiles repositories: reposetup''' | |
29314
bde283a1ad1a
py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28878
diff
changeset
|
10 from __future__ import absolute_import |
bde283a1ad1a
py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28878
diff
changeset
|
11 |
15168 | 12 import copy |
13 | |
14 from mercurial.i18n import _ | |
15 | |
29314
bde283a1ad1a
py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28878
diff
changeset
|
16 from mercurial import ( |
bde283a1ad1a
py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28878
diff
changeset
|
17 error, |
bde283a1ad1a
py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28878
diff
changeset
|
18 localrepo, |
29319
cc497d2830b0
largefiles: rename match_ to matchmod import in reposetup
liscju <piotr.listkiewicz@gmail.com>
parents:
29314
diff
changeset
|
19 match as matchmod, |
29314
bde283a1ad1a
py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28878
diff
changeset
|
20 scmutil, |
bde283a1ad1a
py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28878
diff
changeset
|
21 ) |
bde283a1ad1a
py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28878
diff
changeset
|
22 |
bde283a1ad1a
py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28878
diff
changeset
|
23 from . import ( |
bde283a1ad1a
py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28878
diff
changeset
|
24 lfcommands, |
bde283a1ad1a
py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28878
diff
changeset
|
25 lfutil, |
bde283a1ad1a
py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents:
28878
diff
changeset
|
26 ) |
15168 | 27 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
28 |
15168 | 29 def reposetup(ui, repo): |
20858
bc56ec9e64df
hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20177
diff
changeset
|
30 # wire repositories should be given new wireproto functions |
bc56ec9e64df
hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20177
diff
changeset
|
31 # by "proto.wirereposetup()" via "hg.wirepeersetupfuncs" |
15168 | 32 if not repo.local(): |
20858
bc56ec9e64df
hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20177
diff
changeset
|
33 return |
15168 | 34 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16141
diff
changeset
|
35 class lfilesrepo(repo.__class__): |
24158
d414c28db84d
largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23958
diff
changeset
|
36 # the mark to examine whether "repo" object enables largefiles or not |
d414c28db84d
largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23958
diff
changeset
|
37 _largefilesenabled = True |
d414c28db84d
largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23958
diff
changeset
|
38 |
15168 | 39 lfstatus = False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
40 |
15168 | 41 def status_nolfiles(self, *args, **kwargs): |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16141
diff
changeset
|
42 return super(lfilesrepo, self).status(*args, **kwargs) |
15168 | 43 |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15250
diff
changeset
|
44 # When lfstatus is set, return a context that gives the names |
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15250
diff
changeset
|
45 # of largefiles instead of their corresponding standins and |
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15250
diff
changeset
|
46 # identifies the largefiles as always binary, regardless of |
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15250
diff
changeset
|
47 # their actual contents. |
15168 | 48 def __getitem__(self, changeid): |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16141
diff
changeset
|
49 ctx = super(lfilesrepo, self).__getitem__(changeid) |
23958
df463ca0adef
largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23923
diff
changeset
|
50 if self.lfstatus: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
51 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16141
diff
changeset
|
52 class lfilesctx(ctx.__class__): |
15168 | 53 def files(self): |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16141
diff
changeset
|
54 filenames = super(lfilesctx, self).files() |
15628
2b40513384ca
largefiles: use lfutil functions
Martin Geisler <mg@aragost.com>
parents:
15626
diff
changeset
|
55 return [lfutil.splitstandin(f) or f for f in filenames] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
56 |
15168 | 57 def manifest(self): |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16141
diff
changeset
|
58 man1 = super(lfilesctx, self).manifest() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
59 |
24428
586d33f47dca
largefiles: fix typo with s/__class/__class__/
Martin von Zweigbergk <martinvonz@google.com>
parents:
24287
diff
changeset
|
60 class lfilesmanifest(man1.__class__): |
24287
f78252429e0a
largefiles: don't create chain of __contains__ calls
Martin von Zweigbergk <martinvonz@google.com>
parents:
24276
diff
changeset
|
61 def __contains__(self, filename): |
f78252429e0a
largefiles: don't create chain of __contains__ calls
Martin von Zweigbergk <martinvonz@google.com>
parents:
24276
diff
changeset
|
62 orig = super(lfilesmanifest, self).__contains__ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
63 return orig(filename) or orig( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
64 lfutil.standin(filename) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
65 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
66 |
24287
f78252429e0a
largefiles: don't create chain of __contains__ calls
Martin von Zweigbergk <martinvonz@google.com>
parents:
24276
diff
changeset
|
67 man1.__class__ = lfilesmanifest |
15168 | 68 return man1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
69 |
15168 | 70 def filectx(self, path, fileid=None, filelog=None): |
22517
e54a001ace06
largefiles: extract 'orig' method in lfilesctx.filectx
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22516
diff
changeset
|
71 orig = super(lfilesctx, self).filectx |
15168 | 72 try: |
16141
f346de4dff57
largefiles: don't break filesets
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
16110
diff
changeset
|
73 if filelog is not None: |
22517
e54a001ace06
largefiles: extract 'orig' method in lfilesctx.filectx
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22516
diff
changeset
|
74 result = orig(path, fileid, filelog) |
16141
f346de4dff57
largefiles: don't break filesets
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
16110
diff
changeset
|
75 else: |
22517
e54a001ace06
largefiles: extract 'orig' method in lfilesctx.filectx
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22516
diff
changeset
|
76 result = orig(path, fileid) |
15168 | 77 except error.LookupError: |
78 # Adding a null character will cause Mercurial to | |
79 # identify this as a binary file. | |
16141
f346de4dff57
largefiles: don't break filesets
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
16110
diff
changeset
|
80 if filelog is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
81 result = orig( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
82 lfutil.standin(path), fileid, filelog |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
83 ) |
16141
f346de4dff57
largefiles: don't break filesets
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
16110
diff
changeset
|
84 else: |
22517
e54a001ace06
largefiles: extract 'orig' method in lfilesctx.filectx
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22516
diff
changeset
|
85 result = orig(lfutil.standin(path), fileid) |
15168 | 86 olddata = result.data |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
87 result.data = lambda: olddata() + b'\0' |
15168 | 88 return result |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
89 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16141
diff
changeset
|
90 ctx.__class__ = lfilesctx |
15168 | 91 return ctx |
92 | |
93 # Figure out the status of big files and insert them into the | |
15252
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15250
diff
changeset
|
94 # appropriate list in the result. Also removes standin files |
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15250
diff
changeset
|
95 # from the listing. Revert to the original status if |
6e809bb4f969
largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents:
15250
diff
changeset
|
96 # self.lfstatus is False. |
23958
df463ca0adef
largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23923
diff
changeset
|
97 # XXX large file status is buggy when used on repo proxy. |
df463ca0adef
largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23923
diff
changeset
|
98 # XXX this needs to be investigated. |
df463ca0adef
largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23923
diff
changeset
|
99 @localrepo.unfilteredmethod |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
100 def status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
101 self, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
102 node1=b'.', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
103 node2=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
104 match=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
105 ignored=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
106 clean=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
107 unknown=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
108 listsubrepos=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
109 ): |
15168 | 110 listignored, listclean, listunknown = ignored, clean, unknown |
22518
52dd6e25121f
largefiles: extract 'orig' method in reposetup.status
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22517
diff
changeset
|
111 orig = super(lfilesrepo, self).status |
23958
df463ca0adef
largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23923
diff
changeset
|
112 if not self.lfstatus: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
113 return orig( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
114 node1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
115 node2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
116 match, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
117 listignored, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
118 listclean, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
119 listunknown, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
120 listsubrepos, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
121 ) |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
122 |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
123 # some calls in this function rely on the old version of status |
23958
df463ca0adef
largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23923
diff
changeset
|
124 self.lfstatus = False |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
125 ctx1 = self[node1] |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
126 ctx2 = self[node2] |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
127 working = ctx2.rev() is None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
128 parentworking = working and ctx1 == self[b'.'] |
15168 | 129 |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
130 if match is None: |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
35084
diff
changeset
|
131 match = matchmod.always() |
15168 | 132 |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
133 wlock = None |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
134 try: |
19056
ac41bb76c737
largefiles: wlock in status before lfdirstate.write()
Mads Kiilerich <madski@unity3d.com>
parents:
18969
diff
changeset
|
135 try: |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
136 # updating the dirstate is optional |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
137 # so we don't wait on the lock |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
138 wlock = self.wlock(False) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
139 except error.LockError: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
140 pass |
15653
93c77d5b9752
largefiles: optimize status when files are specified (issue3144)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15630
diff
changeset
|
141 |
23146
5311de37b86f
largefiles: shortcircuit status code also for non-matching patterns
Martin von Zweigbergk <martinvonz@google.com>
parents:
23139
diff
changeset
|
142 # First check if paths or patterns were specified on the |
5311de37b86f
largefiles: shortcircuit status code also for non-matching patterns
Martin von Zweigbergk <martinvonz@google.com>
parents:
23139
diff
changeset
|
143 # command line. If there were, and they don't match any |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
144 # largefiles, we should just bail here and let super |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
145 # handle it -- thus gaining a big performance boost. |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
146 lfdirstate = lfutil.openlfdirstate(ui, self) |
23146
5311de37b86f
largefiles: shortcircuit status code also for non-matching patterns
Martin von Zweigbergk <martinvonz@google.com>
parents:
23139
diff
changeset
|
147 if not match.always(): |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
148 for f in lfdirstate: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
149 if match(f): |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
150 break |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
151 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
152 return orig( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
153 node1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
154 node2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
155 match, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
156 listignored, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
157 listclean, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
158 listunknown, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
159 listsubrepos, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
160 ) |
15168 | 161 |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
162 # Create a copy of match that matches standins instead |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
163 # of largefiles. |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
164 def tostandins(files): |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
165 if not working: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
166 return files |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
167 newfiles = [] |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
168 dirstate = self.dirstate |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
169 for f in files: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
170 sf = lfutil.standin(f) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
171 if sf in dirstate: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
172 newfiles.append(sf) |
35084
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
34344
diff
changeset
|
173 elif dirstate.hasdir(sf): |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
174 # Directory entries could be regular or |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
175 # standin, check both |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
176 newfiles.extend((f, sf)) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
177 else: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
178 newfiles.append(f) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
179 return newfiles |
18149
2dcc3653b361
largefiles: unindent code
Mads Kiilerich <madski@unity3d.com>
parents:
18148
diff
changeset
|
180 |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
181 m = copy.copy(match) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
182 m._files = tostandins(m._files) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
183 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
184 result = orig( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
185 node1, node2, m, ignored, clean, unknown, listsubrepos |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
186 ) |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
187 if working: |
15617
74e691b141c4
largefiles: optimize performance of status on largefiles repos (issue3136)
Na'Tosha Bard <natosha@unity3d.com>
parents:
15385
diff
changeset
|
188 |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
189 def sfindirstate(f): |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
190 sf = lfutil.standin(f) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
191 dirstate = self.dirstate |
35084
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
34344
diff
changeset
|
192 return sf in dirstate or dirstate.hasdir(sf) |
18149
2dcc3653b361
largefiles: unindent code
Mads Kiilerich <madski@unity3d.com>
parents:
18148
diff
changeset
|
193 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
194 match._files = [f for f in match._files if sfindirstate(f)] |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
195 # Don't waste time getting the ignored and unknown |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
196 # files from lfdirstate |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
197 unsure, s = lfdirstate.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
198 match, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
199 subrepos=[], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
200 ignored=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
201 clean=listclean, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
202 unknown=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
203 ) |
30191
328545c7d8a1
largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents:
29319
diff
changeset
|
204 (modified, added, removed, deleted, clean) = ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
205 s.modified, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
206 s.added, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
207 s.removed, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
208 s.deleted, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
209 s.clean, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
210 ) |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
211 if parentworking: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
212 for lfile in unsure: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
213 standin = lfutil.standin(lfile) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
214 if standin not in ctx1: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
215 # from second parent |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
216 modified.append(lfile) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
217 elif lfutil.readasstandin( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
218 ctx1[standin] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
219 ) != lfutil.hashfile(self.wjoin(lfile)): |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
220 modified.append(lfile) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
221 else: |
22523
8cd91f481ffd
largefiles: remove unnecessary clearing of status fields
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22518
diff
changeset
|
222 if listclean: |
8cd91f481ffd
largefiles: remove unnecessary clearing of status fields
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22518
diff
changeset
|
223 clean.append(lfile) |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
224 lfdirstate.normal(lfile) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
225 else: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
226 tocheck = unsure + modified + added + clean |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
227 modified, added, clean = [], [], [] |
23383
7f8d27e1f862
largefiles: avoid exec-bit examination on the platform being unaware of it
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23090
diff
changeset
|
228 checkexec = self.dirstate._checkexec |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
229 |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
230 for lfile in tocheck: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
231 standin = lfutil.standin(lfile) |
23043
244dbb646ab7
largefiles: inline redundant inctx function in status
Mads Kiilerich <madski@unity3d.com>
parents:
22919
diff
changeset
|
232 if standin in ctx1: |
23090
24600c9d7f4e
largefiles: add examination of exec bit in "hg status --rev REV" case
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23089
diff
changeset
|
233 abslfile = self.wjoin(lfile) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
234 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
235 lfutil.readasstandin(ctx1[standin]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
236 != lfutil.hashfile(abslfile) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
237 ) or ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
238 checkexec |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
239 and (b'x' in ctx1.flags(standin)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
240 != bool(lfutil.getexecutable(abslfile)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
241 ): |
15168 | 242 modified.append(lfile) |
22523
8cd91f481ffd
largefiles: remove unnecessary clearing of status fields
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22518
diff
changeset
|
243 elif listclean: |
15168 | 244 clean.append(lfile) |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
245 else: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
246 added.append(lfile) |
15168 | 247 |
23089
197dc4580da2
largefiles: ignore removal status of files not managed in the target context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23044
diff
changeset
|
248 # at this point, 'removed' contains largefiles |
197dc4580da2
largefiles: ignore removal status of files not managed in the target context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23044
diff
changeset
|
249 # marked as 'R' in the working context. |
197dc4580da2
largefiles: ignore removal status of files not managed in the target context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23044
diff
changeset
|
250 # then, largefiles not managed also in the target |
197dc4580da2
largefiles: ignore removal status of files not managed in the target context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23044
diff
changeset
|
251 # context should be excluded from 'removed'. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
252 removed = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
253 lfile |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
254 for lfile in removed |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
255 if lfutil.standin(lfile) in ctx1 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
256 ] |
23089
197dc4580da2
largefiles: ignore removal status of files not managed in the target context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23044
diff
changeset
|
257 |
30191
328545c7d8a1
largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents:
29319
diff
changeset
|
258 # Standins no longer found in lfdirstate have been deleted |
22525
764127f58903
largefiles: simplify iteration over standins
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22524
diff
changeset
|
259 for standin in ctx1.walk(lfutil.getstandinmatcher(self)): |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
260 lfile = lfutil.splitstandin(standin) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
261 if not match(lfile): |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
262 continue |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
263 if lfile not in lfdirstate: |
30191
328545c7d8a1
largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents:
29319
diff
changeset
|
264 deleted.append(lfile) |
328545c7d8a1
largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents:
29319
diff
changeset
|
265 # Sync "largefile has been removed" back to the |
328545c7d8a1
largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents:
29319
diff
changeset
|
266 # standin. Removing a file as a side effect of |
328545c7d8a1
largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents:
29319
diff
changeset
|
267 # running status is gross, but the alternatives (if |
328545c7d8a1
largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents:
29319
diff
changeset
|
268 # any) are worse. |
30233
3afde791dce1
largefiles: handle that a found standin file doesn't exist when removing it
Mads Kiilerich <madski@unity3d.com>
parents:
30191
diff
changeset
|
269 self.wvfs.unlinkpath(standin, ignoremissing=True) |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15629
diff
changeset
|
270 |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
271 # Filter result lists |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
272 result = list(result) |
19056
ac41bb76c737
largefiles: wlock in status before lfdirstate.write()
Mads Kiilerich <madski@unity3d.com>
parents:
18969
diff
changeset
|
273 |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
274 # Largefiles are not really removed when they're |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
275 # still in the normal dirstate. Likewise, normal |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
276 # files are not really removed if they are still in |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
277 # lfdirstate. This happens in merges where files |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
278 # change type. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
279 removed = [f for f in removed if f not in self.dirstate] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
280 result[2] = [f for f in result[2] if f not in lfdirstate] |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15629
diff
changeset
|
281 |
42926
34ed651ba7e4
cleanup: fix leakage of dirstate._map to client code
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
282 lfiles = set(lfdirstate) |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
283 # Unknown files |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
284 result[4] = set(result[4]).difference(lfiles) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
285 # Ignored files |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
286 result[5] = set(result[5]).difference(lfiles) |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
287 # combine normal files and largefiles |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
288 normals = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
289 [fn for fn in filelist if not lfutil.isstandin(fn)] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
290 for filelist in result |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
291 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
292 lfstatus = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
293 modified, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
294 added, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
295 removed, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
296 deleted, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
297 [], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
298 [], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
299 clean, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
300 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
301 result = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
302 sorted(list1 + list2) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
303 for (list1, list2) in zip(normals, lfstatus) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
304 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
305 else: # not against working directory |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
306 result = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
307 [lfutil.splitstandin(f) or f for f in items] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
308 for items in result |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
309 ] |
15663
9036c7d106bf
largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents:
15629
diff
changeset
|
310 |
22515
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
311 if wlock: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
312 lfdirstate.write() |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
313 |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
314 finally: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
315 if wlock: |
b4e251b7e9a8
largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22514
diff
changeset
|
316 wlock.release() |
15168 | 317 |
23958
df463ca0adef
largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents:
23923
diff
changeset
|
318 self.lfstatus = True |
22914
c95db3208a33
status: update various other methods to return new class
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22911
diff
changeset
|
319 return scmutil.status(*result) |
15168 | 320 |
23184
3100d1cbce32
largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23147
diff
changeset
|
321 def commitctx(self, ctx, *args, **kwargs): |
3100d1cbce32
largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23147
diff
changeset
|
322 node = super(lfilesrepo, self).commitctx(ctx, *args, **kwargs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
323 |
23184
3100d1cbce32
largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23147
diff
changeset
|
324 class lfilesctx(ctx.__class__): |
3100d1cbce32
largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23147
diff
changeset
|
325 def markcommitted(self, node): |
3100d1cbce32
largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23147
diff
changeset
|
326 orig = super(lfilesctx, self).markcommitted |
3100d1cbce32
largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23147
diff
changeset
|
327 return lfutil.markcommitted(orig, self, node) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
328 |
23184
3100d1cbce32
largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23147
diff
changeset
|
329 ctx.__class__ = lfilesctx |
15168 | 330 return node |
331 | |
15254
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15253
diff
changeset
|
332 # Before commit, largefile standins have not had their |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15253
diff
changeset
|
333 # contents updated to reflect the hash of their largefile. |
dd03d3a9f888
largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents:
15253
diff
changeset
|
334 # Do that here. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
335 def commit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
336 self, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
337 text=b"", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
338 user=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
339 date=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
340 match=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
341 force=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
342 editor=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
343 extra=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
344 ): |
31410
86dfd31c0329
largefiles: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30233
diff
changeset
|
345 if extra is None: |
86dfd31c0329
largefiles: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30233
diff
changeset
|
346 extra = {} |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16141
diff
changeset
|
347 orig = super(lfilesrepo, self).commit |
15168 | 348 |
27842
002108b219e3
with: use context manager in largefiles commit
Bryan O'Sullivan <bryano@fb.com>
parents:
26587
diff
changeset
|
349 with self.wlock(): |
23186
6de61d0b773f
largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23185
diff
changeset
|
350 lfcommithook = self._lfcommithooks[-1] |
6de61d0b773f
largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23185
diff
changeset
|
351 match = lfcommithook(self, match) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
352 result = orig( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
353 text=text, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
354 user=user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
355 date=date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
356 match=match, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
357 force=force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
358 editor=editor, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
359 extra=extra, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
360 ) |
15794
0d91211dd12f
largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents:
15793
diff
changeset
|
361 return result |
15168 | 362 |
363 def push(self, remote, force=False, revs=None, newbranch=False): | |
19779
fb6e87d93948
largefiles: setup "largefiles" feature in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19570
diff
changeset
|
364 if remote.local(): |
fb6e87d93948
largefiles: setup "largefiles" feature in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19570
diff
changeset
|
365 missing = set(self.requirements) - remote.local().supported |
fb6e87d93948
largefiles: setup "largefiles" feature in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19570
diff
changeset
|
366 if missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
367 msg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
368 b"required features are not" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
369 b" supported in the destination:" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
370 b" %s" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
371 ) % (b', '.join(sorted(missing))) |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25149
diff
changeset
|
372 raise error.Abort(msg) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
373 return super(lfilesrepo, self).push( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
374 remote, force=force, revs=revs, newbranch=newbranch |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
375 ) |
15168 | 376 |
23185
9870173e0b48
largefiles: factor out procedures to update standins for pre-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23184
diff
changeset
|
377 # TODO: _subdirlfs should be moved into "lfutil.py", because |
9870173e0b48
largefiles: factor out procedures to update standins for pre-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23184
diff
changeset
|
378 # it is referred only from "lfutil.updatestandinsbymatch" |
18064
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
379 def _subdirlfs(self, files, lfiles): |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
380 ''' |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
381 Adjust matched file list |
23543
4dd8a6a1240d
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23394
diff
changeset
|
382 If we pass a directory to commit whose only committable files |
18064
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
383 are largefiles, the core commit code aborts before finding |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
384 the largefiles. |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
385 So we do the following: |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
386 For directories that only have largefiles as matches, |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18182
diff
changeset
|
387 we explicitly add the largefiles to the match list and remove |
18064
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
388 the directory. |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
389 In other cases, we leave the match list unmodified. |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
390 ''' |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
391 actualfiles = [] |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
392 dirs = [] |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
393 regulars = [] |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
394 |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
395 for f in files: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
396 if lfutil.isstandin(f + b'/'): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25149
diff
changeset
|
397 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
398 _(b'file "%s" is a largefile standin') % f, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
399 hint=b'commit the largefile itself instead', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
400 ) |
18064
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
401 # Scan directories |
28716
5c14af475f61
largefiles: replace invocation of os.path module by vfs in reposetup.py
liscju <piotr.listkiewicz@gmail.com>
parents:
27842
diff
changeset
|
402 if self.wvfs.isdir(f): |
18064
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
403 dirs.append(f) |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
404 else: |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
405 regulars.append(f) |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
406 |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
407 for f in dirs: |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
408 matcheddir = False |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
409 d = self.dirstate.normalize(f) + b'/' |
18064
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
410 # Check for matched normal files |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
411 for mf in regulars: |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
412 if self.dirstate.normalize(mf).startswith(d): |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
413 actualfiles.append(f) |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
414 matcheddir = True |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
415 break |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
416 if not matcheddir: |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
417 # If no normal match, manually append |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
418 # any matching largefiles |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
419 for lf in lfiles: |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
420 if self.dirstate.normalize(lf).startswith(d): |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
421 actualfiles.append(lf) |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
422 if not matcheddir: |
23923
ab6fd3205dad
largefiles: fix commit of a directory with no largefile changes (issue4330)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23660
diff
changeset
|
423 # There may still be normal files in the dir, so |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24163
diff
changeset
|
424 # add a directory to the list, which |
24007
240343e13c4d
largefiles: update _subdirlfs() comment
Matt Harbison <matt_harbison@yahoo.com>
parents:
23958
diff
changeset
|
425 # forces status/dirstate to walk all files and |
240343e13c4d
largefiles: update _subdirlfs() comment
Matt Harbison <matt_harbison@yahoo.com>
parents:
23958
diff
changeset
|
426 # call the match function on the matcher, even |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24163
diff
changeset
|
427 # on case sensitive filesystems. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
428 actualfiles.append(b'.') |
18064
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
429 matcheddir = True |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
430 # Nothing in dir, so readd it |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
431 # and let commit reject it |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
432 if not matcheddir: |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
433 actualfiles.append(f) |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
434 |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
435 # Always add normal files |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
436 actualfiles += regulars |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
437 return actualfiles |
7e2b9f6a2cd0
largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents:
17803
diff
changeset
|
438 |
16247
d87d9d8a8e03
largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents:
16141
diff
changeset
|
439 repo.__class__ = lfilesrepo |
15168 | 440 |
23186
6de61d0b773f
largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23185
diff
changeset
|
441 # stack of hooks being executed before committing. |
6de61d0b773f
largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23185
diff
changeset
|
442 # only last element ("_lfcommithooks[-1]") is used for each committing. |
6de61d0b773f
largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23185
diff
changeset
|
443 repo._lfcommithooks = [lfutil.updatestandinsbymatch] |
6de61d0b773f
largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23185
diff
changeset
|
444 |
23188
94ac64bcf6fe
largefiles: introduce "_lfstatuswriters" to customize status reporting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23186
diff
changeset
|
445 # Stack of status writer functions taking "*msg, **opts" arguments |
23543
4dd8a6a1240d
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23394
diff
changeset
|
446 # like "ui.status()". Only last element ("_lfstatuswriters[-1]") |
23188
94ac64bcf6fe
largefiles: introduce "_lfstatuswriters" to customize status reporting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23186
diff
changeset
|
447 # is used to write status out. |
94ac64bcf6fe
largefiles: introduce "_lfstatuswriters" to customize status reporting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23186
diff
changeset
|
448 repo._lfstatuswriters = [ui.status] |
94ac64bcf6fe
largefiles: introduce "_lfstatuswriters" to customize status reporting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23186
diff
changeset
|
449 |
28876
79b8f052ee51
localrepo: refactor prepushoutgoinghook to take a pushop
Mads Kiilerich <madski@unity3d.com>
parents:
28716
diff
changeset
|
450 def prepushoutgoinghook(pushop): |
28878
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28876
diff
changeset
|
451 """Push largefiles for pushop before pushing revisions.""" |
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28876
diff
changeset
|
452 lfrevs = pushop.lfrevs |
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28876
diff
changeset
|
453 if lfrevs is None: |
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28876
diff
changeset
|
454 lfrevs = pushop.outgoing.missing |
a75c9665ef06
largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents:
28876
diff
changeset
|
455 if lfrevs: |
21044
52a5eabf1f2f
largefiles: reuse "findcommonoutgoing()" result at "hg push"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
456 toupload = set() |
52a5eabf1f2f
largefiles: reuse "findcommonoutgoing()" result at "hg push"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
457 addfunc = lambda fn, lfhash: toupload.add(lfhash) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
458 lfutil.getlfilestoupload(pushop.repo, lfrevs, addfunc) |
28876
79b8f052ee51
localrepo: refactor prepushoutgoinghook to take a pushop
Mads Kiilerich <madski@unity3d.com>
parents:
28716
diff
changeset
|
459 lfcommands.uploadlfiles(ui, pushop.repo, pushop.remote, toupload) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
460 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
461 repo.prepushoutgoinghooks.add(b"largefiles", prepushoutgoinghook) |
21044
52a5eabf1f2f
largefiles: reuse "findcommonoutgoing()" result at "hg push"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21042
diff
changeset
|
462 |
15168 | 463 def checkrequireslfiles(ui, repo, **kwargs): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
464 if b'largefiles' not in repo.requirements and any( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
465 lfutil.shortname + b'/' in f[0] for f in repo.store.datafiles() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
466 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
467 repo.requirements.add(b'largefiles') |
15168 | 468 repo._writerequirements() |
469 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
470 ui.setconfig( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
471 b'hooks', b'changegroup.lfiles', checkrequireslfiles, b'largefiles' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42926
diff
changeset
|
472 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
473 ui.setconfig(b'hooks', b'commit.lfiles', checkrequireslfiles, b'largefiles') |