annotate hgext/largefiles/reposetup.py @ 48875:6000f5b25c9b

py2: remove simple from __future__ statements These were needed for Python 2 support. Now that our linter no longer mandates these, we can start deleting them. Differential Revision: https://phab.mercurial-scm.org/D12254
author Gregory Szorc <gregory.szorc@gmail.com>
date Thu, 03 Mar 2022 17:34:00 +0100
parents 497c2655c71e
children b38b53c5674e
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 '''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
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
11 import copy
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
12
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
13 from mercurial.i18n import _
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
14
29314
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
15 from mercurial import (
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
16 error,
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
17 extensions,
29314
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,
43585
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
21 util,
29314
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
48382
991e6f728b50 status: adapt largefile to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48168
diff changeset
24 from mercurial.dirstateutils import timestamp
991e6f728b50 status: adapt largefile to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48168
diff changeset
25
29314
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
26 from . import (
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
27 lfcommands,
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
28 lfutil,
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
29 )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
30
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
31
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
32 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
33 # 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
34 # by "proto.wirereposetup()" via "hg.wirepeersetupfuncs"
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
35 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
36 return
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
37
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16141
diff changeset
38 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
39 # 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
40 _largefilesenabled = True
d414c28db84d largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23958
diff changeset
41
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
42 lfstatus = False
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
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
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
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
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
52 def files(orig):
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
53 filenames = orig()
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
54 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
55
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
56 extensions.wrapfunction(ctx, 'files', files)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
57
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
58 def manifest(orig):
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
59 man1 = orig()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
60
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
61 class lfilesmanifest(man1.__class__):
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
62 def __contains__(self, filename):
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
63 orig = super(lfilesmanifest, self).__contains__
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
64 return orig(filename) or orig(
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
65 lfutil.standin(filename)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
66 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
67
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
68 man1.__class__ = lfilesmanifest
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
69 return man1
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
70
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
71 extensions.wrapfunction(ctx, 'manifest', manifest)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
72
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
73 def filectx(orig, path, fileid=None, filelog=None):
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
74 try:
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
75 if filelog is not None:
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
76 result = orig(path, fileid, filelog)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
77 else:
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
78 result = orig(path, fileid)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
79 except error.LookupError:
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
80 # Adding a null character will cause Mercurial to
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
81 # identify this as a binary file.
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
82 if filelog is not None:
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
83 result = orig(lfutil.standin(path), fileid, filelog)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
84 else:
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
85 result = orig(lfutil.standin(path), fileid)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
86 olddata = result.data
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
87 result.data = lambda: olddata() + b'\0'
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
88 return result
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
89
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
90 extensions.wrapfunction(ctx, 'filectx', filectx)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
91
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
92 return ctx
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
93
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
94 # 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
95 # appropriate list in the result. Also removes standin files
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15250
diff changeset
96 # from the listing. Revert to the original status if
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15250
diff changeset
97 # 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
98 # 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
99 # 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
100 @localrepo.unfilteredmethod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
101 def status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
102 self,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
103 node1=b'.',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
104 node2=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
105 match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
106 ignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
107 clean=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
108 unknown=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
109 listsubrepos=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
110 ):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
111 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
112 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
113 if not self.lfstatus:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
114 return orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
115 node1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
116 node2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
117 match,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
118 listignored,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
119 listclean,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
120 listunknown,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
121 listsubrepos,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
122 )
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
123
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
124 # 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
125 self.lfstatus = False
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
126 ctx1 = self[node1]
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
127 ctx2 = self[node2]
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
128 working = ctx2.rev() is None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
129 parentworking = working and ctx1 == self[b'.']
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
130
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
131 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
132 match = matchmod.always()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
133
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
134 try:
43585
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
135 # updating the dirstate is optional
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
136 # so we don't wait on the lock
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
137 wlock = self.wlock(False)
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
138 gotlock = True
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
139 except error.LockError:
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
140 wlock = util.nullcontextmanager()
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
141 gotlock = False
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
142 with wlock:
15653
93c77d5b9752 largefiles: optimize status when files are specified (issue3144)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15630
diff changeset
143
23146
5311de37b86f largefiles: shortcircuit status code also for non-matching patterns
Martin von Zweigbergk <martinvonz@google.com>
parents: 23139
diff changeset
144 # 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
145 # 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
146 # 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
147 # 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
148 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
149 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
150 for f in lfdirstate:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
151 if match(f):
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
152 break
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
153 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
154 return orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
155 node1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
156 node2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
157 match,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
158 listignored,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
159 listclean,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
160 listunknown,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
161 listsubrepos,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
162 )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
163
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
164 # 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
165 # of largefiles.
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
166 def tostandins(files):
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
167 if not working:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
168 return files
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
169 newfiles = []
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
170 dirstate = self.dirstate
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
171 for f in files:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
172 sf = lfutil.standin(f)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
173 if sf in dirstate:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
174 newfiles.append(sf)
35084
61888bd0b300 dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents: 34344
diff changeset
175 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
176 # 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
177 # standin, check both
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
178 newfiles.extend((f, sf))
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
179 else:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
180 newfiles.append(f)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
181 return newfiles
18149
2dcc3653b361 largefiles: unindent code
Mads Kiilerich <madski@unity3d.com>
parents: 18148
diff changeset
182
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
183 m = copy.copy(match)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
184 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
185
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
186 result = orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
187 node1, node2, m, ignored, clean, unknown, listsubrepos
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
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 if working:
15617
74e691b141c4 largefiles: optimize performance of status on largefiles repos (issue3136)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15385
diff changeset
190
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
191 def sfindirstate(f):
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
192 sf = lfutil.standin(f)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
193 dirstate = self.dirstate
35084
61888bd0b300 dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents: 34344
diff changeset
194 return sf in dirstate or dirstate.hasdir(sf)
18149
2dcc3653b361 largefiles: unindent code
Mads Kiilerich <madski@unity3d.com>
parents: 18148
diff changeset
195
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
196 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
197 # 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
198 # files from lfdirstate
48390
322525db4c98 status: use filesystem time boundary to invalidate racy mtime
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48382
diff changeset
199 unsure, s, mtime_boundary = lfdirstate.status(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
200 match,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
201 subrepos=[],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
202 ignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
203 clean=listclean,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
204 unknown=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
205 )
30191
328545c7d8a1 largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents: 29319
diff changeset
206 (modified, added, removed, deleted, clean) = (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
207 s.modified,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
208 s.added,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
209 s.removed,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
210 s.deleted,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
211 s.clean,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
212 )
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
213 if parentworking:
48382
991e6f728b50 status: adapt largefile to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48168
diff changeset
214 wctx = repo[None]
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
215 for lfile in unsure:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
216 standin = lfutil.standin(lfile)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
217 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
218 # from second parent
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
219 modified.append(lfile)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
220 elif lfutil.readasstandin(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
221 ctx1[standin]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
222 ) != 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
223 modified.append(lfile)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
224 else:
22523
8cd91f481ffd largefiles: remove unnecessary clearing of status fields
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22518
diff changeset
225 if listclean:
8cd91f481ffd largefiles: remove unnecessary clearing of status fields
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22518
diff changeset
226 clean.append(lfile)
48382
991e6f728b50 status: adapt largefile to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48168
diff changeset
227 s = wctx[lfile].lstat()
991e6f728b50 status: adapt largefile to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48168
diff changeset
228 mode = s.st_mode
991e6f728b50 status: adapt largefile to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48168
diff changeset
229 size = s.st_size
48396
c0d88407b7d4 largefile: use the proper "mtime boundary" logic during fixup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48390
diff changeset
230 mtime = timestamp.reliable_mtime_of(
c0d88407b7d4 largefile: use the proper "mtime boundary" logic during fixup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48390
diff changeset
231 s, mtime_boundary
c0d88407b7d4 largefile: use the proper "mtime boundary" logic during fixup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48390
diff changeset
232 )
c0d88407b7d4 largefile: use the proper "mtime boundary" logic during fixup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48390
diff changeset
233 if mtime is not None:
c0d88407b7d4 largefile: use the proper "mtime boundary" logic during fixup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48390
diff changeset
234 cache_data = (mode, size, mtime)
c0d88407b7d4 largefile: use the proper "mtime boundary" logic during fixup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48390
diff changeset
235 lfdirstate.set_clean(lfile, cache_data)
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
236 else:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
237 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
238 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
239 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
240
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
241 for lfile in tocheck:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
242 standin = lfutil.standin(lfile)
23043
244dbb646ab7 largefiles: inline redundant inctx function in status
Mads Kiilerich <madski@unity3d.com>
parents: 22919
diff changeset
243 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
244 abslfile = self.wjoin(lfile)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
245 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
246 lfutil.readasstandin(ctx1[standin])
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
247 != lfutil.hashfile(abslfile)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
248 ) or (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
249 checkexec
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
250 and (b'x' in ctx1.flags(standin))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
251 != bool(lfutil.getexecutable(abslfile))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
252 ):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
253 modified.append(lfile)
22523
8cd91f481ffd largefiles: remove unnecessary clearing of status fields
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22518
diff changeset
254 elif listclean:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
255 clean.append(lfile)
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
256 else:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
257 added.append(lfile)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
258
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
259 # 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
260 # 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
261 # 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
262 # context should be excluded from 'removed'.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
263 removed = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
264 lfile
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
265 for lfile in removed
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
266 if lfutil.standin(lfile) in ctx1
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
267 ]
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
268
30191
328545c7d8a1 largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents: 29319
diff changeset
269 # 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
270 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
271 lfile = lfutil.splitstandin(standin)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
272 if not match(lfile):
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
273 continue
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
274 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
275 deleted.append(lfile)
328545c7d8a1 largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents: 29319
diff changeset
276 # 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
277 # 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
278 # 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
279 # 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
280 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
281
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
282 # Filter result lists
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
283 result = list(result)
19056
ac41bb76c737 largefiles: wlock in status before lfdirstate.write()
Mads Kiilerich <madski@unity3d.com>
parents: 18969
diff changeset
284
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
285 # 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
286 # 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
287 # 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
288 # 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
289 # change type.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
290 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
291 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
292
42926
34ed651ba7e4 cleanup: fix leakage of dirstate._map to client code
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
293 lfiles = set(lfdirstate)
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
294 # Unknown files
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
295 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
296 # Ignored files
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
297 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
298 # combine normal files and largefiles
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
299 normals = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
300 [fn for fn in filelist if not lfutil.isstandin(fn)]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
301 for filelist in result
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
302 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
303 lfstatus = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
304 modified,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
305 added,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
306 removed,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
307 deleted,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
308 [],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
309 [],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
310 clean,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
311 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
312 result = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
313 sorted(list1 + list2)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
314 for (list1, list2) in zip(normals, lfstatus)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
315 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
316 else: # not against working directory
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
317 result = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
318 [lfutil.splitstandin(f) or f for f in items]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
319 for items in result
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
320 ]
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15629
diff changeset
321
43585
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
322 if gotlock:
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 47715
diff changeset
323 lfdirstate.write(self.currenttransaction())
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
324
23958
df463ca0adef largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23923
diff changeset
325 self.lfstatus = True
22914
c95db3208a33 status: update various other methods to return new class
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22911
diff changeset
326 return scmutil.status(*result)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
327
23184
3100d1cbce32 largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23147
diff changeset
328 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
329 node = super(lfilesrepo, self).commitctx(ctx, *args, **kwargs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
330
23184
3100d1cbce32 largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23147
diff changeset
331 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
332 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
333 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
334 return lfutil.markcommitted(orig, self, node)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
335
23184
3100d1cbce32 largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23147
diff changeset
336 ctx.__class__ = lfilesctx
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
337 return node
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
338
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15253
diff changeset
339 # 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
340 # 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
341 # Do that here.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
342 def commit(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
343 self,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
344 text=b"",
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
345 user=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
346 date=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
347 match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
348 force=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
349 editor=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
350 extra=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
351 ):
31410
86dfd31c0329 largefiles: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30233
diff changeset
352 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
353 extra = {}
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16141
diff changeset
354 orig = super(lfilesrepo, self).commit
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
355
27842
002108b219e3 with: use context manager in largefiles commit
Bryan O'Sullivan <bryano@fb.com>
parents: 26587
diff changeset
356 with self.wlock():
23186
6de61d0b773f largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23185
diff changeset
357 lfcommithook = self._lfcommithooks[-1]
6de61d0b773f largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23185
diff changeset
358 match = lfcommithook(self, match)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
359 result = orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
360 text=text,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
361 user=user,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
362 date=date,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
363 match=match,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
364 force=force,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
365 editor=editor,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
366 extra=extra,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
367 )
15794
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15793
diff changeset
368 return result
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
369
23185
9870173e0b48 largefiles: factor out procedures to update standins for pre-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23184
diff changeset
370 # 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
371 # 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
372 def _subdirlfs(self, files, lfiles):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45106
diff changeset
373 """
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
374 Adjust matched file list
23543
4dd8a6a1240d spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23394
diff changeset
375 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
376 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
377 the largefiles.
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
378 So we do the following:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
379 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
380 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
381 the directory.
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
382 In other cases, we leave the match list unmodified.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45106
diff changeset
383 """
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
384 actualfiles = []
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
385 dirs = []
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
386 regulars = []
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
387
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
388 for f in files:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
389 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
390 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
391 _(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
392 hint=b'commit the largefile itself instead',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
393 )
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
394 # 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
395 if self.wvfs.isdir(f):
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
396 dirs.append(f)
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
397 else:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
398 regulars.append(f)
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
399
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
400 for f in dirs:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
401 matcheddir = False
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
402 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
403 # Check for matched normal files
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
404 for mf in regulars:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
405 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
406 actualfiles.append(f)
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
407 matcheddir = True
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
408 break
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
409 if not matcheddir:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
410 # If no normal match, manually append
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
411 # any matching largefiles
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
412 for lf in lfiles:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
413 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
414 actualfiles.append(lf)
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
415 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
416 # 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
417 # add a directory to the list, which
24007
240343e13c4d largefiles: update _subdirlfs() comment
Matt Harbison <matt_harbison@yahoo.com>
parents: 23958
diff changeset
418 # forces status/dirstate to walk all files and
240343e13c4d largefiles: update _subdirlfs() comment
Matt Harbison <matt_harbison@yahoo.com>
parents: 23958
diff changeset
419 # 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
420 # on case sensitive filesystems.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
421 actualfiles.append(b'.')
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
422 matcheddir = True
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
423 # Nothing in dir, so readd it
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
424 # and let commit reject it
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
425 if not matcheddir:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
426 actualfiles.append(f)
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
427
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
428 # Always add normal files
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
429 actualfiles += regulars
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
430 return actualfiles
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
431
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16141
diff changeset
432 repo.__class__ = lfilesrepo
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
433
23186
6de61d0b773f largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23185
diff changeset
434 # 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
435 # 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
436 repo._lfcommithooks = [lfutil.updatestandinsbymatch]
6de61d0b773f largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23185
diff changeset
437
23188
94ac64bcf6fe largefiles: introduce "_lfstatuswriters" to customize status reporting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23186
diff changeset
438 # 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
439 # 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
440 # 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
441 repo._lfstatuswriters = [ui.status]
94ac64bcf6fe largefiles: introduce "_lfstatuswriters" to customize status reporting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23186
diff changeset
442
28876
79b8f052ee51 localrepo: refactor prepushoutgoinghook to take a pushop
Mads Kiilerich <madski@unity3d.com>
parents: 28716
diff changeset
443 def prepushoutgoinghook(pushop):
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28876
diff changeset
444 """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
445 lfrevs = pushop.lfrevs
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28876
diff changeset
446 if lfrevs is None:
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28876
diff changeset
447 lfrevs = pushop.outgoing.missing
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28876
diff changeset
448 if lfrevs:
21044
52a5eabf1f2f largefiles: reuse "findcommonoutgoing()" result at "hg push"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
449 toupload = set()
52a5eabf1f2f largefiles: reuse "findcommonoutgoing()" result at "hg push"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
450 addfunc = lambda fn, lfhash: toupload.add(lfhash)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
451 lfutil.getlfilestoupload(pushop.repo, lfrevs, addfunc)
28876
79b8f052ee51 localrepo: refactor prepushoutgoinghook to take a pushop
Mads Kiilerich <madski@unity3d.com>
parents: 28716
diff changeset
452 lfcommands.uploadlfiles(ui, pushop.repo, pushop.remote, toupload)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
453
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
454 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
455
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
456 def checkrequireslfiles(ui, repo, **kwargs):
48664
497c2655c71e largefiles: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48396
diff changeset
457 with repo.lock():
497c2655c71e largefiles: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48396
diff changeset
458 if b'largefiles' not in repo.requirements and any(
497c2655c71e largefiles: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48396
diff changeset
459 lfutil.shortname + b'/' in f[1] for f in repo.store.datafiles()
497c2655c71e largefiles: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48396
diff changeset
460 ):
497c2655c71e largefiles: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48396
diff changeset
461 repo.requirements.add(b'largefiles')
497c2655c71e largefiles: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48396
diff changeset
462 scmutil.writereporequirements(repo)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
463
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
464 ui.setconfig(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
465 b'hooks', b'changegroup.lfiles', checkrequireslfiles, b'largefiles'
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 ui.setconfig(b'hooks', b'commit.lfiles', checkrequireslfiles, b'largefiles')