annotate mercurial/context.py @ 43106:d783f945a701

py3: finish porting iteritems() to pycompat and remove source transformer This commit finishes porting .iteritems() to pycompat.iteritems() for the mercurial package. The translation of .iteritems() to .items() was the last conversion performed by the source transformer. With the porting to pycompat complete, we no longer have a need for the source transformer. So the source transformer has been removed. Good riddance! The code base is now compatible with Python 2 and Python 3. For the record, as the person who introduced the source transformer, it brings me joy to delete it. It accomplished its goal to facilitate a port to Python 3 without overly burdening people on some painful low-level differences between Python 2 and 3. It is unfortunate we still have to wallpaper over many differences with the pycompat shim. But it is what it is. Differential Revision: https://phab.mercurial-scm.org/D7015
author Gregory Szorc <gregory.szorc@gmail.com>
date Mon, 07 Oct 2019 00:04:04 -0400
parents c59eb1560c44
children 8ff1ecfadcd1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2563
482c524dd9ab Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1 # context.py - changeset and file context objects for mercurial
482c524dd9ab Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
2 #
4635
63b9d2deed48 Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4417
diff changeset
3 # Copyright 2006, 2007 Matt Mackall <mpm@selenic.com>
2563
482c524dd9ab Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
4 #
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 8209
diff changeset
5 # This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10262
diff changeset
6 # GNU General Public License version 2 or any later version.
2563
482c524dd9ab Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
7
27506
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
8 from __future__ import absolute_import
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
9
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
10 import errno
34685
6036e6e205ca context: add a fast-comparision for arbitraryfilectx and workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34681
diff changeset
11 import filecmp
27506
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
12 import os
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
13 import stat
26604
a3fcc8e3136b context: don't hex encode all unknown 20 char revision specs (issue4890)
Mads Kiilerich <madski@unity3d.com>
parents: 26587
diff changeset
14
27506
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
15 from .i18n import _
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
16 from .node import (
30371
1070df141718 dirstate: change added/modified placeholder hash length to 20 bytes
Durham Goode <durham@fb.com>
parents: 30370
diff changeset
17 addednodeid,
27506
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
18 hex,
30371
1070df141718 dirstate: change added/modified placeholder hash length to 20 bytes
Durham Goode <durham@fb.com>
parents: 30370
diff changeset
19 modifiednodeid,
27506
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
20 nullid,
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
21 nullrev,
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
22 short,
37448
d7114f883505 node: rename wdirnodes to clarify they are for manifest/filelogs
Yuya Nishihara <yuya@tcha.org>
parents: 37447
diff changeset
23 wdirfilenodeids,
41972
21cc92fea2aa context: use wdirhex constant instead of calculating it
Martin von Zweigbergk <martinvonz@google.com>
parents: 41954
diff changeset
24 wdirhex,
27506
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
25 )
43089
c59eb1560c44 py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43085
diff changeset
26 from .pycompat import (
c59eb1560c44 py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43085
diff changeset
27 getattr,
c59eb1560c44 py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43085
diff changeset
28 open,
c59eb1560c44 py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43085
diff changeset
29 )
27506
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
30 from . import (
42729
3cffc7bbec26 copies: extract an explicit `computechangesetcopie` method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42606
diff changeset
31 copies,
36923
7affcabf561e dagop: move annotateline and _annotatepair from context.py
Yuya Nishihara <yuya@tcha.org>
parents: 36789
diff changeset
32 dagop,
27506
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
33 encoding,
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
34 error,
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
35 fileset,
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
36 match as matchmod,
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
37 obsolete as obsmod,
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
38 patch,
33501
7008f6819002 context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents: 33499
diff changeset
39 pathutil,
27506
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
40 phases,
31352
ff2f90503d64 context: work around `long` not existing on Python 3
Augie Fackler <augie@google.com>
parents: 31318
diff changeset
41 pycompat,
27506
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
42 repoview,
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
43 scmutil,
33353
160efb559f67 sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33283
diff changeset
44 sparse,
27506
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
45 subrepo,
36047
55e8efa2451a subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents: 35930
diff changeset
46 subrepoutil,
27506
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
47 util,
e6d3dad71e44 context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27234
diff changeset
48 )
37087
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37069
diff changeset
49 from .utils import (
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37069
diff changeset
50 dateutil,
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37069
diff changeset
51 stringutil,
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37069
diff changeset
52 )
3122
da85145d4571 filectx: add rename traversal for parents()
Matt Mackall <mpm@selenic.com>
parents: 2859
diff changeset
53
8207
dd8d5be57d65 util: take propertycache from context.py
Matt Mackall <mpm@selenic.com>
parents: 8157
diff changeset
54 propertycache = util.propertycache
7368
595ba2537d4f context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7367
diff changeset
55
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
56
19537
6e3e8575276d basectx: add an empty class that will be used as a parent of all contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19314
diff changeset
57 class basectx(object):
6e3e8575276d basectx: add an empty class that will be used as a parent of all contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19314
diff changeset
58 """A basectx object represents the common logic for its children:
6e3e8575276d basectx: add an empty class that will be used as a parent of all contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19314
diff changeset
59 changectx: read-only context that is already present in the repo,
6e3e8575276d basectx: add an empty class that will be used as a parent of all contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19314
diff changeset
60 workingctx: a context that represents the working directory and can
6e3e8575276d basectx: add an empty class that will be used as a parent of all contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19314
diff changeset
61 be committed,
6e3e8575276d basectx: add an empty class that will be used as a parent of all contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19314
diff changeset
62 memctx: a context that represents changes in-memory and can also
6e3e8575276d basectx: add an empty class that will be used as a parent of all contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19314
diff changeset
63 be committed."""
6e3e8575276d basectx: add an empty class that will be used as a parent of all contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19314
diff changeset
64
37177
fbe34945220d context: set repo property in basectx
Martin von Zweigbergk <martinvonz@google.com>
parents: 37176
diff changeset
65 def __init__(self, repo):
fbe34945220d context: set repo property in basectx
Martin von Zweigbergk <martinvonz@google.com>
parents: 37176
diff changeset
66 self._repo = repo
fbe34945220d context: set repo property in basectx
Martin von Zweigbergk <martinvonz@google.com>
parents: 37176
diff changeset
67
31353
c99371e38e5e context: implement both __bytes__ and __str__ for Python 3
Augie Fackler <augie@google.com>
parents: 31352
diff changeset
68 def __bytes__(self):
19540
7b864da00e21 basectx: move __str__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19539
diff changeset
69 return short(self.node())
7b864da00e21 basectx: move __str__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19539
diff changeset
70
33038
ce96efec8112 py3: add utility to forward __str__() to __bytes__()
Yuya Nishihara <yuya@tcha.org>
parents: 33035
diff changeset
71 __str__ = encoding.strmethod(__bytes__)
ce96efec8112 py3: add utility to forward __str__() to __bytes__()
Yuya Nishihara <yuya@tcha.org>
parents: 33035
diff changeset
72
19546
a45cf68dd9a2 basectx: move __repr__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19545
diff changeset
73 def __repr__(self):
32636
e7eb7494e98d py3: make sure we return strings from __str__ and __repr__
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32633
diff changeset
74 return r"<%s %s>" % (type(self).__name__, str(self))
19546
a45cf68dd9a2 basectx: move __repr__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19545
diff changeset
75
19547
0537c0cfd87c basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19546
diff changeset
76 def __eq__(self, other):
0537c0cfd87c basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19546
diff changeset
77 try:
0537c0cfd87c basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19546
diff changeset
78 return type(self) == type(other) and self._rev == other._rev
0537c0cfd87c basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19546
diff changeset
79 except AttributeError:
0537c0cfd87c basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19546
diff changeset
80 return False
0537c0cfd87c basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19546
diff changeset
81
19548
730fdcaa791d basectx: move __ne__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19547
diff changeset
82 def __ne__(self, other):
730fdcaa791d basectx: move __ne__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19547
diff changeset
83 return not (self == other)
730fdcaa791d basectx: move __ne__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19547
diff changeset
84
19550
0c8ad779eb36 basectx: move __contains__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19549
diff changeset
85 def __contains__(self, key):
0c8ad779eb36 basectx: move __contains__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19549
diff changeset
86 return key in self._manifest
0c8ad779eb36 basectx: move __contains__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19549
diff changeset
87
19551
e07c69145724 basectx: move __getitem__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19550
diff changeset
88 def __getitem__(self, key):
e07c69145724 basectx: move __getitem__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19550
diff changeset
89 return self.filectx(key)
e07c69145724 basectx: move __getitem__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19550
diff changeset
90
19552
6b76070c4b54 basectx: move __iter__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19551
diff changeset
91 def __iter__(self):
24227
8ec2df32bd39 context: don't sort manifest entries
Augie Fackler <augie@google.com>
parents: 24213
diff changeset
92 return iter(self._manifest)
19552
6b76070c4b54 basectx: move __iter__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19551
diff changeset
93
31271
bd884ef2ee46 context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents: 31270
diff changeset
94 def _buildstatusmanifest(self, status):
bd884ef2ee46 context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents: 31270
diff changeset
95 """Builds a manifest that includes the given status results, if this is
bd884ef2ee46 context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents: 31270
diff changeset
96 a working copy context. For non-working copy contexts, it just returns
bd884ef2ee46 context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents: 31270
diff changeset
97 the normal manifest."""
bd884ef2ee46 context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents: 31270
diff changeset
98 return self.manifest()
21880
e6754f5e4cf7 context: generate filtered manifest efficiently for exact matchers
Siddharth Agarwal <sid0@fb.com>
parents: 21845
diff changeset
99
23237
98f41a2f8fba context.status: remove unused arguments from _matchstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 23236
diff changeset
100 def _matchstatus(self, other, match):
33954
c714e82b9ac2 context: always pass a matcher into _matchstatus() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33919
diff changeset
101 """This internal method provides a way for child objects to override the
21481
2f1567ef70ba basectx: add _matchstatus method for factoring out last of parentworking logic
Sean Farley <sean.michael.farley@gmail.com>
parents: 21480
diff changeset
102 match operator.
2f1567ef70ba basectx: add _matchstatus method for factoring out last of parentworking logic
Sean Farley <sean.michael.farley@gmail.com>
parents: 21480
diff changeset
103 """
33954
c714e82b9ac2 context: always pass a matcher into _matchstatus() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33919
diff changeset
104 return match
21481
2f1567ef70ba basectx: add _matchstatus method for factoring out last of parentworking logic
Sean Farley <sean.michael.farley@gmail.com>
parents: 21480
diff changeset
105
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
106 def _buildstatus(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
107 self, other, s, match, listignored, listclean, listunknown
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
108 ):
21471
90aff492dc4a context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21468
diff changeset
109 """build a status with respect to another context"""
23257
37c57a7cf160 context.status: explain "caching reasons" more fully
Martin von Zweigbergk <martinvonz@google.com>
parents: 23242
diff changeset
110 # Load earliest manifest first for caching reasons. More specifically,
37c57a7cf160 context.status: explain "caching reasons" more fully
Martin von Zweigbergk <martinvonz@google.com>
parents: 23242
diff changeset
111 # if you have revisions 1000 and 1001, 1001 is probably stored as a
37c57a7cf160 context.status: explain "caching reasons" more fully
Martin von Zweigbergk <martinvonz@google.com>
parents: 23242
diff changeset
112 # delta against 1000. Thus, if you read 1000 first, we'll reconstruct
37c57a7cf160 context.status: explain "caching reasons" more fully
Martin von Zweigbergk <martinvonz@google.com>
parents: 23242
diff changeset
113 # 1000 and cache it so that when you read 1001, we just need to apply a
37c57a7cf160 context.status: explain "caching reasons" more fully
Martin von Zweigbergk <martinvonz@google.com>
parents: 23242
diff changeset
114 # delta to what's in the cache. So that's one full reconstruction + one
37c57a7cf160 context.status: explain "caching reasons" more fully
Martin von Zweigbergk <martinvonz@google.com>
parents: 23242
diff changeset
115 # delta application.
31270
aac054e5389b context: remove assumptions about manifest creation during _buildstatus
Durham Goode <durham@fb.com>
parents: 31269
diff changeset
116 mf2 = None
23238
39eb9f78f968 context.status: move manifest caching trick to _buildstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 23237
diff changeset
117 if self.rev() is not None and self.rev() < other.rev():
31271
bd884ef2ee46 context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents: 31270
diff changeset
118 mf2 = self._buildstatusmanifest(s)
bd884ef2ee46 context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents: 31270
diff changeset
119 mf1 = other._buildstatusmanifest(s)
31270
aac054e5389b context: remove assumptions about manifest creation during _buildstatus
Durham Goode <durham@fb.com>
parents: 31269
diff changeset
120 if mf2 is None:
31271
bd884ef2ee46 context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents: 31270
diff changeset
121 mf2 = self._buildstatusmanifest(s)
21471
90aff492dc4a context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21468
diff changeset
122
23755
d43948a910a5 context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents: 23731
diff changeset
123 modified, added = [], []
d43948a910a5 context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents: 23731
diff changeset
124 removed = []
23757
b5346480a490 context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents: 23755
diff changeset
125 clean = []
23304
dd3f857598a0 context.status: pass status tuple into _buildstatus
Martin von Zweigbergk <martinvonz@google.com>
parents: 23303
diff changeset
126 deleted, unknown, ignored = s.deleted, s.unknown, s.ignored
23085
e9165c18f8df status: make 'hg status --rev' faster when there are deleted files
Martin von Zweigbergk <martinvonz@google.com>
parents: 23080
diff changeset
127 deletedset = set(deleted)
31271
bd884ef2ee46 context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents: 31270
diff changeset
128 d = mf1.diff(mf2, match=match, clean=listclean)
43106
d783f945a701 py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43089
diff changeset
129 for fn, value in pycompat.iteritems(d):
23731
ccbaa2ed11a4 status: don't list files as both clean and deleted
Martin von Zweigbergk <martinvonz@google.com>
parents: 23730
diff changeset
130 if fn in deletedset:
ccbaa2ed11a4 status: don't list files as both clean and deleted
Martin von Zweigbergk <martinvonz@google.com>
parents: 23730
diff changeset
131 continue
23757
b5346480a490 context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents: 23755
diff changeset
132 if value is None:
b5346480a490 context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents: 23755
diff changeset
133 clean.append(fn)
b5346480a490 context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents: 23755
diff changeset
134 continue
b5346480a490 context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents: 23755
diff changeset
135 (node1, flag1), (node2, flag2) = value
23755
d43948a910a5 context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents: 23731
diff changeset
136 if node1 is None:
d43948a910a5 context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents: 23731
diff changeset
137 added.append(fn)
d43948a910a5 context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents: 23731
diff changeset
138 elif node2 is None:
d43948a910a5 context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents: 23731
diff changeset
139 removed.append(fn)
27749
215b47449e47 context: check for differing flags a little earlier
Martin von Zweigbergk <martinvonz@google.com>
parents: 27748
diff changeset
140 elif flag1 != flag2:
215b47449e47 context: check for differing flags a little earlier
Martin von Zweigbergk <martinvonz@google.com>
parents: 27748
diff changeset
141 modified.append(fn)
37448
d7114f883505 node: rename wdirnodes to clarify they are for manifest/filelogs
Yuya Nishihara <yuya@tcha.org>
parents: 37447
diff changeset
142 elif node2 not in wdirfilenodeids:
27748
81b391a45264 context: clarify why we don't compare file contents when nodeid differs
Martin von Zweigbergk <martinvonz@google.com>
parents: 27747
diff changeset
143 # When comparing files between two commits, we save time by
81b391a45264 context: clarify why we don't compare file contents when nodeid differs
Martin von Zweigbergk <martinvonz@google.com>
parents: 27747
diff changeset
144 # not comparing the file contents when the nodeids differ.
81b391a45264 context: clarify why we don't compare file contents when nodeid differs
Martin von Zweigbergk <martinvonz@google.com>
parents: 27747
diff changeset
145 # Note that this means we incorrectly report a reverted change
81b391a45264 context: clarify why we don't compare file contents when nodeid differs
Martin von Zweigbergk <martinvonz@google.com>
parents: 27747
diff changeset
146 # to a file as a modification.
27747
54522bbe1597 status: back out changeset 89f49813526c
Martin von Zweigbergk <martinvonz@google.com>
parents: 27720
diff changeset
147 modified.append(fn)
23755
d43948a910a5 context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents: 23731
diff changeset
148 elif self[fn].cmp(other[fn]):
d43948a910a5 context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents: 23731
diff changeset
149 modified.append(fn)
23731
ccbaa2ed11a4 status: don't list files as both clean and deleted
Martin von Zweigbergk <martinvonz@google.com>
parents: 23730
diff changeset
150 else:
23757
b5346480a490 context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents: 23755
diff changeset
151 clean.append(fn)
23755
d43948a910a5 context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents: 23731
diff changeset
152
21971
412ac613fd89 status: explicitly exclude removed file from unknown and ignored
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21938
diff changeset
153 if removed:
412ac613fd89 status: explicitly exclude removed file from unknown and ignored
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21938
diff changeset
154 # need to filter files if they are already reported as removed
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
155 unknown = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
156 fn
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
157 for fn in unknown
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
158 if fn not in mf1 and (not match or match(fn))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
159 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
160 ignored = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
161 fn
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
162 for fn in ignored
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
163 if fn not in mf1 and (not match or match(fn))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
164 ]
23730
4b56219a5ac2 status: don't list files as both removed and deleted
Martin von Zweigbergk <martinvonz@google.com>
parents: 23712
diff changeset
165 # if they're deleted, don't report them as removed
4b56219a5ac2 status: don't list files as both removed and deleted
Martin von Zweigbergk <martinvonz@google.com>
parents: 23712
diff changeset
166 removed = [fn for fn in removed if fn not in deletedset]
21471
90aff492dc4a context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21468
diff changeset
167
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
168 return scmutil.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
169 modified, added, removed, deleted, unknown, ignored, clean
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
170 )
21471
90aff492dc4a context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21468
diff changeset
171
19549
78155484ae34 basectx: move substate from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19548
diff changeset
172 @propertycache
78155484ae34 basectx: move substate from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19548
diff changeset
173 def substate(self):
36047
55e8efa2451a subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents: 35930
diff changeset
174 return subrepoutil.state(self, self._repo.ui)
19549
78155484ae34 basectx: move substate from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19548
diff changeset
175
21586
8a2637cf1130 basectx: add subrev method to return the rev of a subrepo given a subpath
Sean Farley <sean.michael.farley@gmail.com>
parents: 21482
diff changeset
176 def subrev(self, subpath):
8a2637cf1130 basectx: add subrev method to return the rev of a subrepo given a subpath
Sean Farley <sean.michael.farley@gmail.com>
parents: 21482
diff changeset
177 return self.substate[subpath][1]
8a2637cf1130 basectx: add subrev method to return the rev of a subrepo given a subpath
Sean Farley <sean.michael.farley@gmail.com>
parents: 21482
diff changeset
178
19541
421d49f2f8e2 basectx: move rev from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19540
diff changeset
179 def rev(self):
421d49f2f8e2 basectx: move rev from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19540
diff changeset
180 return self._rev
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
181
19542
bd95621a2d56 basectx: move node from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19541
diff changeset
182 def node(self):
bd95621a2d56 basectx: move node from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19541
diff changeset
183 return self._node
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
184
19543
18f4951222f4 basectx: move hex from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19542
diff changeset
185 def hex(self):
19544
74924fa3236d basectx: change _node to node() in hex
Sean Farley <sean.michael.farley@gmail.com>
parents: 19543
diff changeset
186 return hex(self.node())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
187
19553
64a99d972b9e basectx: move manifest from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19552
diff changeset
188 def manifest(self):
64a99d972b9e basectx: move manifest from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19552
diff changeset
189 return self._manifest
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
190
30354
362f6f651b2e context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents: 30350
diff changeset
191 def manifestctx(self):
362f6f651b2e context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents: 30350
diff changeset
192 return self._manifestctx
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
193
24300
a07314472a80 context: add a repo accessor
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
194 def repo(self):
a07314472a80 context: add a repo accessor
Matt Harbison <matt_harbison@yahoo.com>
parents: 24227
diff changeset
195 return self._repo
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
196
19554
98f8875f4baa basectx: move phasestr from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19553
diff changeset
197 def phasestr(self):
98f8875f4baa basectx: move phasestr from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19553
diff changeset
198 return phases.phasenames[self.phase()]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
199
19555
613b70fedc4e basectx: move mutable from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19554
diff changeset
200 def mutable(self):
613b70fedc4e basectx: move mutable from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19554
diff changeset
201 return self.phase() > phases.public
19541
421d49f2f8e2 basectx: move rev from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19540
diff changeset
202
38613
760cc5dc01e8 fileset: restrict getfileset() to not return a computed set (API)
Yuya Nishihara <yuya@tcha.org>
parents: 38601
diff changeset
203 def matchfileset(self, expr, badfn=None):
760cc5dc01e8 fileset: restrict getfileset() to not return a computed set (API)
Yuya Nishihara <yuya@tcha.org>
parents: 38601
diff changeset
204 return fileset.match(self, expr, badfn=badfn)
20400
f0137d994c83 context: add a getfileset() method so fewer things need fileset directly
Augie Fackler <raf@durin42.com>
parents: 20292
diff changeset
205
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
206 def obsolete(self):
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
207 """True if the changeset is obsolete"""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
208 return self.rev() in obsmod.getrevs(self._repo, b'obsolete')
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
209
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
210 def extinct(self):
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
211 """True if the changeset is extinct"""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
212 return self.rev() in obsmod.getrevs(self._repo, b'extinct')
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
213
33753
f163edb45c47 context: rename unstable into orphan
Boris Feld <boris.feld@octobus.net>
parents: 33752
diff changeset
214 def orphan(self):
39319
f6f52841e1ff context: use new names for unstable changesets in docstrings
Anton Shestakov <av6@dwimlabs.net>
parents: 39228
diff changeset
215 """True if the changeset is not obsolete, but its ancestor is"""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
216 return self.rev() in obsmod.getrevs(self._repo, b'orphan')
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
217
33755
8413cbeae275 context: rename bumped into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 33754
diff changeset
218 def phasedivergent(self):
39319
f6f52841e1ff context: use new names for unstable changesets in docstrings
Anton Shestakov <av6@dwimlabs.net>
parents: 39228
diff changeset
219 """True if the changeset tries to be a successor of a public changeset
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
220
39319
f6f52841e1ff context: use new names for unstable changesets in docstrings
Anton Shestakov <av6@dwimlabs.net>
parents: 39228
diff changeset
221 Only non-public and non-obsolete changesets may be phase-divergent.
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
222 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
223 return self.rev() in obsmod.getrevs(self._repo, b'phasedivergent')
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
224
33754
8b2d7684407b context: rename divergent into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 33753
diff changeset
225 def contentdivergent(self):
39319
f6f52841e1ff context: use new names for unstable changesets in docstrings
Anton Shestakov <av6@dwimlabs.net>
parents: 39228
diff changeset
226 """Is a successor of a changeset with multiple possible successor sets
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
227
39319
f6f52841e1ff context: use new names for unstable changesets in docstrings
Anton Shestakov <av6@dwimlabs.net>
parents: 39228
diff changeset
228 Only non-public and non-obsolete changesets may be content-divergent.
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
229 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
230 return self.rev() in obsmod.getrevs(self._repo, b'contentdivergent')
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
231
33756
52c5ff856b49 context: rename troubled into isunstable
Boris Feld <boris.feld@octobus.net>
parents: 33755
diff changeset
232 def isunstable(self):
39319
f6f52841e1ff context: use new names for unstable changesets in docstrings
Anton Shestakov <av6@dwimlabs.net>
parents: 39228
diff changeset
233 """True if the changeset is either orphan, phase-divergent or
f6f52841e1ff context: use new names for unstable changesets in docstrings
Anton Shestakov <av6@dwimlabs.net>
parents: 39228
diff changeset
234 content-divergent"""
33755
8413cbeae275 context: rename bumped into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 33754
diff changeset
235 return self.orphan() or self.phasedivergent() or self.contentdivergent()
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
236
33752
ab0c55c2ad9a context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33715
diff changeset
237 def instabilities(self):
ab0c55c2ad9a context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33715
diff changeset
238 """return the list of instabilities affecting this changeset.
ab0c55c2ad9a context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33715
diff changeset
239
ab0c55c2ad9a context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33715
diff changeset
240 Instabilities are returned as strings. possible values are:
33695
03039ff3082b evolution: rename unstable to orphan
Boris Feld <boris.feld@octobus.net>
parents: 33501
diff changeset
241 - orphan,
33715
9c27a2891b75 evolution: rename bumped to phase-divergent
Boris Feld <boris.feld@octobus.net>
parents: 33714
diff changeset
242 - phase-divergent,
33714
2194a8723138 evolution: rename divergent to content-divergent
Boris Feld <boris.feld@octobus.net>
parents: 33695
diff changeset
243 - content-divergent.
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
244 """
33752
ab0c55c2ad9a context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33715
diff changeset
245 instabilities = []
33753
f163edb45c47 context: rename unstable into orphan
Boris Feld <boris.feld@octobus.net>
parents: 33752
diff changeset
246 if self.orphan():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
247 instabilities.append(b'orphan')
33755
8413cbeae275 context: rename bumped into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents: 33754
diff changeset
248 if self.phasedivergent():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
249 instabilities.append(b'phase-divergent')
33754
8b2d7684407b context: rename divergent into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents: 33753
diff changeset
250 if self.contentdivergent():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
251 instabilities.append(b'content-divergent')
33752
ab0c55c2ad9a context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33715
diff changeset
252 return instabilities
19734
e61c6138fa33 context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19733
diff changeset
253
19556
732ee7fff35a basectx: move parents from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19555
diff changeset
254 def parents(self):
732ee7fff35a basectx: move parents from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19555
diff changeset
255 """return contexts for each parent changeset"""
732ee7fff35a basectx: move parents from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19555
diff changeset
256 return self._parents
732ee7fff35a basectx: move parents from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19555
diff changeset
257
19557
9f57ebf0cce8 basectx: move p1 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19556
diff changeset
258 def p1(self):
9f57ebf0cce8 basectx: move p1 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19556
diff changeset
259 return self._parents[0]
9f57ebf0cce8 basectx: move p1 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19556
diff changeset
260
19558
d0448e9d4554 basectx: move p2 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19557
diff changeset
261 def p2(self):
27064
a29db426c5ba context: avoid extra parents lookups
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27063
diff changeset
262 parents = self._parents
a29db426c5ba context: avoid extra parents lookups
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27063
diff changeset
263 if len(parents) == 2:
a29db426c5ba context: avoid extra parents lookups
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27063
diff changeset
264 return parents[1]
39958
e1e3d1b498d3 context: reduce dependence of changectx constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 39912
diff changeset
265 return self._repo[nullrev]
19558
d0448e9d4554 basectx: move p2 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19557
diff changeset
266
19559
80ad9fe22e18 basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19558
diff changeset
267 def _fileinfo(self, path):
32197
2cfdf5241096 py3: use raw strings while accessing class.__dict__
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32069
diff changeset
268 if r'_manifest' in self.__dict__:
19559
80ad9fe22e18 basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19558
diff changeset
269 try:
80ad9fe22e18 basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19558
diff changeset
270 return self._manifest[path], self._manifest.flags(path)
80ad9fe22e18 basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19558
diff changeset
271 except KeyError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
272 raise error.ManifestLookupError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
273 self._node, path, _(b'not found in manifest')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
274 )
32197
2cfdf5241096 py3: use raw strings while accessing class.__dict__
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32069
diff changeset
275 if r'_manifestdelta' in self.__dict__ or path in self.files():
19559
80ad9fe22e18 basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19558
diff changeset
276 if path in self._manifestdelta:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
277 return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
278 self._manifestdelta[path],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
279 self._manifestdelta.flags(path),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
280 )
30350
608ba935e041 manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents: 30289
diff changeset
281 mfl = self._repo.manifestlog
608ba935e041 manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents: 30289
diff changeset
282 try:
608ba935e041 manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents: 30289
diff changeset
283 node, flag = mfl[self._changeset.manifest].find(path)
608ba935e041 manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents: 30289
diff changeset
284 except KeyError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
285 raise error.ManifestLookupError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
286 self._node, path, _(b'not found in manifest')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
287 )
19559
80ad9fe22e18 basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19558
diff changeset
288
80ad9fe22e18 basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19558
diff changeset
289 return node, flag
80ad9fe22e18 basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19558
diff changeset
290
19560
f256e1108053 basectx: move filenode from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19559
diff changeset
291 def filenode(self, path):
f256e1108053 basectx: move filenode from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19559
diff changeset
292 return self._fileinfo(path)[0]
f256e1108053 basectx: move filenode from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19559
diff changeset
293
19561
7806e63598b0 basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19560
diff changeset
294 def flags(self, path):
7806e63598b0 basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19560
diff changeset
295 try:
7806e63598b0 basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19560
diff changeset
296 return self._fileinfo(path)[1]
7806e63598b0 basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19560
diff changeset
297 except error.LookupError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
298 return b''
19561
7806e63598b0 basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19560
diff changeset
299
42318
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
300 @propertycache
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
301 def _copies(self):
42729
3cffc7bbec26 copies: extract an explicit `computechangesetcopie` method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42606
diff changeset
302 return copies.computechangesetcopies(self)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
303
42318
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
304 def p1copies(self):
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
305 return self._copies[0]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
306
42318
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
307 def p2copies(self):
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
308 return self._copies[1]
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
309
29021
92d37fb3f1aa verify: don't init subrepo when missing one is referenced (issue5128) (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 28488
diff changeset
310 def sub(self, path, allowcreate=True):
25600
70ac1868b707 subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 25590
diff changeset
311 '''return a subrepo for the stored revision of path, never wdir()'''
29021
92d37fb3f1aa verify: don't init subrepo when missing one is referenced (issue5128) (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 28488
diff changeset
312 return subrepo.subrepo(self, path, allowcreate=allowcreate)
19562
389d7767630d basectx: move sub from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19561
diff changeset
313
25417
95c271356a66 context: introduce the nullsub() method
Matt Harbison <matt_harbison@yahoo.com>
parents: 25303
diff changeset
314 def nullsub(self, path, pctx):
95c271356a66 context: introduce the nullsub() method
Matt Harbison <matt_harbison@yahoo.com>
parents: 25303
diff changeset
315 return subrepo.nullsubrepo(self, path, pctx)
95c271356a66 context: introduce the nullsub() method
Matt Harbison <matt_harbison@yahoo.com>
parents: 25303
diff changeset
316
25600
70ac1868b707 subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 25590
diff changeset
317 def workingsub(self, path):
70ac1868b707 subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 25590
diff changeset
318 '''return a subrepo for the stored revision, or wdir if this is a wdir
70ac1868b707 subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 25590
diff changeset
319 context.
70ac1868b707 subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 25590
diff changeset
320 '''
70ac1868b707 subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 25590
diff changeset
321 return subrepo.subrepo(self, path, allowwdir=True)
70ac1868b707 subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 25590
diff changeset
322
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
323 def match(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
324 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
325 pats=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
326 include=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
327 exclude=None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
328 default=b'glob',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
329 listsubrepos=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
330 badfn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
331 ):
19563
87503cd824fa basectx: move match from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19562
diff changeset
332 r = self._repo
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
333 return matchmod.match(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
334 r.root,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
335 r.getcwd(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
336 pats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
337 include,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
338 exclude,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
339 default,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
340 auditor=r.nofsauditor,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
341 ctx=self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
342 listsubrepos=listsubrepos,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
343 badfn=badfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
344 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
345
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
346 def diff(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
347 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
348 ctx2=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
349 match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
350 changes=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
351 opts=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
352 losedatafn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
353 pathfn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
354 copy=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
355 copysourcematch=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
356 hunksfilterfn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
357 ):
19564
f0ed47b73d37 basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19563
diff changeset
358 """Returns a diff generator for the given contexts and matcher"""
f0ed47b73d37 basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19563
diff changeset
359 if ctx2 is None:
f0ed47b73d37 basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19563
diff changeset
360 ctx2 = self.p1()
19568
f58235d85d6b basectx: remove unnecessary check of instance
Sean Farley <sean.michael.farley@gmail.com>
parents: 19567
diff changeset
361 if ctx2 is not None:
19564
f0ed47b73d37 basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19563
diff changeset
362 ctx2 = self._repo[ctx2]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
363 return patch.diff(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
364 self._repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
365 ctx2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
366 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
367 match=match,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
368 changes=changes,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
369 opts=opts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
370 losedatafn=losedatafn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
371 pathfn=pathfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
372 copy=copy,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
373 copysourcematch=copysourcematch,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
374 hunksfilterfn=hunksfilterfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
375 )
19564
f0ed47b73d37 basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19563
diff changeset
376
24323
4c7c6beade1a manifest: have context's dirs() call its manifest's dirs()
Drew Gottlieb <drgott@google.com>
parents: 24306
diff changeset
377 def dirs(self):
4c7c6beade1a manifest: have context's dirs() call its manifest's dirs()
Drew Gottlieb <drgott@google.com>
parents: 24306
diff changeset
378 return self._manifest.dirs()
19565
bd1580a9c133 basectx: move _dirs from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19564
diff changeset
379
24325
79d9c51488ca manifest: add hasdir() to context
Drew Gottlieb <drgott@google.com>
parents: 24323
diff changeset
380 def hasdir(self, dir):
79d9c51488ca manifest: add hasdir() to context
Drew Gottlieb <drgott@google.com>
parents: 24323
diff changeset
381 return self._manifest.hasdir(dir)
19566
54817c774d38 basectx: move dirs from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19565
diff changeset
382
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
383 def status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
384 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
385 other=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
386 match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
387 listignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
388 listclean=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
389 listunknown=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
390 listsubrepos=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
391 ):
21594
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
392 """return status of files between two nodes or node and working
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
393 directory.
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
394
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
395 If other is None, compare this node with working directory.
21722
ee29b0bb1619 status: document the content of the returned tuple in the docstring
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21718
diff changeset
396
ee29b0bb1619 status: document the content of the returned tuple in the docstring
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21718
diff changeset
397 returns (modified, added, removed, deleted, unknown, ignored, clean)
21594
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
398 """
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
399
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
400 ctx1 = self
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
401 ctx2 = self._repo[other]
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
402
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
403 # This next code block is, admittedly, fragile logic that tests for
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
404 # reversing the contexts and wouldn't need to exist if it weren't for
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
405 # the fast (and common) code path of comparing the working directory
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
406 # with its first parent.
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
407 #
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
408 # What we're aiming for here is the ability to call:
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
409 #
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
410 # workingctx.status(parentctx)
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
411 #
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
412 # If we always built the manifest for each context and compared those,
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
413 # then we'd be done. But the special case of the above call means we
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
414 # just copy the manifest of the parent.
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
415 reversed = False
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
416 if not isinstance(ctx1, changectx) and isinstance(ctx2, changectx):
21594
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
417 reversed = True
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
418 ctx1, ctx2 = ctx2, ctx1
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
419
40084
48a0ce67d67a status: intersect matcher with narrow matcher instead of filtering afterwards
Martin von Zweigbergk <martinvonz@google.com>
parents: 40063
diff changeset
420 match = self._repo.narrowmatch(match)
23237
98f41a2f8fba context.status: remove unused arguments from _matchstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 23236
diff changeset
421 match = ctx2._matchstatus(ctx1, match)
23304
dd3f857598a0 context.status: pass status tuple into _buildstatus
Martin von Zweigbergk <martinvonz@google.com>
parents: 23303
diff changeset
422 r = scmutil.status([], [], [], [], [], [], [])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
423 r = ctx2._buildstatus(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
424 ctx1, r, match, listignored, listclean, listunknown
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
425 )
21594
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
426
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
427 if reversed:
23301
c10dc5568069 context.status: wipe deleted/unknown/ignored fields when reversed
Martin von Zweigbergk <martinvonz@google.com>
parents: 23257
diff changeset
428 # Reverse added and removed. Clear deleted, unknown and ignored as
c10dc5568069 context.status: wipe deleted/unknown/ignored fields when reversed
Martin von Zweigbergk <martinvonz@google.com>
parents: 23257
diff changeset
429 # these make no sense to reverse.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
430 r = scmutil.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
431 r.modified, r.removed, r.added, [], [], [], r.clean
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
432 )
21594
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
433
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
434 if listsubrepos:
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
435 for subpath, sub in scmutil.itersubrepos(ctx1, ctx2):
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
436 try:
27183
0945539a3a6b extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents: 27064
diff changeset
437 rev2 = ctx2.subrev(subpath)
0945539a3a6b extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents: 27064
diff changeset
438 except KeyError:
0945539a3a6b extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents: 27064
diff changeset
439 # A subrepo that existed in node1 was deleted between
0945539a3a6b extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents: 27064
diff changeset
440 # node1 and node2 (inclusive). Thus, ctx2's substate
0945539a3a6b extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents: 27064
diff changeset
441 # won't contain that subpath. The best we can do ignore it.
0945539a3a6b extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents: 27064
diff changeset
442 rev2 = None
28017
d3f1b7ee5e70 match: rename "narrowmatcher" to "subdirmatcher" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 27983
diff changeset
443 submatch = matchmod.subdirmatcher(subpath, match)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
444 s = sub.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
445 rev2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
446 match=submatch,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
447 ignored=listignored,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
448 clean=listclean,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
449 unknown=listunknown,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
450 listsubrepos=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
451 )
27183
0945539a3a6b extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents: 27064
diff changeset
452 for rfiles, sfiles in zip(r, s):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
453 rfiles.extend(b"%s/%s" % (subpath, f) for f in sfiles)
21594
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
454
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
455 for l in r:
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
456 l.sort()
21616
0a8e7f81e8ae context: explicitly return a tuple
Sean Farley <sean.michael.farley@gmail.com>
parents: 21595
diff changeset
457
23301
c10dc5568069 context.status: wipe deleted/unknown/ignored fields when reversed
Martin von Zweigbergk <martinvonz@google.com>
parents: 23257
diff changeset
458 return r
21594
9e4567829129 basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21593
diff changeset
459
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
460
19537
6e3e8575276d basectx: add an empty class that will be used as a parent of all contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19314
diff changeset
461 class changectx(basectx):
2563
482c524dd9ab Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
462 """A changecontext object makes access to data related to a particular
19951
d51c4d85ec23 spelling: random spell checker fixes
Mads Kiilerich <madski@unity3d.com>
parents: 19902
diff changeset
463 changeset convenient. It represents a read-only context already present in
19537
6e3e8575276d basectx: add an empty class that will be used as a parent of all contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19314
diff changeset
464 the repo."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
465
39959
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39958
diff changeset
466 def __init__(self, repo, rev, node):
37177
fbe34945220d context: set repo property in basectx
Martin von Zweigbergk <martinvonz@google.com>
parents: 37176
diff changeset
467 super(changectx, self).__init__(repo)
39959
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39958
diff changeset
468 self._rev = rev
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39958
diff changeset
469 self._node = node
2563
482c524dd9ab Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
470
6469
fb502719c75c python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents: 6286
diff changeset
471 def __hash__(self):
fb502719c75c python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents: 6286
diff changeset
472 try:
fb502719c75c python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents: 6286
diff changeset
473 return hash(self._rev)
fb502719c75c python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents: 6286
diff changeset
474 except AttributeError:
fb502719c75c python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents: 6286
diff changeset
475 return id(self)
fb502719c75c python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents: 6286
diff changeset
476
3168
05c588e1803d context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents: 3166
diff changeset
477 def __nonzero__(self):
3578
3b4e00cba57a Define and use nullrev (revision of nullid) instead of -1.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3454
diff changeset
478 return self._rev != nullrev
3168
05c588e1803d context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents: 3166
diff changeset
479
31483
413b44003462 py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31473
diff changeset
480 __bool__ = __nonzero__
413b44003462 py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31473
diff changeset
481
8157
77c5877a668c context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents: 8151
diff changeset
482 @propertycache
7368
595ba2537d4f context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7367
diff changeset
483 def _changeset(self):
28488
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
484 return self._repo.changelog.changelogrevision(self.rev())
7368
595ba2537d4f context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7367
diff changeset
485
8157
77c5877a668c context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents: 8151
diff changeset
486 @propertycache
7368
595ba2537d4f context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7367
diff changeset
487 def _manifest(self):
30354
362f6f651b2e context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents: 30350
diff changeset
488 return self._manifestctx.read()
362f6f651b2e context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents: 30350
diff changeset
489
32552
6ae068f801e3 context: do not cache manifestctx
Jun Wu <quark@fb.com>
parents: 32519
diff changeset
490 @property
30354
362f6f651b2e context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents: 30350
diff changeset
491 def _manifestctx(self):
362f6f651b2e context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents: 30350
diff changeset
492 return self._repo.manifestlog[self._changeset.manifest]
7368
595ba2537d4f context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7367
diff changeset
493
8157
77c5877a668c context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents: 8151
diff changeset
494 @propertycache
7368
595ba2537d4f context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7367
diff changeset
495 def _manifestdelta(self):
30354
362f6f651b2e context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents: 30350
diff changeset
496 return self._manifestctx.readdelta()
7368
595ba2537d4f context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7367
diff changeset
497
8157
77c5877a668c context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents: 8151
diff changeset
498 @propertycache
7368
595ba2537d4f context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7367
diff changeset
499 def _parents(self):
27063
37e1fdcb271c context: optimize _parents()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27016
diff changeset
500 repo = self._repo
37e1fdcb271c context: optimize _parents()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27016
diff changeset
501 p1, p2 = repo.changelog.parentrevs(self._rev)
37e1fdcb271c context: optimize _parents()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27016
diff changeset
502 if p2 == nullrev:
39958
e1e3d1b498d3 context: reduce dependence of changectx constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 39912
diff changeset
503 return [repo[p1]]
e1e3d1b498d3 context: reduce dependence of changectx constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 39912
diff changeset
504 return [repo[p1], repo[p2]]
3215
931288cf58a7 contexts: use __getattr__ rather than try/except in changectx
Matt Mackall <mpm@selenic.com>
parents: 3214
diff changeset
505
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
506 def changeset(self):
28488
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
507 c = self._changeset
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
508 return (
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
509 c.manifest,
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
510 c.user,
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
511 c.date,
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
512 c.files,
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
513 c.description,
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
514 c.extra,
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
515 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
516
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
517 def manifestnode(self):
28488
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
518 return self._changeset.manifest
2563
482c524dd9ab Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
519
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
520 def user(self):
28488
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
521 return self._changeset.user
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
522
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
523 def date(self):
28488
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
524 return self._changeset.date
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
525
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
526 def files(self):
28488
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
527 return self._changeset.files
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
528
42396
65fa61ca20af context: add ctx.files{modified,added,removed}() methods
Martin von Zweigbergk <martinvonz@google.com>
parents: 42345
diff changeset
529 def filesmodified(self):
65fa61ca20af context: add ctx.files{modified,added,removed}() methods
Martin von Zweigbergk <martinvonz@google.com>
parents: 42345
diff changeset
530 modified = set(self.files())
65fa61ca20af context: add ctx.files{modified,added,removed}() methods
Martin von Zweigbergk <martinvonz@google.com>
parents: 42345
diff changeset
531 modified.difference_update(self.filesadded())
65fa61ca20af context: add ctx.files{modified,added,removed}() methods
Martin von Zweigbergk <martinvonz@google.com>
parents: 42345
diff changeset
532 modified.difference_update(self.filesremoved())
65fa61ca20af context: add ctx.files{modified,added,removed}() methods
Martin von Zweigbergk <martinvonz@google.com>
parents: 42345
diff changeset
533 return sorted(modified)
43023
008e74b34fb7 context: clarify the various mode in the filesadded method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42865
diff changeset
534
42396
65fa61ca20af context: add ctx.files{modified,added,removed}() methods
Martin von Zweigbergk <martinvonz@google.com>
parents: 42345
diff changeset
535 def filesadded(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
536 source = self._repo.ui.config(b'experimental', b'copies.read-from')
43023
008e74b34fb7 context: clarify the various mode in the filesadded method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42865
diff changeset
537 filesadded = self._changeset.filesadded
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
538 if source == b'changeset-only':
43023
008e74b34fb7 context: clarify the various mode in the filesadded method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42865
diff changeset
539 if filesadded is None:
008e74b34fb7 context: clarify the various mode in the filesadded method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42865
diff changeset
540 filesadded = []
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
541 elif source == b'compatibility':
43023
008e74b34fb7 context: clarify the various mode in the filesadded method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42865
diff changeset
542 if filesadded is None:
008e74b34fb7 context: clarify the various mode in the filesadded method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42865
diff changeset
543 filesadded = scmutil.computechangesetfilesadded(self)
008e74b34fb7 context: clarify the various mode in the filesadded method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42865
diff changeset
544 else:
008e74b34fb7 context: clarify the various mode in the filesadded method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42865
diff changeset
545 filesadded = scmutil.computechangesetfilesadded(self)
008e74b34fb7 context: clarify the various mode in the filesadded method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42865
diff changeset
546 return filesadded
008e74b34fb7 context: clarify the various mode in the filesadded method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42865
diff changeset
547
42396
65fa61ca20af context: add ctx.files{modified,added,removed}() methods
Martin von Zweigbergk <martinvonz@google.com>
parents: 42345
diff changeset
548 def filesremoved(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
549 source = self._repo.ui.config(b'experimental', b'copies.read-from')
43024
15badd621825 context: clarify the various mode in the filesremoved method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43023
diff changeset
550 filesremoved = self._changeset.filesremoved
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
551 if source == b'changeset-only':
43024
15badd621825 context: clarify the various mode in the filesremoved method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43023
diff changeset
552 if filesremoved is None:
15badd621825 context: clarify the various mode in the filesremoved method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43023
diff changeset
553 filesremoved = []
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
554 elif source == b'compatibility':
43024
15badd621825 context: clarify the various mode in the filesremoved method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43023
diff changeset
555 if filesremoved is None:
15badd621825 context: clarify the various mode in the filesremoved method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43023
diff changeset
556 filesremoved = scmutil.computechangesetfilesremoved(self)
15badd621825 context: clarify the various mode in the filesremoved method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43023
diff changeset
557 else:
15badd621825 context: clarify the various mode in the filesremoved method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43023
diff changeset
558 filesremoved = scmutil.computechangesetfilesremoved(self)
15badd621825 context: clarify the various mode in the filesremoved method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43023
diff changeset
559 return filesremoved
42396
65fa61ca20af context: add ctx.files{modified,added,removed}() methods
Martin von Zweigbergk <martinvonz@google.com>
parents: 42345
diff changeset
560
41764
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
561 @propertycache
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
562 def _copies(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
563 source = self._repo.ui.config(b'experimental', b'copies.read-from')
42142
5382d8f8530b changelog: parse copy metadata if available in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 42102
diff changeset
564 p1copies = self._changeset.p1copies
5382d8f8530b changelog: parse copy metadata if available in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 42102
diff changeset
565 p2copies = self._changeset.p2copies
5382d8f8530b changelog: parse copy metadata if available in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 42102
diff changeset
566 # If config says to get copy metadata only from changeset, then return
5382d8f8530b changelog: parse copy metadata if available in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 42102
diff changeset
567 # that, defaulting to {} if there was no copy metadata.
5382d8f8530b changelog: parse copy metadata if available in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 42102
diff changeset
568 # In compatibility mode, we return copy data from the changeset if
5382d8f8530b changelog: parse copy metadata if available in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 42102
diff changeset
569 # it was recorded there, and otherwise we fall back to getting it from
5382d8f8530b changelog: parse copy metadata if available in extras
Martin von Zweigbergk <martinvonz@google.com>
parents: 42102
diff changeset
570 # the filelogs (below).
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
571 if source == b'changeset-only':
43025
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
572 if p1copies is None:
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
573 p1copies = {}
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
574 if p2copies is None:
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
575 p2copies = {}
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
576 elif source == b'compatibility':
43025
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
577 if p1copies is None:
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
578 # we are in compatiblity mode and there is not data in the
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
579 # changeset), we get the copy metadata from the filelogs.
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
580 p1copies, p2copies = super(changectx, self)._copies
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
581 else:
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
582 # config said to read only from filelog, we get the copy metadata
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
583 # from the filelogs.
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
584 p1copies, p2copies = super(changectx, self)._copies
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
585 return p1copies, p2copies
8af909893188 context: clarify the various mode in the _copies property cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43024
diff changeset
586
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
587 def description(self):
28488
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
588 return self._changeset.description
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
589
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
590 def branch(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
591 return encoding.tolocal(self._changeset.extra.get(b"branch"))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
592
16720
e825a89de5d7 context: add changectx.closesbranch() method
Brodie Rao <brodie@sf.io>
parents: 16719
diff changeset
593 def closesbranch(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
594 return b'close' in self._changeset.extra
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
595
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
596 def extra(self):
35130
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 35116
diff changeset
597 """Return a dict of extra information."""
28488
437c32dcec7d context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28315
diff changeset
598 return self._changeset.extra
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
599
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
600 def tags(self):
35130
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 35116
diff changeset
601 """Return a list of byte tag names"""
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
602 return self._repo.nodetags(self._node)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
603
13384
caa561759538 context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents: 13235
diff changeset
604 def bookmarks(self):
35130
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 35116
diff changeset
605 """Return a list of byte bookmark names."""
13384
caa561759538 context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents: 13235
diff changeset
606 return self._repo.nodebookmarks(self._node)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
607
15421
405ca90df2b1 phases: add a phase method to context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 15337
diff changeset
608 def phase(self):
16657
b6081c2c4647 phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents: 16610
diff changeset
609 return self._repo._phasecache.phase(self._repo, self._rev)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
610
14644
f3a40fd7008c hidden: Add ``hidden`` method for context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 14528
diff changeset
611 def hidden(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
612 return self._rev in repoview.filterrevs(self._repo, b'visible')
2563
482c524dd9ab Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
613
34681
4dc8a2ee0f4f context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents: 34556
diff changeset
614 def isinmemory(self):
4dc8a2ee0f4f context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents: 34556
diff changeset
615 return False
4dc8a2ee0f4f context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents: 34556
diff changeset
616
2563
482c524dd9ab Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
617 def children(self):
35130
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 35116
diff changeset
618 """return list of changectx contexts for each child changeset.
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 35116
diff changeset
619
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 35116
diff changeset
620 This returns only the immediate child changesets. Use descendants() to
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 35116
diff changeset
621 recursively walk children.
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 35116
diff changeset
622 """
2627
b779319a532b context.py: self.repo is not defined, change to self._repo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2566
diff changeset
623 c = self._repo.changelog.children(self._node)
39958
e1e3d1b498d3 context: reduce dependence of changectx constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 39912
diff changeset
624 return [self._repo[x] for x in c]
2563
482c524dd9ab Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
625
6876
077f1e637cd8 Merge with stable
Matt Mackall <mpm@selenic.com>
parents: 6846
diff changeset
626 def ancestors(self):
16866
91f3ac205816 revlog: ancestors(*revs) becomes ancestors(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents: 16761
diff changeset
627 for a in self._repo.changelog.ancestors([self._rev]):
39958
e1e3d1b498d3 context: reduce dependence of changectx constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 39912
diff changeset
628 yield self._repo[a]
6876
077f1e637cd8 Merge with stable
Matt Mackall <mpm@selenic.com>
parents: 6846
diff changeset
629
077f1e637cd8 Merge with stable
Matt Mackall <mpm@selenic.com>
parents: 6846
diff changeset
630 def descendants(self):
35130
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 35116
diff changeset
631 """Recursively yield all children of the changeset.
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 35116
diff changeset
632
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 35116
diff changeset
633 For just the immediate children, use children()
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 35116
diff changeset
634 """
16867
1093ad1e8903 revlog: descendants(*revs) becomes descendants(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents: 16866
diff changeset
635 for d in self._repo.changelog.descendants([self._rev]):
39958
e1e3d1b498d3 context: reduce dependence of changectx constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 39912
diff changeset
636 yield self._repo[d]
6876
077f1e637cd8 Merge with stable
Matt Mackall <mpm@selenic.com>
parents: 6846
diff changeset
637
3966
b4eaa68dea1b context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3965
diff changeset
638 def filectx(self, path, fileid=None, filelog=None):
2563
482c524dd9ab Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
639 """get a file context from this changeset"""
2628
9999a796d389 context.py: filectxs was using a keyword arg, add it to filectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2627
diff changeset
640 if fileid is None:
9999a796d389 context.py: filectxs was using a keyword arg, add it to filectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2627
diff changeset
641 fileid = self.filenode(path)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
642 return filectx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
643 self._repo, path, fileid=fileid, changectx=self, filelog=filelog
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
644 )
2563
482c524dd9ab Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
645
21203
9f12d8665c7b ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents: 21126
diff changeset
646 def ancestor(self, c2, warn=False):
22389
94f77624dbb5 comments: describe ancestor consistently - avoid 'least common ancestor'
Mads Kiilerich <madski@unity3d.com>
parents: 22313
diff changeset
647 """return the "best" ancestor context of self and c2
94f77624dbb5 comments: describe ancestor consistently - avoid 'least common ancestor'
Mads Kiilerich <madski@unity3d.com>
parents: 22313
diff changeset
648
94f77624dbb5 comments: describe ancestor consistently - avoid 'least common ancestor'
Mads Kiilerich <madski@unity3d.com>
parents: 22313
diff changeset
649 If there are multiple candidates, it will show a message and check
94f77624dbb5 comments: describe ancestor consistently - avoid 'least common ancestor'
Mads Kiilerich <madski@unity3d.com>
parents: 22313
diff changeset
650 merge.preferancestor configuration before falling back to the
94f77624dbb5 comments: describe ancestor consistently - avoid 'least common ancestor'
Mads Kiilerich <madski@unity3d.com>
parents: 22313
diff changeset
651 revlog ancestor."""
9843
d1043c2ffe6c merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents: 9751
diff changeset
652 # deal with workingctxs
d1043c2ffe6c merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents: 9751
diff changeset
653 n2 = c2._node
13031
3da456d0c885 code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents: 13001
diff changeset
654 if n2 is None:
9843
d1043c2ffe6c merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents: 9751
diff changeset
655 n2 = c2._parents[0]._node
21125
e94e90a4526e context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents: 21114
diff changeset
656 cahs = self._repo.changelog.commonancestorsheads(self._node, n2)
e94e90a4526e context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents: 21114
diff changeset
657 if not cahs:
e94e90a4526e context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents: 21114
diff changeset
658 anc = nullid
e94e90a4526e context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents: 21114
diff changeset
659 elif len(cahs) == 1:
e94e90a4526e context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents: 21114
diff changeset
660 anc = cahs[0]
e94e90a4526e context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents: 21114
diff changeset
661 else:
25844
18541e9510c5 merge: make merge.preferancestor type and default consistent
Matt Mackall <mpm@selenic.com>
parents: 25757
diff changeset
662 # experimental config: merge.preferancestor
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
663 for r in self._repo.ui.configlist(b'merge', b'preferancestor'):
22671
5220c12c43fd changectx: skip all invalid merge.preferancestor values
Mads Kiilerich <madski@unity3d.com>
parents: 22405
diff changeset
664 try:
37354
a6014392837e context: use revsymbol() in "merge.preferancestor" code
Martin von Zweigbergk <martinvonz@google.com>
parents: 37269
diff changeset
665 ctx = scmutil.revsymbol(self._repo, r)
22671
5220c12c43fd changectx: skip all invalid merge.preferancestor values
Mads Kiilerich <madski@unity3d.com>
parents: 22405
diff changeset
666 except error.RepoLookupError:
22180
17011b36aac7 changectx: ancestor should only prefer merge.preferancestor if it is a revision
Mads Kiilerich <madski@unity3d.com>
parents: 21990
diff changeset
667 continue
21126
99b5eaf372a7 context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents: 21125
diff changeset
668 anc = ctx.node()
99b5eaf372a7 context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents: 21125
diff changeset
669 if anc in cahs:
99b5eaf372a7 context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents: 21125
diff changeset
670 break
99b5eaf372a7 context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents: 21125
diff changeset
671 else:
99b5eaf372a7 context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents: 21125
diff changeset
672 anc = self._repo.changelog.ancestor(self._node, n2)
21203
9f12d8665c7b ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents: 21126
diff changeset
673 if warn:
9f12d8665c7b ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents: 21126
diff changeset
674 self._repo.ui.status(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
675 (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
676 _(b"note: using %s as ancestor of %s and %s\n")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
677 % (short(anc), short(self._node), short(n2))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
678 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
679 + b''.join(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
680 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
681 b" alternatively, use --config "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
682 b"merge.preferancestor=%s\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
683 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
684 % short(n)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
685 for n in sorted(cahs)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
686 if n != anc
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
687 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
688 )
39958
e1e3d1b498d3 context: reduce dependence of changectx constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 39912
diff changeset
689 return self._repo[anc]
3125
02b22fefc01f changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents: 3124
diff changeset
690
38670
fbec9c0b32d3 context: rename descendant() to isancestorof()
Martin von Zweigbergk <martinvonz@google.com>
parents: 38668
diff changeset
691 def isancestorof(self, other):
fbec9c0b32d3 context: rename descendant() to isancestorof()
Martin von Zweigbergk <martinvonz@google.com>
parents: 38668
diff changeset
692 """True if this changeset is an ancestor of other"""
38668
21846c94e605 revlog: delete isdescendantrev() in favor of isancestorrev()
Martin von Zweigbergk <martinvonz@google.com>
parents: 38664
diff changeset
693 return self._repo.changelog.isancestorrev(self._rev, other._rev)
17626
3a524b647897 context: add "descendant()" to changectx for efficient descendant examination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 17469
diff changeset
694
6764
8db64464d136 context: add walk method
Matt Mackall <mpm@selenic.com>
parents: 6763
diff changeset
695 def walk(self, match):
24646
5693c834bcb4 manifest: move changectx.walk() to manifests
Drew Gottlieb <drgott@google.com>
parents: 24633
diff changeset
696 '''Generates matching file names.'''
20292
8dc254198a8f changectx: increase perf of walk function
Durham Goode <durham@fb.com>
parents: 20236
diff changeset
697
25435
a592a6a6f4fe context: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25417
diff changeset
698 # Wrap match.bad method to have message with nodeid
24646
5693c834bcb4 manifest: move changectx.walk() to manifests
Drew Gottlieb <drgott@google.com>
parents: 24633
diff changeset
699 def bad(fn, msg):
25193
ccb1623266eb context: don't complain about a matcher's subrepo paths in changectx.walk()
Matt Harbison <matt_harbison@yahoo.com>
parents: 24862
diff changeset
700 # The manifest doesn't know about subrepos, so don't complain about
ccb1623266eb context: don't complain about a matcher's subrepo paths in changectx.walk()
Matt Harbison <matt_harbison@yahoo.com>
parents: 24862
diff changeset
701 # paths into valid subrepos.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
702 if any(fn == s or fn.startswith(s + b'/') for s in self.substate):
25193
ccb1623266eb context: don't complain about a matcher's subrepo paths in changectx.walk()
Matt Harbison <matt_harbison@yahoo.com>
parents: 24862
diff changeset
703 return
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
704 match.bad(fn, _(b'no such file in rev %s') % self)
20292
8dc254198a8f changectx: increase perf of walk function
Durham Goode <durham@fb.com>
parents: 20236
diff changeset
705
40085
2cf18f46a1ce narrow: only walk files within narrowspec also for committed revisions
Martin von Zweigbergk <martinvonz@google.com>
parents: 40084
diff changeset
706 m = matchmod.badmatch(self._repo.narrowmatch(match), bad)
25435
a592a6a6f4fe context: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25417
diff changeset
707 return self._manifest.walk(m)
6764
8db64464d136 context: add walk method
Matt Mackall <mpm@selenic.com>
parents: 6763
diff changeset
708
21985
7e871e771300 context: add a method to efficiently filter by match if possible
Siddharth Agarwal <sid0@fb.com>
parents: 21973
diff changeset
709 def matches(self, match):
7e871e771300 context: add a method to efficiently filter by match if possible
Siddharth Agarwal <sid0@fb.com>
parents: 21973
diff changeset
710 return self.walk(match)
7e871e771300 context: add a method to efficiently filter by match if possible
Siddharth Agarwal <sid0@fb.com>
parents: 21973
diff changeset
711
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
712
19572
c19f46b904b9 basefilectx: add an empty class that will be used as a parent of file contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19571
diff changeset
713 class basefilectx(object):
c19f46b904b9 basefilectx: add an empty class that will be used as a parent of file contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19571
diff changeset
714 """A filecontext object represents the common logic for its children:
c19f46b904b9 basefilectx: add an empty class that will be used as a parent of file contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19571
diff changeset
715 filectx: read-only access to a filerevision that is already present
c19f46b904b9 basefilectx: add an empty class that will be used as a parent of file contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19571
diff changeset
716 in the repo,
c19f46b904b9 basefilectx: add an empty class that will be used as a parent of file contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19571
diff changeset
717 workingfilectx: a filecontext that represents files from the working
c19f46b904b9 basefilectx: add an empty class that will be used as a parent of file contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19571
diff changeset
718 directory,
32283
07da778f3b58 filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents: 32282
diff changeset
719 memfilectx: a filecontext that represents files in-memory,
07da778f3b58 filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents: 32282
diff changeset
720 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
721
19573
dffad92ab709 basefilectx: move _filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19572
diff changeset
722 @propertycache
dffad92ab709 basefilectx: move _filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19572
diff changeset
723 def _filelog(self):
dffad92ab709 basefilectx: move _filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19572
diff changeset
724 return self._repo.file(self._path)
dffad92ab709 basefilectx: move _filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19572
diff changeset
725
19574
a01436798988 basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19573
diff changeset
726 @propertycache
a01436798988 basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19573
diff changeset
727 def _changeid(self):
40711
1423ff45c322 context: remove seemingly impossible code branch
Martin von Zweigbergk <martinvonz@google.com>
parents: 40302
diff changeset
728 if r'_changectx' in self.__dict__:
19574
a01436798988 basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19573
diff changeset
729 return self._changectx.rev()
32197
2cfdf5241096 py3: use raw strings while accessing class.__dict__
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32069
diff changeset
730 elif r'_descendantrev' in self.__dict__:
23983
ff070a53ee74 filectx: if we have a _descendantrev, use it to adjust linkrev
Matt Mackall <mpm@selenic.com>
parents: 23981
diff changeset
731 # this file context was created from a revision with a known
ff070a53ee74 filectx: if we have a _descendantrev, use it to adjust linkrev
Matt Mackall <mpm@selenic.com>
parents: 23981
diff changeset
732 # descendant, we can (lazily) correct for linkrev aliases
30289
e81d72b4b0ae adjustlinkrev: remove unnecessary parameters
Jun Wu <quark@fb.com>
parents: 30284
diff changeset
733 return self._adjustlinkrev(self._descendantrev)
19574
a01436798988 basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19573
diff changeset
734 else:
a01436798988 basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19573
diff changeset
735 return self._filelog.linkrev(self._filerev)
a01436798988 basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19573
diff changeset
736
19575
5a868137b830 basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19574
diff changeset
737 @propertycache
5a868137b830 basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19574
diff changeset
738 def _filenode(self):
32197
2cfdf5241096 py3: use raw strings while accessing class.__dict__
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32069
diff changeset
739 if r'_fileid' in self.__dict__:
19575
5a868137b830 basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19574
diff changeset
740 return self._filelog.lookup(self._fileid)
5a868137b830 basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19574
diff changeset
741 else:
5a868137b830 basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19574
diff changeset
742 return self._changectx.filenode(self._path)
5a868137b830 basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19574
diff changeset
743
19576
18bbd8a3abf3 basefilectx: move _filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19575
diff changeset
744 @propertycache
18bbd8a3abf3 basefilectx: move _filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19575
diff changeset
745 def _filerev(self):
18bbd8a3abf3 basefilectx: move _filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19575
diff changeset
746 return self._filelog.rev(self._filenode)
18bbd8a3abf3 basefilectx: move _filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19575
diff changeset
747
19577
b52d572a2177 basefilectx: move _repopath from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19576
diff changeset
748 @propertycache
b52d572a2177 basefilectx: move _repopath from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19576
diff changeset
749 def _repopath(self):
b52d572a2177 basefilectx: move _repopath from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19576
diff changeset
750 return self._path
b52d572a2177 basefilectx: move _repopath from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19576
diff changeset
751
19578
2c149635c2c5 basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19577
diff changeset
752 def __nonzero__(self):
2c149635c2c5 basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19577
diff changeset
753 try:
2c149635c2c5 basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19577
diff changeset
754 self._filenode
2c149635c2c5 basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19577
diff changeset
755 return True
2c149635c2c5 basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19577
diff changeset
756 except error.LookupError:
2c149635c2c5 basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19577
diff changeset
757 # file is missing
2c149635c2c5 basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19577
diff changeset
758 return False
2c149635c2c5 basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19577
diff changeset
759
31483
413b44003462 py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31473
diff changeset
760 __bool__ = __nonzero__
413b44003462 py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31473
diff changeset
761
33038
ce96efec8112 py3: add utility to forward __str__() to __bytes__()
Yuya Nishihara <yuya@tcha.org>
parents: 33035
diff changeset
762 def __bytes__(self):
30284
e25ce44f8447 context: make sure __str__ works, also when there is no _changectx
Mads Kiilerich <mads@kiilerich.com>
parents: 30040
diff changeset
763 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
764 return b"%s@%s" % (self.path(), self._changectx)
30284
e25ce44f8447 context: make sure __str__ works, also when there is no _changectx
Mads Kiilerich <mads@kiilerich.com>
parents: 30040
diff changeset
765 except error.LookupError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
766 return b"%s@???" % self.path()
19579
964844d64ef8 basefilectx: move __str__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19578
diff changeset
767
33038
ce96efec8112 py3: add utility to forward __str__() to __bytes__()
Yuya Nishihara <yuya@tcha.org>
parents: 33035
diff changeset
768 __str__ = encoding.strmethod(__bytes__)
33035
daccadd75760 py3: define __bytes__ for basefilectx class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32922
diff changeset
769
19580
e86a594ab11f basefilectx: move __repr__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19579
diff changeset
770 def __repr__(self):
36728
c6901665cd5b py3: make sure __repr__ returns a str
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36727
diff changeset
771 return r"<%s %s>" % (type(self).__name__, str(self))
19580
e86a594ab11f basefilectx: move __repr__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19579
diff changeset
772
19581
fe50d21be01a basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19580
diff changeset
773 def __hash__(self):
fe50d21be01a basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19580
diff changeset
774 try:
fe50d21be01a basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19580
diff changeset
775 return hash((self._path, self._filenode))
fe50d21be01a basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19580
diff changeset
776 except AttributeError:
fe50d21be01a basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19580
diff changeset
777 return id(self)
fe50d21be01a basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19580
diff changeset
778
19582
bda1d48bb07f basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19581
diff changeset
779 def __eq__(self, other):
bda1d48bb07f basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19581
diff changeset
780 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
781 return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
782 type(self) == type(other)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
783 and self._path == other._path
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
784 and self._filenode == other._filenode
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
785 )
19582
bda1d48bb07f basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19581
diff changeset
786 except AttributeError:
bda1d48bb07f basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19581
diff changeset
787 return False
bda1d48bb07f basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19581
diff changeset
788
19583
e5074d82afc9 basefilectx: move __ne__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19582
diff changeset
789 def __ne__(self, other):
e5074d82afc9 basefilectx: move __ne__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19582
diff changeset
790 return not (self == other)
e5074d82afc9 basefilectx: move __ne__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19582
diff changeset
791
19584
fe300e63c28c basefilectx: move filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19583
diff changeset
792 def filerev(self):
fe300e63c28c basefilectx: move filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19583
diff changeset
793 return self._filerev
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
794
19585
8e553cd6071e basefilectx: move filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19584
diff changeset
795 def filenode(self):
8e553cd6071e basefilectx: move filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19584
diff changeset
796 return self._filenode
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
797
32278
8a660af9dbe3 filectx: make flags a property cache
Jun Wu <quark@fb.com>
parents: 32197
diff changeset
798 @propertycache
8a660af9dbe3 filectx: make flags a property cache
Jun Wu <quark@fb.com>
parents: 32197
diff changeset
799 def _flags(self):
8a660af9dbe3 filectx: make flags a property cache
Jun Wu <quark@fb.com>
parents: 32197
diff changeset
800 return self._changectx.flags(self._path)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
801
19586
43f9ed2f64b1 basefilectx: move flags from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19585
diff changeset
802 def flags(self):
32278
8a660af9dbe3 filectx: make flags a property cache
Jun Wu <quark@fb.com>
parents: 32197
diff changeset
803 return self._flags
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
804
19587
b1c344ebd8e4 basefilectx: move filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19586
diff changeset
805 def filelog(self):
b1c344ebd8e4 basefilectx: move filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19586
diff changeset
806 return self._filelog
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
807
19588
a192fff6c97d basefilectx: move rev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19587
diff changeset
808 def rev(self):
a192fff6c97d basefilectx: move rev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19587
diff changeset
809 return self._changeid
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
810
19589
6a9043fa06d0 basefilectx: move linkrev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19588
diff changeset
811 def linkrev(self):
6a9043fa06d0 basefilectx: move linkrev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19588
diff changeset
812 return self._filelog.linkrev(self._filerev)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
813
19590
90994b176bc1 basefilectx: move node from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19589
diff changeset
814 def node(self):
90994b176bc1 basefilectx: move node from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19589
diff changeset
815 return self._changectx.node()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
816
19591
04fbc85f870a basefilectx: move hex from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19590
diff changeset
817 def hex(self):
04fbc85f870a basefilectx: move hex from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19590
diff changeset
818 return self._changectx.hex()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
819
19592
1cdb3b3df4df basefilectx: move user from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19591
diff changeset
820 def user(self):
1cdb3b3df4df basefilectx: move user from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19591
diff changeset
821 return self._changectx.user()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
822
19593
e3c241c89350 basefilectx: move date from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19592
diff changeset
823 def date(self):
e3c241c89350 basefilectx: move date from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19592
diff changeset
824 return self._changectx.date()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
825
19594
1c030c24e196 basefilectx: move files from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19593
diff changeset
826 def files(self):
1c030c24e196 basefilectx: move files from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19593
diff changeset
827 return self._changectx.files()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
828
19595
bb6fd06975a6 basefilectx: move description from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19594
diff changeset
829 def description(self):
bb6fd06975a6 basefilectx: move description from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19594
diff changeset
830 return self._changectx.description()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
831
19596
9bc3d0dea371 basefilectx: move branch from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19595
diff changeset
832 def branch(self):
9bc3d0dea371 basefilectx: move branch from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19595
diff changeset
833 return self._changectx.branch()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
834
19597
837bc86370f0 basefilectx: move extra from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19596
diff changeset
835 def extra(self):
837bc86370f0 basefilectx: move extra from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19596
diff changeset
836 return self._changectx.extra()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
837
19598
e8ef893a3150 basefilectx: move phase from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19597
diff changeset
838 def phase(self):
e8ef893a3150 basefilectx: move phase from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19597
diff changeset
839 return self._changectx.phase()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
840
19599
66d83efac20a basefilectx: move phasestr from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19598
diff changeset
841 def phasestr(self):
66d83efac20a basefilectx: move phasestr from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19598
diff changeset
842 return self._changectx.phasestr()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
843
35111
a9454beb9dd8 context: add obsolete() method to basefilectx
Anton Shestakov <av6@dwimlabs.net>
parents: 34926
diff changeset
844 def obsolete(self):
a9454beb9dd8 context: add obsolete() method to basefilectx
Anton Shestakov <av6@dwimlabs.net>
parents: 34926
diff changeset
845 return self._changectx.obsolete()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
846
35116
bd2743936b56 context: add instabilities() method to basefilectx
Anton Shestakov <av6@dwimlabs.net>
parents: 35111
diff changeset
847 def instabilities(self):
bd2743936b56 context: add instabilities() method to basefilectx
Anton Shestakov <av6@dwimlabs.net>
parents: 35111
diff changeset
848 return self._changectx.instabilities()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
849
19600
12cdff44fdc4 basefilectx: move manifest from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19599
diff changeset
850 def manifest(self):
12cdff44fdc4 basefilectx: move manifest from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19599
diff changeset
851 return self._changectx.manifest()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
852
19601
f284907631f5 basefilectx: move changectx from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19600
diff changeset
853 def changectx(self):
f284907631f5 basefilectx: move changectx from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19600
diff changeset
854 return self._changectx
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
855
32279
c38c15d4ce48 filectx: make renamed a property cache
Jun Wu <quark@fb.com>
parents: 32278
diff changeset
856 def renamed(self):
c38c15d4ce48 filectx: make renamed a property cache
Jun Wu <quark@fb.com>
parents: 32278
diff changeset
857 return self._copied
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
858
41777
041d829575ed context: add specialized way of getting copy source file only
Martin von Zweigbergk <martinvonz@google.com>
parents: 41775
diff changeset
859 def copysource(self):
041d829575ed context: add specialized way of getting copy source file only
Martin von Zweigbergk <martinvonz@google.com>
parents: 41775
diff changeset
860 return self._copied and self._copied[0]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
861
24333
5da0eb641881 filectx: add a repo accessor
Matt Harbison <matt_harbison@yahoo.com>
parents: 24326
diff changeset
862 def repo(self):
5da0eb641881 filectx: add a repo accessor
Matt Harbison <matt_harbison@yahoo.com>
parents: 24326
diff changeset
863 return self._repo
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
864
32280
842ea95d45dc filectx: move size to basefilectx
Jun Wu <quark@fb.com>
parents: 32279
diff changeset
865 def size(self):
842ea95d45dc filectx: move size to basefilectx
Jun Wu <quark@fb.com>
parents: 32279
diff changeset
866 return len(self.data())
19584
fe300e63c28c basefilectx: move filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19583
diff changeset
867
19602
018ee491a6be basefilectx: move path from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19601
diff changeset
868 def path(self):
018ee491a6be basefilectx: move path from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19601
diff changeset
869 return self._path
018ee491a6be basefilectx: move path from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19601
diff changeset
870
19603
a92302f48a56 basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19602
diff changeset
871 def isbinary(self):
a92302f48a56 basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19602
diff changeset
872 try:
37087
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37069
diff changeset
873 return stringutil.binary(self.data())
19603
a92302f48a56 basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19602
diff changeset
874 except IOError:
a92302f48a56 basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19602
diff changeset
875 return False
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
876
22054
ef0ee0c001bf basefilectx: move isexec and islink from memfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21992
diff changeset
877 def isexec(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
878 return b'x' in self.flags()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
879
22054
ef0ee0c001bf basefilectx: move isexec and islink from memfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21992
diff changeset
880 def islink(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
881 return b'l' in self.flags()
19603
a92302f48a56 basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19602
diff changeset
882
26978
9b9d4bcc915e filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents: 26977
diff changeset
883 def isabsent(self):
9b9d4bcc915e filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents: 26977
diff changeset
884 """whether this filectx represents a file not in self._changectx
9b9d4bcc915e filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents: 26977
diff changeset
885
9b9d4bcc915e filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents: 26977
diff changeset
886 This is mainly for merge code to detect change/delete conflicts. This is
9b9d4bcc915e filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents: 26977
diff changeset
887 expected to be True for all subclasses of basectx."""
9b9d4bcc915e filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents: 26977
diff changeset
888 return False
9b9d4bcc915e filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents: 26977
diff changeset
889
26977
bd19561b98d9 filectx: allow custom comparators
Siddharth Agarwal <sid0@fb.com>
parents: 26748
diff changeset
890 _customcmp = False
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
891
19604
ef7c47e4002f basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19603
diff changeset
892 def cmp(self, fctx):
ef7c47e4002f basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19603
diff changeset
893 """compare with other file context
ef7c47e4002f basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19603
diff changeset
894
ef7c47e4002f basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19603
diff changeset
895 returns True if different than fctx.
ef7c47e4002f basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19603
diff changeset
896 """
26977
bd19561b98d9 filectx: allow custom comparators
Siddharth Agarwal <sid0@fb.com>
parents: 26748
diff changeset
897 if fctx._customcmp:
bd19561b98d9 filectx: allow custom comparators
Siddharth Agarwal <sid0@fb.com>
parents: 26748
diff changeset
898 return fctx.cmp(self)
bd19561b98d9 filectx: allow custom comparators
Siddharth Agarwal <sid0@fb.com>
parents: 26748
diff changeset
899
41001
21ffe6b97a25 context: error out if basefilectx.cmp() is called without self._filenode
Yuya Nishihara <yuya@tcha.org>
parents: 41000
diff changeset
900 if self._filenode is None:
21ffe6b97a25 context: error out if basefilectx.cmp() is called without self._filenode
Yuya Nishihara <yuya@tcha.org>
parents: 41000
diff changeset
901 raise error.ProgrammingError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
902 b'filectx.cmp() must be reimplemented if not backed by revlog'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
903 )
41001
21ffe6b97a25 context: error out if basefilectx.cmp() is called without self._filenode
Yuya Nishihara <yuya@tcha.org>
parents: 41000
diff changeset
904
41000
39953bcf1f51 context: collapse complex condition to see if filelog have to be compared
Yuya Nishihara <yuya@tcha.org>
parents: 40999
diff changeset
905 if fctx._filenode is None:
39953bcf1f51 context: collapse complex condition to see if filelog have to be compared
Yuya Nishihara <yuya@tcha.org>
parents: 40999
diff changeset
906 if self._repo._encodefilterpats:
39953bcf1f51 context: collapse complex condition to see if filelog have to be compared
Yuya Nishihara <yuya@tcha.org>
parents: 40999
diff changeset
907 # can't rely on size() because wdir content may be decoded
39953bcf1f51 context: collapse complex condition to see if filelog have to be compared
Yuya Nishihara <yuya@tcha.org>
parents: 40999
diff changeset
908 return self._filelog.cmp(self._filenode, fctx.data())
39953bcf1f51 context: collapse complex condition to see if filelog have to be compared
Yuya Nishihara <yuya@tcha.org>
parents: 40999
diff changeset
909 if self.size() - 4 == fctx.size():
39953bcf1f51 context: collapse complex condition to see if filelog have to be compared
Yuya Nishihara <yuya@tcha.org>
parents: 40999
diff changeset
910 # size() can match:
39953bcf1f51 context: collapse complex condition to see if filelog have to be compared
Yuya Nishihara <yuya@tcha.org>
parents: 40999
diff changeset
911 # if file data starts with '\1\n', empty metadata block is
39953bcf1f51 context: collapse complex condition to see if filelog have to be compared
Yuya Nishihara <yuya@tcha.org>
parents: 40999
diff changeset
912 # prepended, which adds 4 bytes to filelog.size().
39953bcf1f51 context: collapse complex condition to see if filelog have to be compared
Yuya Nishihara <yuya@tcha.org>
parents: 40999
diff changeset
913 return self._filelog.cmp(self._filenode, fctx.data())
39953bcf1f51 context: collapse complex condition to see if filelog have to be compared
Yuya Nishihara <yuya@tcha.org>
parents: 40999
diff changeset
914 if self.size() == fctx.size():
39953bcf1f51 context: collapse complex condition to see if filelog have to be compared
Yuya Nishihara <yuya@tcha.org>
parents: 40999
diff changeset
915 # size() matches: need to compare content
19604
ef7c47e4002f basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19603
diff changeset
916 return self._filelog.cmp(self._filenode, fctx.data())
ef7c47e4002f basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19603
diff changeset
917
41000
39953bcf1f51 context: collapse complex condition to see if filelog have to be compared
Yuya Nishihara <yuya@tcha.org>
parents: 40999
diff changeset
918 # size() differs
19604
ef7c47e4002f basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19603
diff changeset
919 return True
ef7c47e4002f basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19603
diff changeset
920
40736
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
921 def _adjustlinkrev(self, srcrev, inclusive=False, stoprev=None):
24180
d8e0c591781c spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 24050
diff changeset
922 """return the first ancestor of <srcrev> introducing <fnode>
23979
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
923
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
924 If the linkrev of the file revision does not point to an ancestor of
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
925 srcrev, we'll walk down the ancestors until we find one introducing
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
926 this file revision.
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
927
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
928 :srcrev: the changeset revision we search ancestors from
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
929 :inclusive: if true, the src revision will also be checked
40736
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
930 :stoprev: an optional revision to stop the walk at. If no introduction
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
931 of this file content could be found before this floor
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
932 revision, the function will returns "None" and stops its
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
933 iteration.
23979
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
934 """
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
935 repo = self._repo
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
936 cl = repo.unfiltered().changelog
29943
80be4436e4cc manifest: adds manifestctx.readfast
Durham Goode <durham@fb.com>
parents: 29942
diff changeset
937 mfl = repo.manifestlog
23979
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
938 # fetch the linkrev
30289
e81d72b4b0ae adjustlinkrev: remove unnecessary parameters
Jun Wu <quark@fb.com>
parents: 30284
diff changeset
939 lkr = self.linkrev()
40045
ccf4d808ec4c context: fast path linkrev adjustement in trivial case
Boris Feld <boris.feld@octobus.net>
parents: 39960
diff changeset
940 if srcrev == lkr:
ccf4d808ec4c context: fast path linkrev adjustement in trivial case
Boris Feld <boris.feld@octobus.net>
parents: 39960
diff changeset
941 return lkr
23980
c1ce5442453f _adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23979
diff changeset
942 # hack to reuse ancestor computation when searching for renames
c1ce5442453f _adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23979
diff changeset
943 memberanc = getattr(self, '_ancestrycontext', None)
c1ce5442453f _adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23979
diff changeset
944 iteranc = None
24411
5a12ef618c03 adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24410
diff changeset
945 if srcrev is None:
5a12ef618c03 adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24410
diff changeset
946 # wctx case, used by workingfilectx during mergecopy
5a12ef618c03 adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24410
diff changeset
947 revs = [p.rev() for p in self._repo[None].parents()]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
948 inclusive = True # we skipped the real (revless) source
24411
5a12ef618c03 adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24410
diff changeset
949 else:
5a12ef618c03 adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24410
diff changeset
950 revs = [srcrev]
23980
c1ce5442453f _adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23979
diff changeset
951 if memberanc is None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
952 memberanc = iteranc = cl.ancestors(revs, lkr, inclusive=inclusive)
23979
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
953 # check if this linkrev is an ancestor of srcrev
23980
c1ce5442453f _adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23979
diff changeset
954 if lkr not in memberanc:
c1ce5442453f _adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23979
diff changeset
955 if iteranc is None:
24410
86de531e07e1 adjustlinkrev: prepare source revs for ancestry only once
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24407
diff changeset
956 iteranc = cl.ancestors(revs, lkr, inclusive=inclusive)
30289
e81d72b4b0ae adjustlinkrev: remove unnecessary parameters
Jun Wu <quark@fb.com>
parents: 30284
diff changeset
957 fnode = self._filenode
e81d72b4b0ae adjustlinkrev: remove unnecessary parameters
Jun Wu <quark@fb.com>
parents: 30284
diff changeset
958 path = self._path
23980
c1ce5442453f _adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23979
diff changeset
959 for a in iteranc:
40736
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
960 if stoprev is not None and a < stoprev:
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
961 return None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
962 ac = cl.read(a) # get changeset data (we avoid object creation)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
963 if path in ac[3]: # checking the 'files' field.
23979
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
964 # The file has been touched, check if the content is
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
965 # similar to the one we search for.
29943
80be4436e4cc manifest: adds manifestctx.readfast
Durham Goode <durham@fb.com>
parents: 29942
diff changeset
966 if fnode == mfl[ac[0]].readfast().get(path):
23979
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
967 return a
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
968 # In theory, we should never get out of that loop without a result.
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
969 # But if manifest uses a buggy file revision (not children of the
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
970 # one it replaces) we could. Such a buggy situation will likely
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
971 # result is crash somewhere else at to some point.
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
972 return lkr
087603b50889 filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23865
diff changeset
973
40733
8a0136f69027 context: introduce an `isintroducedafter` method and use it in copies
Boris Feld <boris.feld@octobus.net>
parents: 40732
diff changeset
974 def isintroducedafter(self, changelogrev):
8a0136f69027 context: introduce an `isintroducedafter` method and use it in copies
Boris Feld <boris.feld@octobus.net>
parents: 40732
diff changeset
975 """True if a filectx has been introduced after a given floor revision
8a0136f69027 context: introduce an `isintroducedafter` method and use it in copies
Boris Feld <boris.feld@octobus.net>
parents: 40732
diff changeset
976 """
40735
69206452a2ac context: small refactoring of `isintroducedafter`
Boris Feld <boris.feld@octobus.net>
parents: 40734
diff changeset
977 if self.linkrev() >= changelogrev:
69206452a2ac context: small refactoring of `isintroducedafter`
Boris Feld <boris.feld@octobus.net>
parents: 40734
diff changeset
978 return True
40736
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
979 introrev = self._introrev(stoprev=changelogrev)
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
980 if introrev is None:
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
981 return False
40735
69206452a2ac context: small refactoring of `isintroducedafter`
Boris Feld <boris.feld@octobus.net>
parents: 40734
diff changeset
982 return introrev >= changelogrev
40733
8a0136f69027 context: introduce an `isintroducedafter` method and use it in copies
Boris Feld <boris.feld@octobus.net>
parents: 40732
diff changeset
983
23703
aaa76612b3c0 linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23702
diff changeset
984 def introrev(self):
aaa76612b3c0 linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23702
diff changeset
985 """return the rev of the changeset which introduced this file revision
aaa76612b3c0 linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23702
diff changeset
986
aaa76612b3c0 linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23702
diff changeset
987 This method is different from linkrev because it take into account the
aaa76612b3c0 linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23702
diff changeset
988 changeset the filectx was created from. It ensures the returned
aaa76612b3c0 linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23702
diff changeset
989 revision is one of its ancestors. This prevents bugs from
aaa76612b3c0 linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23702
diff changeset
990 'linkrev-shadowing' when a file revision is used by multiple
aaa76612b3c0 linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23702
diff changeset
991 changesets.
aaa76612b3c0 linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23702
diff changeset
992 """
40734
9fa0d6dd1617 context: split `introrev` logic in a sub function
Boris Feld <boris.feld@octobus.net>
parents: 40733
diff changeset
993 return self._introrev()
9fa0d6dd1617 context: split `introrev` logic in a sub function
Boris Feld <boris.feld@octobus.net>
parents: 40733
diff changeset
994
40736
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
995 def _introrev(self, stoprev=None):
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
996 """
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
997 Same as `introrev` but, with an extra argument to limit changelog
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
998 iteration range in some internal usecase.
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
999
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
1000 If `stoprev` is set, the `introrev` will not be searched past that
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
1001 `stoprev` revision and "None" might be returned. This is useful to
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
1002 limit the iteration range.
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
1003 """
40731
f3f4d8537b11 context: spell out the logic around linkrev adjustement starting point
Boris Feld <boris.feld@octobus.net>
parents: 40711
diff changeset
1004 toprev = None
23703
aaa76612b3c0 linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23702
diff changeset
1005 attrs = vars(self)
40731
f3f4d8537b11 context: spell out the logic around linkrev adjustement starting point
Boris Feld <boris.feld@octobus.net>
parents: 40711
diff changeset
1006 if r'_changeid' in attrs:
f3f4d8537b11 context: spell out the logic around linkrev adjustement starting point
Boris Feld <boris.feld@octobus.net>
parents: 40711
diff changeset
1007 # We have a cached value already
f3f4d8537b11 context: spell out the logic around linkrev adjustement starting point
Boris Feld <boris.feld@octobus.net>
parents: 40711
diff changeset
1008 toprev = self._changeid
f3f4d8537b11 context: spell out the logic around linkrev adjustement starting point
Boris Feld <boris.feld@octobus.net>
parents: 40711
diff changeset
1009 elif r'_changectx' in attrs:
f3f4d8537b11 context: spell out the logic around linkrev adjustement starting point
Boris Feld <boris.feld@octobus.net>
parents: 40711
diff changeset
1010 # We know which changelog entry we are coming from
f3f4d8537b11 context: spell out the logic around linkrev adjustement starting point
Boris Feld <boris.feld@octobus.net>
parents: 40711
diff changeset
1011 toprev = self._changectx.rev()
f3f4d8537b11 context: spell out the logic around linkrev adjustement starting point
Boris Feld <boris.feld@octobus.net>
parents: 40711
diff changeset
1012
f3f4d8537b11 context: spell out the logic around linkrev adjustement starting point
Boris Feld <boris.feld@octobus.net>
parents: 40711
diff changeset
1013 if toprev is not None:
40736
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
1014 return self._adjustlinkrev(toprev, inclusive=True, stoprev=stoprev)
40732
aee94f0a36cd context: take advantage of `_descendantrev` in introrev if available
Boris Feld <boris.feld@octobus.net>
parents: 40731
diff changeset
1015 elif r'_descendantrev' in attrs:
40736
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
1016 introrev = self._adjustlinkrev(self._descendantrev, stoprev=stoprev)
40732
aee94f0a36cd context: take advantage of `_descendantrev` in introrev if available
Boris Feld <boris.feld@octobus.net>
parents: 40731
diff changeset
1017 # be nice and cache the result of the computation
40736
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
1018 if introrev is not None:
d98fb3f42f33 context: floor adjustlinkrev graph walk during copy tracing
Boris Feld <boris.feld@octobus.net>
parents: 40735
diff changeset
1019 self._changeid = introrev
40732
aee94f0a36cd context: take advantage of `_descendantrev` in introrev if available
Boris Feld <boris.feld@octobus.net>
parents: 40731
diff changeset
1020 return introrev
40047
50700a025953 context: reverse conditional branch order in introrev
Boris Feld <boris.feld@octobus.net>
parents: 40046
diff changeset
1021 else:
23703
aaa76612b3c0 linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23702
diff changeset
1022 return self.linkrev()
aaa76612b3c0 linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23702
diff changeset
1023
35280
d90c534099b1 filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents: 35130
diff changeset
1024 def introfilectx(self):
d90c534099b1 filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents: 35130
diff changeset
1025 """Return filectx having identical contents, but pointing to the
d90c534099b1 filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents: 35130
diff changeset
1026 changeset revision where this filectx was introduced"""
d90c534099b1 filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents: 35130
diff changeset
1027 introrev = self.introrev()
d90c534099b1 filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents: 35130
diff changeset
1028 if self.rev() == introrev:
d90c534099b1 filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents: 35130
diff changeset
1029 return self
d90c534099b1 filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents: 35130
diff changeset
1030 return self.filectx(self.filenode(), changeid=introrev)
d90c534099b1 filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents: 35130
diff changeset
1031
24816
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1032 def _parentfilectx(self, path, fileid, filelog):
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1033 """create parent filectx keeping ancestry info for _adjustlinkrev()"""
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1034 fctx = filectx(self._repo, path, fileid=fileid, filelog=filelog)
36668
334da951a50b py3: fix some membership tests on linkrev adjustment
Yuya Nishihara <yuya@tcha.org>
parents: 36636
diff changeset
1035 if r'_changeid' in vars(self) or r'_changectx' in vars(self):
24816
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1036 # If self is associated with a changeset (probably explicitly
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1037 # fed), ensure the created filectx is associated with a
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1038 # changeset that is an ancestor of self.changectx.
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1039 # This lets us later use _adjustlinkrev to get a correct link.
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1040 fctx._descendantrev = self.rev()
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1041 fctx._ancestrycontext = getattr(self, '_ancestrycontext', None)
36668
334da951a50b py3: fix some membership tests on linkrev adjustment
Yuya Nishihara <yuya@tcha.org>
parents: 36636
diff changeset
1042 elif r'_descendantrev' in vars(self):
24816
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1043 # Otherwise propagate _descendantrev if we have one associated.
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1044 fctx._descendantrev = self._descendantrev
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1045 fctx._ancestrycontext = getattr(self, '_ancestrycontext', None)
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1046 return fctx
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1047
19605
cf7322cb1c13 basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19604
diff changeset
1048 def parents(self):
22201
269688a398c4 cleanup: fix some list comprehension redefinitions of existing vars
Mads Kiilerich <madski@unity3d.com>
parents: 22192
diff changeset
1049 _path = self._path
19605
cf7322cb1c13 basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19604
diff changeset
1050 fl = self._filelog
23688
20932983d520 filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23687
diff changeset
1051 parents = self._filelog.parents(self._filenode)
20932983d520 filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23687
diff changeset
1052 pl = [(_path, node, fl) for node in parents if node != nullid]
19605
cf7322cb1c13 basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19604
diff changeset
1053
23702
c48924787eaa filectx.parents: enforce changeid of parent to be in own changectx ancestors
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23701
diff changeset
1054 r = fl.renamed(self._filenode)
19605
cf7322cb1c13 basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19604
diff changeset
1055 if r:
23688
20932983d520 filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23687
diff changeset
1056 # - In the simple rename case, both parent are nullid, pl is empty.
20932983d520 filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23687
diff changeset
1057 # - In case of merge, only one of the parent is null id and should
20932983d520 filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23687
diff changeset
1058 # be replaced with the rename information. This parent is -always-
20932983d520 filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23687
diff changeset
1059 # the first one.
20932983d520 filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23687
diff changeset
1060 #
24180
d8e0c591781c spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 24050
diff changeset
1061 # As null id have always been filtered out in the previous list
23688
20932983d520 filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23687
diff changeset
1062 # comprehension, inserting to 0 will always result in "replacing
20932983d520 filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23687
diff changeset
1063 # first nullid parent with rename information.
23699
fe17a6fb220d filectx.parents: also fetch the filelog of rename source too
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23688
diff changeset
1064 pl.insert(0, (r[0], r[1], self._repo.file(r[0])))
19605
cf7322cb1c13 basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19604
diff changeset
1065
24816
8eec040cb65e filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents: 24815
diff changeset
1066 return [self._parentfilectx(path, fnode, l) for path, fnode, l in pl]
19605
cf7322cb1c13 basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19604
diff changeset
1067
19606
284f91230c07 basefilectx: move p1 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19605
diff changeset
1068 def p1(self):
284f91230c07 basefilectx: move p1 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19605
diff changeset
1069 return self.parents()[0]
284f91230c07 basefilectx: move p1 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19605
diff changeset
1070
19607
056a949799ac basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19606
diff changeset
1071 def p2(self):
056a949799ac basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19606
diff changeset
1072 p = self.parents()
056a949799ac basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19606
diff changeset
1073 if len(p) == 2:
056a949799ac basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19606
diff changeset
1074 return p[1]
056a949799ac basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19606
diff changeset
1075 return filectx(self._repo, self._path, fileid=-1, filelog=self._filelog)
056a949799ac basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19606
diff changeset
1076
37068
b235bde38a83 annotate: drop linenumber flag from fctx.annotate() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 36924
diff changeset
1077 def annotate(self, follow=False, skiprevs=None, diffopts=None):
37069
b33b91ca2ec2 annotate: pack line content into annotateline object (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
1078 """Returns a list of annotateline objects for each line in the file
b33b91ca2ec2 annotate: pack line content into annotateline object (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
1079
b33b91ca2ec2 annotate: pack line content into annotateline object (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
1080 - line.fctx is the filectx of the node where that line was last changed
b33b91ca2ec2 annotate: pack line content into annotateline object (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
1081 - line.lineno is the line number at the first appearance in the managed
37068
b235bde38a83 annotate: drop linenumber flag from fctx.annotate() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 36924
diff changeset
1082 file
37069
b33b91ca2ec2 annotate: pack line content into annotateline object (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
1083 - line.text is the data on that line (including newline character)
37068
b235bde38a83 annotate: drop linenumber flag from fctx.annotate() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 36924
diff changeset
1084 """
9097
431462bd8478 fix memory usage of revlog caches by limiting cache size [issue1639]
Matt Mackall <mpm@selenic.com>
parents: 8813
diff changeset
1085 getlog = util.lrucachefunc(lambda x: self._repo.file(x))
3172
5c93dd0ae413 Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents: 3152
diff changeset
1086
5c93dd0ae413 Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents: 3152
diff changeset
1087 def parents(f):
24862
c82d88dfaf59 annotate: always adjust linkrev before walking down to parents (issue4623)
Yuya Nishihara <yuya@tcha.org>
parents: 24818
diff changeset
1088 # Cut _descendantrev here to mitigate the penalty of lazy linkrev
c82d88dfaf59 annotate: always adjust linkrev before walking down to parents (issue4623)
Yuya Nishihara <yuya@tcha.org>
parents: 24818
diff changeset
1089 # adjustment. Otherwise, p._adjustlinkrev() would walk changelog
c82d88dfaf59 annotate: always adjust linkrev before walking down to parents (issue4623)
Yuya Nishihara <yuya@tcha.org>
parents: 24818
diff changeset
1090 # from the topmost introrev (= srcrev) down to p.linkrev() if it
c82d88dfaf59 annotate: always adjust linkrev before walking down to parents (issue4623)
Yuya Nishihara <yuya@tcha.org>
parents: 24818
diff changeset
1091 # isn't an ancestor of the srcrev.
c82d88dfaf59 annotate: always adjust linkrev before walking down to parents (issue4623)
Yuya Nishihara <yuya@tcha.org>
parents: 24818
diff changeset
1092 f._changeid
19292
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 19288
diff changeset
1093 pl = f.parents()
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 19288
diff changeset
1094
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 19288
diff changeset
1095 # Don't return renamed parents if we aren't following.
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 19288
diff changeset
1096 if not follow:
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 19288
diff changeset
1097 pl = [p for p in pl if p.path() == f.path()]
3172
5c93dd0ae413 Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents: 3152
diff changeset
1098
19292
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 19288
diff changeset
1099 # renamed filectx won't have a filelog yet, so set it
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 19288
diff changeset
1100 # from the cache to save time
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 19288
diff changeset
1101 for p in pl:
35874
f61461d2bfd8 context: use native string when peeking in __dict__
Augie Fackler <augie@google.com>
parents: 35725
diff changeset
1102 if not r'_filelog' in p.__dict__:
19292
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 19288
diff changeset
1103 p._filelog = getlog(p.path())
3146
e69a0cbe268e filectx.annotate: return filectx for each line instead of rev
Brendan Cully <brendan@kublai.com>
parents: 3144
diff changeset
1104
19292
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 19288
diff changeset
1105 return pl
3217
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1106
3404
1a437b0f4902 Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents: 3403
diff changeset
1107 # use linkrev to find the first changeset where self appeared
35280
d90c534099b1 filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents: 35130
diff changeset
1108 base = self.introfilectx()
24818
8d7d0bf62f9f annotate: prepare ancestry context of workingfilectx
Yuya Nishihara <yuya@tcha.org>
parents: 24817
diff changeset
1109 if getattr(base, '_ancestrycontext', None) is None:
8d7d0bf62f9f annotate: prepare ancestry context of workingfilectx
Yuya Nishihara <yuya@tcha.org>
parents: 24817
diff changeset
1110 cl = self._repo.changelog
35280
d90c534099b1 filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents: 35130
diff changeset
1111 if base.rev() is None:
24818
8d7d0bf62f9f annotate: prepare ancestry context of workingfilectx
Yuya Nishihara <yuya@tcha.org>
parents: 24817
diff changeset
1112 # wctx is not inclusive, but works because _ancestrycontext
8d7d0bf62f9f annotate: prepare ancestry context of workingfilectx
Yuya Nishihara <yuya@tcha.org>
parents: 24817
diff changeset
1113 # is used to test filelog revisions
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1114 ac = cl.ancestors(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1115 [p.rev() for p in base.parents()], inclusive=True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1116 )
24818
8d7d0bf62f9f annotate: prepare ancestry context of workingfilectx
Yuya Nishihara <yuya@tcha.org>
parents: 24817
diff changeset
1117 else:
35280
d90c534099b1 filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents: 35130
diff changeset
1118 ac = cl.ancestors([base.rev()], inclusive=True)
24407
dd01834a696f annotate: reuse ancestry context when adjusting linkrev (issue4532)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23984
diff changeset
1119 base._ancestrycontext = ac
3404
1a437b0f4902 Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents: 3403
diff changeset
1120
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1121 return dagop.annotate(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1122 base, parents, skiprevs=skiprevs, diffopts=diffopts
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1123 )
3124
4d021b91cb26 filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents: 3123
diff changeset
1124
19610
0670422d58c6 basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19609
diff changeset
1125 def ancestors(self, followfirst=False):
0670422d58c6 basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19609
diff changeset
1126 visit = {}
0670422d58c6 basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19609
diff changeset
1127 c = self
24306
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents: 24300
diff changeset
1128 if followfirst:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents: 24300
diff changeset
1129 cut = 1
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents: 24300
diff changeset
1130 else:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents: 24300
diff changeset
1131 cut = None
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents: 24300
diff changeset
1132
19610
0670422d58c6 basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19609
diff changeset
1133 while True:
0670422d58c6 basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19609
diff changeset
1134 for parent in c.parents()[:cut]:
23981
24b57c3899f8 filectx: use linkrev to sort ancestors
Matt Mackall <mpm@selenic.com>
parents: 23980
diff changeset
1135 visit[(parent.linkrev(), parent.filenode())] = parent
19610
0670422d58c6 basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19609
diff changeset
1136 if not visit:
0670422d58c6 basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19609
diff changeset
1137 break
0670422d58c6 basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19609
diff changeset
1138 c = visit.pop(max(visit))
0670422d58c6 basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19609
diff changeset
1139 yield c
0670422d58c6 basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19609
diff changeset
1140
33919
f488223a87ab context: add `decodeddata()` to basefilectx
Phil Cohen <phillco@fb.com>
parents: 33818
diff changeset
1141 def decodeddata(self):
f488223a87ab context: add `decodeddata()` to basefilectx
Phil Cohen <phillco@fb.com>
parents: 33818
diff changeset
1142 """Returns `data()` after running repository decoding filters.
f488223a87ab context: add `decodeddata()` to basefilectx
Phil Cohen <phillco@fb.com>
parents: 33818
diff changeset
1143
f488223a87ab context: add `decodeddata()` to basefilectx
Phil Cohen <phillco@fb.com>
parents: 33818
diff changeset
1144 This is often equivalent to how the data would be expressed on disk.
f488223a87ab context: add `decodeddata()` to basefilectx
Phil Cohen <phillco@fb.com>
parents: 33818
diff changeset
1145 """
f488223a87ab context: add `decodeddata()` to basefilectx
Phil Cohen <phillco@fb.com>
parents: 33818
diff changeset
1146 return self._repo.wwritedata(self.path(), self.data())
f488223a87ab context: add `decodeddata()` to basefilectx
Phil Cohen <phillco@fb.com>
parents: 33818
diff changeset
1147
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1148
19608
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1149 class filectx(basefilectx):
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1150 """A filecontext object makes access to data related to a particular
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1151 filerevision convenient."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1152
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1153 def __init__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1154 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1155 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1156 path,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1157 changeid=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1158 fileid=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1159 filelog=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1160 changectx=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1161 ):
40063
b6c2543e1dd8 filectx: correct docstring about "changeid"
Martin von Zweigbergk <martinvonz@google.com>
parents: 40062
diff changeset
1162 """changeid must be a revision number, if specified.
19608
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1163 fileid can be a file revision or node."""
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1164 self._repo = repo
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1165 self._path = path
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1166
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1167 assert (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1168 changeid is not None or fileid is not None or changectx is not None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1169 ), b"bad args: changeid=%r, fileid=%r, changectx=%r" % (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1170 changeid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1171 fileid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1172 changectx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1173 )
19608
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1174
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1175 if filelog is not None:
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1176 self._filelog = filelog
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1177
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1178 if changeid is not None:
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1179 self._changeid = changeid
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1180 if changectx is not None:
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1181 self._changectx = changectx
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1182 if fileid is not None:
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1183 self._fileid = fileid
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1184
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1185 @propertycache
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1186 def _changectx(self):
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1187 try:
39958
e1e3d1b498d3 context: reduce dependence of changectx constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 39912
diff changeset
1188 return self._repo[self._changeid]
23687
8f32dcfbc338 context: catch FilteredRepoLookupError instead of RepoLookupError
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23616
diff changeset
1189 except error.FilteredRepoLookupError:
19608
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1190 # Linkrev may point to any revision in the repository. When the
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1191 # repository is filtered this may lead to `filectx` trying to build
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1192 # `changectx` for filtered revision. In such case we fallback to
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1193 # creating `changectx` on the unfiltered version of the reposition.
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1194 # This fallback should not be an issue because `changectx` from
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1195 # `filectx` are not used in complex operations that care about
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1196 # filtering.
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1197 #
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1198 # This fallback is a cheap and dirty fix that prevent several
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1199 # crashes. It does not ensure the behavior is correct. However the
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1200 # behavior was not correct before filtering either and "incorrect
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1201 # behavior" is seen as better as "crash"
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1202 #
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1203 # Linkrevs have several serious troubles with filtering that are
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1204 # complicated to solve. Proper handling of the issue here should be
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1205 # considered when solving linkrev issue are on the table.
39958
e1e3d1b498d3 context: reduce dependence of changectx constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 39912
diff changeset
1206 return self._repo.unfiltered()[self._changeid]
19608
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1207
23770
50f0096a7346 filectx: fix annotate to not directly instantiate filectx
Durham Goode <durham@fb.com>
parents: 23757
diff changeset
1208 def filectx(self, fileid, changeid=None):
19608
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1209 '''opens an arbitrary revision of the file without
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1210 opening a new filelog'''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1211 return filectx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1212 self._repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1213 self._path,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1214 fileid=fileid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1215 filelog=self._filelog,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1216 changeid=changeid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1217 )
19608
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1218
30743
2df983125d37 revlog: add 'raw' argument to revision and _addrevision
Remi Chaintron <remi@fb.com>
parents: 30718
diff changeset
1219 def rawdata(self):
42785
e75981b7ce84 rawdata: update callers in context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42731
diff changeset
1220 return self._filelog.rawdata(self._filenode)
30743
2df983125d37 revlog: add 'raw' argument to revision and _addrevision
Remi Chaintron <remi@fb.com>
parents: 30718
diff changeset
1221
32281
651ee1681964 filectx: add a rawflags method
Jun Wu <quark@fb.com>
parents: 32280
diff changeset
1222 def rawflags(self):
651ee1681964 filectx: add a rawflags method
Jun Wu <quark@fb.com>
parents: 32280
diff changeset
1223 """low-level revlog flags"""
651ee1681964 filectx: add a rawflags method
Jun Wu <quark@fb.com>
parents: 32280
diff changeset
1224 return self._filelog.flags(self._filerev)
651ee1681964 filectx: add a rawflags method
Jun Wu <quark@fb.com>
parents: 32280
diff changeset
1225
19608
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1226 def data(self):
22932
d81792872984 context: handle censored data in an on-disk file context based on config
Mike Edgar <adgar@google.com>
parents: 22916
diff changeset
1227 try:
d81792872984 context: handle censored data in an on-disk file context based on config
Mike Edgar <adgar@google.com>
parents: 22916
diff changeset
1228 return self._filelog.read(self._filenode)
d81792872984 context: handle censored data in an on-disk file context based on config
Mike Edgar <adgar@google.com>
parents: 22916
diff changeset
1229 except error.CensoredNodeError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1230 if self._repo.ui.config(b"censor", b"policy") == b"ignore":
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1231 return b""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1232 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1233 _(b"censored node: %s") % short(self._filenode),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1234 hint=_(b"set censor.policy to ignore errors"),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1235 )
22932
d81792872984 context: handle censored data in an on-disk file context based on config
Mike Edgar <adgar@google.com>
parents: 22916
diff changeset
1236
19608
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1237 def size(self):
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1238 return self._filelog.size(self._filerev)
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1239
32279
c38c15d4ce48 filectx: make renamed a property cache
Jun Wu <quark@fb.com>
parents: 32278
diff changeset
1240 @propertycache
c38c15d4ce48 filectx: make renamed a property cache
Jun Wu <quark@fb.com>
parents: 32278
diff changeset
1241 def _copied(self):
19608
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1242 """check if file was actually renamed in this changeset revision
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1243
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1244 If rename logged in file revision, we report copy for changeset only
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1245 if file revisions linkrev points back to the changeset in question
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1246 or both changeset parents contain different file revisions.
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1247 """
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1248
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1249 renamed = self._filelog.renamed(self._filenode)
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1250 if not renamed:
39726
7375a9ab0149 filectx: fix return of renamed
Sean Farley <sean@farley.io>
parents: 39592
diff changeset
1251 return None
19608
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1252
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1253 if self.rev() == self.linkrev():
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1254 return renamed
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1255
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1256 name = self.path()
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1257 fnode = self._filenode
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1258 for p in self._changectx.parents():
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1259 try:
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1260 if fnode == p.filenode(name):
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1261 return None
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1262 except error.LookupError:
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1263 pass
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1264 return renamed
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1265
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1266 def children(self):
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1267 # hard for renames
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1268 c = self._filelog.children(self._filenode)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1269 return [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1270 filectx(self._repo, self._path, fileid=x, filelog=self._filelog)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1271 for x in c
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1272 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1273
19608
896193a9cab4 basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19607
diff changeset
1274
19733
51988f008df3 context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents: 19705
diff changeset
1275 class committablectx(basectx):
51988f008df3 context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents: 19705
diff changeset
1276 """A committablectx object provides common functionality for a context that
19664
61dcb2aa7378 commitablectx: add a class that will be used as a parent of mutable contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19663
diff changeset
1277 wants the ability to commit, e.g. workingctx or memctx."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1278
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1279 def __init__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1280 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1281 repo,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1282 text=b"",
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1283 user=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1284 date=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1285 extra=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1286 changes=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1287 branch=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1288 ):
37177
fbe34945220d context: set repo property in basectx
Martin von Zweigbergk <martinvonz@google.com>
parents: 37176
diff changeset
1289 super(committablectx, self).__init__(repo)
3217
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1290 self._rev = None
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1291 self._node = None
6709
f84f507c53d3 context: let workingctx.date(), .user() and description() be overriden
Patrick Mezard <pmezard@gmail.com>
parents: 6708
diff changeset
1292 self._text = text
6718
4386a7706828 Fix commit date (issue1193)
Christian Ebert <blacktrash@gmx.net>
parents: 6715
diff changeset
1293 if date:
36636
c6061cadb400 util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents: 36441
diff changeset
1294 self._date = dateutil.parsedate(date)
6817
cf319797d61c minor status fixups
Matt Mackall <mpm@selenic.com>
parents: 6809
diff changeset
1295 if user:
cf319797d61c minor status fixups
Matt Mackall <mpm@selenic.com>
parents: 6809
diff changeset
1296 self._user = user
6707
02bad34230a2 localrepo: hide commit() file selection behind workingctx
Patrick Mezard <pmezard@gmail.com>
parents: 6705
diff changeset
1297 if changes:
21592
16f62b4203b1 committablectx: simplify caching the status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21590
diff changeset
1298 self._status = changes
3217
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1299
6708
7566f00a3979 localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents: 6707
diff changeset
1300 self._extra = {}
7566f00a3979 localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents: 6707
diff changeset
1301 if extra:
7566f00a3979 localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents: 6707
diff changeset
1302 self._extra = extra.copy()
42323
df2f22befdc8 context: let caller pass in branch to committablectx.__init__()
Martin von Zweigbergk <martinvonz@google.com>
parents: 42322
diff changeset
1303 if branch is not None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1304 self._extra[b'branch'] = encoding.fromlocal(branch)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1305 if not self._extra.get(b'branch'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1306 self._extra[b'branch'] = b'default'
6708
7566f00a3979 localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents: 6707
diff changeset
1307
32666
1df98fc923d4 py3: implement __bytes__ for committablectx
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32636
diff changeset
1308 def __bytes__(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1309 return bytes(self._parents[0]) + b"+"
19666
09459edfb48b commitablectx: move __str__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19665
diff changeset
1310
33038
ce96efec8112 py3: add utility to forward __str__() to __bytes__()
Yuya Nishihara <yuya@tcha.org>
parents: 33035
diff changeset
1311 __str__ = encoding.strmethod(__bytes__)
ce96efec8112 py3: add utility to forward __str__() to __bytes__()
Yuya Nishihara <yuya@tcha.org>
parents: 33035
diff changeset
1312
19667
40040e4015f9 commitablectx: move __nonzero__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19666
diff changeset
1313 def __nonzero__(self):
40040e4015f9 commitablectx: move __nonzero__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19666
diff changeset
1314 return True
40040e4015f9 commitablectx: move __nonzero__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19666
diff changeset
1315
31483
413b44003462 py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31473
diff changeset
1316 __bool__ = __nonzero__
413b44003462 py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31473
diff changeset
1317
15337
cf5f9df6406b windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents: 14674
diff changeset
1318 @propertycache
19672
375986c02539 commitablectx: move _status from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19671
diff changeset
1319 def _status(self):
21592
16f62b4203b1 committablectx: simplify caching the status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21590
diff changeset
1320 return self._repo.status()
19672
375986c02539 commitablectx: move _status from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19671
diff changeset
1321
19674
ec5b2e2b947f commitablectx: move _user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19673
diff changeset
1322 @propertycache
ec5b2e2b947f commitablectx: move _user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19673
diff changeset
1323 def _user(self):
ec5b2e2b947f commitablectx: move _user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19673
diff changeset
1324 return self._repo.ui.username()
ec5b2e2b947f commitablectx: move _user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19673
diff changeset
1325
19676
103525f36337 commitablectx: move _date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19675
diff changeset
1326 @propertycache
103525f36337 commitablectx: move _date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19675
diff changeset
1327 def _date(self):
32447
3e2e179ef031 devel: add a config field to force dates to timestamp 0
Boris Feld <boris.feld@octobus.net>
parents: 32439
diff changeset
1328 ui = self._repo.ui
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1329 date = ui.configdate(b'devel', b'default-date')
32447
3e2e179ef031 devel: add a config field to force dates to timestamp 0
Boris Feld <boris.feld@octobus.net>
parents: 32439
diff changeset
1330 if date is None:
36636
c6061cadb400 util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents: 36441
diff changeset
1331 date = dateutil.makedate()
32447
3e2e179ef031 devel: add a config field to force dates to timestamp 0
Boris Feld <boris.feld@octobus.net>
parents: 32439
diff changeset
1332 return date
19676
103525f36337 commitablectx: move _date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19675
diff changeset
1333
21587
02a8612ddec2 committablectx: add subrev method to return None
Sean Farley <sean.michael.farley@gmail.com>
parents: 21586
diff changeset
1334 def subrev(self, subpath):
02a8612ddec2 committablectx: add subrev method to return None
Sean Farley <sean.michael.farley@gmail.com>
parents: 21586
diff changeset
1335 return None
02a8612ddec2 committablectx: add subrev method to return None
Sean Farley <sean.michael.farley@gmail.com>
parents: 21586
diff changeset
1336
24719
11e8fec00234 committablectx: override manifestnode() to return None
Yuya Nishihara <yuya@tcha.org>
parents: 24646
diff changeset
1337 def manifestnode(self):
11e8fec00234 committablectx: override manifestnode() to return None
Yuya Nishihara <yuya@tcha.org>
parents: 24646
diff changeset
1338 return None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1339
19675
84249d49f37c commitablectx: move user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19674
diff changeset
1340 def user(self):
84249d49f37c commitablectx: move user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19674
diff changeset
1341 return self._user or self._repo.ui.username()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1342
19677
e11415510352 commitablectx: move date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19676
diff changeset
1343 def date(self):
e11415510352 commitablectx: move date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19676
diff changeset
1344 return self._date
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1345
19678
897c2dbc0256 commitablectx: move description from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19677
diff changeset
1346 def description(self):
897c2dbc0256 commitablectx: move description from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19677
diff changeset
1347 return self._text
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1348
19679
f21804f1582e commitablectx: move files from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19678
diff changeset
1349 def files(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1350 return sorted(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1351 self._status.modified + self._status.added + self._status.removed
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1352 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1353
41798
2ba96fca8528 committablectx: move status-related methods closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 41785
diff changeset
1354 def modified(self):
2ba96fca8528 committablectx: move status-related methods closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 41785
diff changeset
1355 return self._status.modified
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1356
41798
2ba96fca8528 committablectx: move status-related methods closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 41785
diff changeset
1357 def added(self):
2ba96fca8528 committablectx: move status-related methods closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 41785
diff changeset
1358 return self._status.added
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1359
41798
2ba96fca8528 committablectx: move status-related methods closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 41785
diff changeset
1360 def removed(self):
2ba96fca8528 committablectx: move status-related methods closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 41785
diff changeset
1361 return self._status.removed
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1362
41798
2ba96fca8528 committablectx: move status-related methods closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 41785
diff changeset
1363 def deleted(self):
2ba96fca8528 committablectx: move status-related methods closer together
Martin von Zweigbergk <martinvonz@google.com>
parents: 41785
diff changeset
1364 return self._status.deleted
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1365
42396
65fa61ca20af context: add ctx.files{modified,added,removed}() methods
Martin von Zweigbergk <martinvonz@google.com>
parents: 42345
diff changeset
1366 filesmodified = modified
65fa61ca20af context: add ctx.files{modified,added,removed}() methods
Martin von Zweigbergk <martinvonz@google.com>
parents: 42345
diff changeset
1367 filesadded = added
65fa61ca20af context: add ctx.files{modified,added,removed}() methods
Martin von Zweigbergk <martinvonz@google.com>
parents: 42345
diff changeset
1368 filesremoved = removed
65fa61ca20af context: add ctx.files{modified,added,removed}() methods
Martin von Zweigbergk <martinvonz@google.com>
parents: 42345
diff changeset
1369
19687
54b3b4821bfb commitablectx: move branch from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19686
diff changeset
1370 def branch(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1371 return encoding.tolocal(self._extra[b'branch'])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1372
19688
21e1068109a7 commitablectx: move closesbranch from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19687
diff changeset
1373 def closesbranch(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1374 return b'close' in self._extra
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1375
19689
8dbb66f339f3 commitablectx: move extra from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19688
diff changeset
1376 def extra(self):
8dbb66f339f3 commitablectx: move extra from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19688
diff changeset
1377 return self._extra
19680
fc33fcfa08f2 commitablectx: move modified from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19679
diff changeset
1378
34681
4dc8a2ee0f4f context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents: 34556
diff changeset
1379 def isinmemory(self):
4dc8a2ee0f4f context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents: 34556
diff changeset
1380 return False
4dc8a2ee0f4f context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents: 34556
diff changeset
1381
19690
65ff9fd67d8d commitablectx: move tags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19689
diff changeset
1382 def tags(self):
25688
24cda1dd45ff workingctx: don't report the tags for its parents
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
1383 return []
19690
65ff9fd67d8d commitablectx: move tags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19689
diff changeset
1384
19691
33ae2052d924 commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19690
diff changeset
1385 def bookmarks(self):
33ae2052d924 commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19690
diff changeset
1386 b = []
33ae2052d924 commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19690
diff changeset
1387 for p in self.parents():
33ae2052d924 commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19690
diff changeset
1388 b.extend(p.bookmarks())
33ae2052d924 commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19690
diff changeset
1389 return b
33ae2052d924 commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19690
diff changeset
1390
19692
594f4d2b0ce9 commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19691
diff changeset
1391 def phase(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1392 phase = phases.draft # default phase to draft
19692
594f4d2b0ce9 commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19691
diff changeset
1393 for p in self.parents():
594f4d2b0ce9 commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19691
diff changeset
1394 phase = max(phase, p.phase())
594f4d2b0ce9 commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19691
diff changeset
1395 return phase
594f4d2b0ce9 commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19691
diff changeset
1396
19693
56ba14d4bc02 commitablectx: move hidden from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19692
diff changeset
1397 def hidden(self):
56ba14d4bc02 commitablectx: move hidden from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19692
diff changeset
1398 return False
56ba14d4bc02 commitablectx: move hidden from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19692
diff changeset
1399
19694
ba4c01c34df9 commitablectx: move children from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19693
diff changeset
1400 def children(self):
ba4c01c34df9 commitablectx: move children from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19693
diff changeset
1401 return []
ba4c01c34df9 commitablectx: move children from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19693
diff changeset
1402
19696
210cc42a8ac2 commitablectx: move ancestor from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19695
diff changeset
1403 def ancestor(self, c2):
22389
94f77624dbb5 comments: describe ancestor consistently - avoid 'least common ancestor'
Mads Kiilerich <madski@unity3d.com>
parents: 22313
diff changeset
1404 """return the "best" ancestor context of self and c2"""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1405 return self._parents[0].ancestor(c2) # punt on two parents for now
19696
210cc42a8ac2 commitablectx: move ancestor from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19695
diff changeset
1406
19698
8d4a8f4eb404 commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19697
diff changeset
1407 def ancestors(self):
23616
11a160547d7f context: return dirstate parents in workingctx.ancestors()
Durham Goode <durham@fb.com>
parents: 23603
diff changeset
1408 for p in self._parents:
11a160547d7f context: return dirstate parents in workingctx.ancestors()
Durham Goode <durham@fb.com>
parents: 23603
diff changeset
1409 yield p
19698
8d4a8f4eb404 commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19697
diff changeset
1410 for a in self._repo.changelog.ancestors(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1411 [p.rev() for p in self._parents]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1412 ):
39958
e1e3d1b498d3 context: reduce dependence of changectx constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 39912
diff changeset
1413 yield self._repo[a]
19698
8d4a8f4eb404 commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19697
diff changeset
1414
19699
9fbc193b2358 commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19698
diff changeset
1415 def markcommitted(self, node):
9fbc193b2358 commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19698
diff changeset
1416 """Perform post-commit cleanup necessary after committing this ctx
9fbc193b2358 commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19698
diff changeset
1417
9fbc193b2358 commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19698
diff changeset
1418 Specifically, this updates backing stores this working context
9fbc193b2358 commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19698
diff changeset
1419 wraps to reflect the fact that the changes reflected by this
9fbc193b2358 commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19698
diff changeset
1420 workingctx have been committed. For example, it marks
9fbc193b2358 commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19698
diff changeset
1421 modified and added files as normal in the dirstate.
9fbc193b2358 commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19698
diff changeset
1422
9fbc193b2358 commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19698
diff changeset
1423 """
9fbc193b2358 commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19698
diff changeset
1424
32633
bf728e72a219 context: move dirty() to committablectx
Sean Farley <sean@farley.io>
parents: 32632
diff changeset
1425 def dirty(self, missing=False, merge=True, branch=True):
bf728e72a219 context: move dirty() to committablectx
Sean Farley <sean@farley.io>
parents: 32632
diff changeset
1426 return False
bf728e72a219 context: move dirty() to committablectx
Sean Farley <sean@farley.io>
parents: 32632
diff changeset
1427
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1428
19733
51988f008df3 context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents: 19705
diff changeset
1429 class workingctx(committablectx):
19671
367e95bba6e8 commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19670
diff changeset
1430 """A workingctx object makes access to data related to
367e95bba6e8 commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19670
diff changeset
1431 the current working directory convenient.
367e95bba6e8 commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19670
diff changeset
1432 date - any valid date string or (unixtime, offset), or None.
367e95bba6e8 commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19670
diff changeset
1433 user - username string, or None.
367e95bba6e8 commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19670
diff changeset
1434 extra - a dictionary of extra values, or None.
367e95bba6e8 commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19670
diff changeset
1435 changes - a list of file lists as returned by localrepo.status()
367e95bba6e8 commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19670
diff changeset
1436 or None to use the repository status.
367e95bba6e8 commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19670
diff changeset
1437 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1438
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1439 def __init__(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1440 self, repo, text=b"", user=None, date=None, extra=None, changes=None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1441 ):
42324
62bb49a1d05d context: default to using branch from dirstate only in workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42323
diff changeset
1442 branch = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1443 if not extra or b'branch' not in extra:
42324
62bb49a1d05d context: default to using branch from dirstate only in workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42323
diff changeset
1444 try:
62bb49a1d05d context: default to using branch from dirstate only in workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42323
diff changeset
1445 branch = repo.dirstate.branch()
62bb49a1d05d context: default to using branch from dirstate only in workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42323
diff changeset
1446 except UnicodeDecodeError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1447 raise error.Abort(_(b'branch name not in UTF-8!'))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1448 super(workingctx, self).__init__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1449 repo, text, user, date, extra, changes, branch=branch
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1450 )
19671
367e95bba6e8 commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19670
diff changeset
1451
14129
81e6d42b3228 context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents: 14004
diff changeset
1452 def __iter__(self):
81e6d42b3228 context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents: 14004
diff changeset
1453 d = self._repo.dirstate
81e6d42b3228 context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents: 14004
diff changeset
1454 for f in d:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1455 if d[f] != b'r':
14129
81e6d42b3228 context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents: 14004
diff changeset
1456 yield f
81e6d42b3228 context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents: 14004
diff changeset
1457
21845
04f5b5e3792e committablectx: move __contains__ into workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21844
diff changeset
1458 def __contains__(self, key):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1459 return self._repo.dirstate[key] not in b"?r"
21845
04f5b5e3792e committablectx: move __contains__ into workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21844
diff changeset
1460
25590
183965a00c76 context: override workingctx.hex() to avoid a crash
Matt Harbison <matt_harbison@yahoo.com>
parents: 25465
diff changeset
1461 def hex(self):
41972
21cc92fea2aa context: use wdirhex constant instead of calculating it
Martin von Zweigbergk <martinvonz@google.com>
parents: 41954
diff changeset
1462 return wdirhex
25590
183965a00c76 context: override workingctx.hex() to avoid a crash
Matt Harbison <matt_harbison@yahoo.com>
parents: 25465
diff changeset
1463
8157
77c5877a668c context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents: 8151
diff changeset
1464 @propertycache
7368
595ba2537d4f context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7367
diff changeset
1465 def _parents(self):
595ba2537d4f context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7367
diff changeset
1466 p = self._repo.dirstate.parents()
595ba2537d4f context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7367
diff changeset
1467 if p[1] == nullid:
595ba2537d4f context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7367
diff changeset
1468 p = p[:-1]
39960
43d3b09b3e5a repo: move unfiltered-repo optimization to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 39959
diff changeset
1469 # use unfiltered repo to delay/avoid loading obsmarkers
43d3b09b3e5a repo: move unfiltered-repo optimization to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 39959
diff changeset
1470 unfi = self._repo.unfiltered()
43d3b09b3e5a repo: move unfiltered-repo optimization to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 39959
diff changeset
1471 return [changectx(self._repo, unfi.changelog.rev(n), n) for n in p]
3217
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1472
37447
067e8d1178a2 workingctx: build _manifest on filenode() or flags() request
Yuya Nishihara <yuya@tcha.org>
parents: 37391
diff changeset
1473 def _fileinfo(self, path):
067e8d1178a2 workingctx: build _manifest on filenode() or flags() request
Yuya Nishihara <yuya@tcha.org>
parents: 37391
diff changeset
1474 # populate __dict__['_manifest'] as workingctx has no _manifestdelta
067e8d1178a2 workingctx: build _manifest on filenode() or flags() request
Yuya Nishihara <yuya@tcha.org>
parents: 37391
diff changeset
1475 self._manifest
067e8d1178a2 workingctx: build _manifest on filenode() or flags() request
Yuya Nishihara <yuya@tcha.org>
parents: 37391
diff changeset
1476 return super(workingctx, self)._fileinfo(path)
067e8d1178a2 workingctx: build _manifest on filenode() or flags() request
Yuya Nishihara <yuya@tcha.org>
parents: 37391
diff changeset
1477
42319
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1478 def _buildflagfunc(self):
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1479 # Create a fallback function for getting file flags when the
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1480 # filesystem doesn't support them
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1481
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1482 copiesget = self._repo.dirstate.copies().get
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1483 parents = self.parents()
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1484 if len(parents) < 2:
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1485 # when we have one parent, it's easy: copy from parent
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1486 man = parents[0].manifest()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1487
42319
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1488 def func(f):
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1489 f = copiesget(f, f)
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1490 return man.flags(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1491
42319
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1492 else:
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1493 # merges are tricky: we try to reconstruct the unstored
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1494 # result from the merge (issue1802)
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1495 p1, p2 = parents
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1496 pa = p1.ancestor(p2)
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1497 m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest()
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1498
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1499 def func(f):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1500 f = copiesget(f, f) # may be wrong for merges with copies
42319
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1501 fl1, fl2, fla = m1.flags(f), m2.flags(f), ma.flags(f)
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1502 if fl1 == fl2:
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1503 return fl1
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1504 if fl1 == fla:
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1505 return fl2
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1506 if fl2 == fla:
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1507 return fl1
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1508 return b'' # punt for conflicts
42319
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1509
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1510 return func
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1511
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1512 @propertycache
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1513 def _flagfunc(self):
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1514 return self._repo.dirstate.flagfunc(self._buildflagfunc)
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1515
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1516 def flags(self, path):
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1517 if r'_manifest' in self.__dict__:
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1518 try:
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1519 return self._manifest.flags(path)
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1520 except KeyError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1521 return b''
42319
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1522
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1523 try:
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1524 return self._flagfunc(path)
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1525 except OSError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1526 return b''
42319
491855ea9d62 context: move flags overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42318
diff changeset
1527
3966
b4eaa68dea1b context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3965
diff changeset
1528 def filectx(self, path, filelog=None):
3217
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1529 """get a file context from the working directory"""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1530 return workingfilectx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1531 self._repo, path, workingctx=self, filelog=filelog
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1532 )
3217
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1533
16491
bfe89d65d651 update: make --check abort with dirty subrepos
Patrick Mezard <patrick@mezard.eu>
parents: 16410
diff changeset
1534 def dirty(self, missing=False, merge=True, branch=True):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1535 b"check whether a working directory is modified"
11110
22f5ad0b5857 subrepo: dirtiness checks should iterate over subrepos
Edouard Gomez <ed.gomez@free.fr>
parents: 11106
diff changeset
1536 # check subrepos first
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18252
diff changeset
1537 for s in sorted(self.substate):
33364
bf2daeddd42b subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents: 33353
diff changeset
1538 if self.sub(s).dirty(missing=missing):
11110
22f5ad0b5857 subrepo: dirtiness checks should iterate over subrepos
Edouard Gomez <ed.gomez@free.fr>
parents: 11106
diff changeset
1539 return True
22f5ad0b5857 subrepo: dirtiness checks should iterate over subrepos
Edouard Gomez <ed.gomez@free.fr>
parents: 11106
diff changeset
1540 # check current working dir
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1541 return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1542 (merge and self.p2())
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1543 or (branch and self.branch() != self.p1().branch())
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1544 or self.modified()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1545 or self.added()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1546 or self.removed()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1547 or (missing and self.deleted())
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1548 )
8717
e8de59577257 context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents: 8528
diff changeset
1549
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1550 def add(self, list, prefix=b""):
27809
37a75d69eb43 with: use context manager for wlock in workingctx.add
Bryan O'Sullivan <bryano@fb.com>
parents: 27749
diff changeset
1551 with self._repo.wlock():
37a75d69eb43 with: use context manager for wlock in workingctx.add
Bryan O'Sullivan <bryano@fb.com>
parents: 27749
diff changeset
1552 ui, ds = self._repo.ui, self._repo.dirstate
33501
7008f6819002 context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents: 33499
diff changeset
1553 uipath = lambda f: ds.pathto(pathutil.join(prefix, f))
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1554 rejected = []
19900
7c21e3398931 context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19734
diff changeset
1555 lstat = self._repo.wvfs.lstat
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1556 for f in list:
33501
7008f6819002 context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents: 33499
diff changeset
1557 # ds.pathto() returns an absolute file when this is invoked from
7008f6819002 context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents: 33499
diff changeset
1558 # the keyword extension. That gets flagged as non-portable on
7008f6819002 context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents: 33499
diff changeset
1559 # Windows, since it contains the drive letter and colon.
7008f6819002 context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents: 33499
diff changeset
1560 scmutil.checkportable(ui, os.path.join(prefix, f))
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1561 try:
19900
7c21e3398931 context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19734
diff changeset
1562 st = lstat(f)
14004
97ed99d1f419 eliminate various naked except clauses
Idan Kamara <idankk86@gmail.com>
parents: 13962
diff changeset
1563 except OSError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1564 ui.warn(_(b"%s does not exist!\n") % uipath(f))
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1565 rejected.append(f)
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1566 continue
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1567 limit = ui.configbytes(b'ui', b'large-file-limit')
38601
a936d1368fc5 ui: make the large file warning limit fully configurable
Joerg Sonnenberger <joerg@bec.de>
parents: 38590
diff changeset
1568 if limit != 0 and st.st_size > limit:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1569 ui.warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1570 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1571 b"%s: up to %d MB of RAM may be required "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1572 b"to manage this file\n"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1573 b"(use 'hg revert %s' to cancel the "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1574 b"pending addition)\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1575 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1576 % (f, 3 * st.st_size // 1000000, uipath(f))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1577 )
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1578 if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1579 ui.warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1580 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1581 b"%s not added: only files and symlinks "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1582 b"supported currently\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1583 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1584 % uipath(f)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1585 )
19900
7c21e3398931 context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19734
diff changeset
1586 rejected.append(f)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1587 elif ds[f] in b'amn':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1588 ui.warn(_(b"%s already tracked!\n") % uipath(f))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1589 elif ds[f] == b'r':
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1590 ds.normallookup(f)
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1591 else:
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1592 ds.add(f)
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1593 return rejected
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1594
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1595 def forget(self, files, prefix=b""):
27810
8c81975fe145 with: use context manager for wlock in workingctx.forget
Bryan O'Sullivan <bryano@fb.com>
parents: 27809
diff changeset
1596 with self._repo.wlock():
33501
7008f6819002 context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents: 33499
diff changeset
1597 ds = self._repo.dirstate
7008f6819002 context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents: 33499
diff changeset
1598 uipath = lambda f: ds.pathto(pathutil.join(prefix, f))
15912
2bd54ffaa27e forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents: 15895
diff changeset
1599 rejected = []
14435
5f6090e559fa context: make forget work like commands.forget
Matt Mackall <mpm@selenic.com>
parents: 14434
diff changeset
1600 for f in files:
41625
fbd4ce55bcbd context: replace repeated "self._repo.dirstate" by "ds" variable
Martin von Zweigbergk <martinvonz@google.com>
parents: 41624
diff changeset
1601 if f not in ds:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1602 self._repo.ui.warn(_(b"%s not tracked!\n") % uipath(f))
15912
2bd54ffaa27e forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents: 15895
diff changeset
1603 rejected.append(f)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1604 elif ds[f] != b'a':
41625
fbd4ce55bcbd context: replace repeated "self._repo.dirstate" by "ds" variable
Martin von Zweigbergk <martinvonz@google.com>
parents: 41624
diff changeset
1605 ds.remove(f)
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1606 else:
41625
fbd4ce55bcbd context: replace repeated "self._repo.dirstate" by "ds" variable
Martin von Zweigbergk <martinvonz@google.com>
parents: 41624
diff changeset
1607 ds.drop(f)
15912
2bd54ffaa27e forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents: 15895
diff changeset
1608 return rejected
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1609
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1610 def copy(self, source, dest):
19902
12a8bdd97b4f context: use "vfs.lstat()" to examine target path instead of "os.path.*"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19901
diff changeset
1611 try:
12a8bdd97b4f context: use "vfs.lstat()" to examine target path instead of "os.path.*"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19901
diff changeset
1612 st = self._repo.wvfs.lstat(dest)
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25600
diff changeset
1613 except OSError as err:
19902
12a8bdd97b4f context: use "vfs.lstat()" to examine target path instead of "os.path.*"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19901
diff changeset
1614 if err.errno != errno.ENOENT:
12a8bdd97b4f context: use "vfs.lstat()" to examine target path instead of "os.path.*"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19901
diff changeset
1615 raise
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1616 self._repo.ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1617 _(b"%s does not exist!\n") % self._repo.dirstate.pathto(dest)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1618 )
19902
12a8bdd97b4f context: use "vfs.lstat()" to examine target path instead of "os.path.*"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19901
diff changeset
1619 return
12a8bdd97b4f context: use "vfs.lstat()" to examine target path instead of "os.path.*"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19901
diff changeset
1620 if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1621 self._repo.ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1622 _(b"copy failed: %s is not a file or a " b"symbolic link\n")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1623 % self._repo.dirstate.pathto(dest)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1624 )
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1625 else:
27812
28d0c0ef327b with: use context manager for wlock in copy
Bryan O'Sullivan <bryano@fb.com>
parents: 27811
diff changeset
1626 with self._repo.wlock():
41625
fbd4ce55bcbd context: replace repeated "self._repo.dirstate" by "ds" variable
Martin von Zweigbergk <martinvonz@google.com>
parents: 41624
diff changeset
1627 ds = self._repo.dirstate
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1628 if ds[dest] in b'?':
41625
fbd4ce55bcbd context: replace repeated "self._repo.dirstate" by "ds" variable
Martin von Zweigbergk <martinvonz@google.com>
parents: 41624
diff changeset
1629 ds.add(dest)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1630 elif ds[dest] in b'r':
41625
fbd4ce55bcbd context: replace repeated "self._repo.dirstate" by "ds" variable
Martin von Zweigbergk <martinvonz@google.com>
parents: 41624
diff changeset
1631 ds.normallookup(dest)
fbd4ce55bcbd context: replace repeated "self._repo.dirstate" by "ds" variable
Martin von Zweigbergk <martinvonz@google.com>
parents: 41624
diff changeset
1632 ds.copy(source, dest)
11303
a1aad8333864 move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 11151
diff changeset
1633
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1634 def match(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1635 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1636 pats=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1637 include=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1638 exclude=None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1639 default=b'glob',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1640 listsubrepos=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1641 badfn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1642 ):
24790
baa11dde8c0e match: add a subclass for dirstate normalizing of the matched patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24776
diff changeset
1643 r = self._repo
baa11dde8c0e match: add a subclass for dirstate normalizing of the matched patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24776
diff changeset
1644
baa11dde8c0e match: add a subclass for dirstate normalizing of the matched patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24776
diff changeset
1645 # Only a case insensitive filesystem needs magic to translate user input
baa11dde8c0e match: add a subclass for dirstate normalizing of the matched patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24776
diff changeset
1646 # to actual case in the filesystem.
32439
284b18303f61 match: replace icasefsmatch() function by flag to regular match()
Martin von Zweigbergk <martinvonz@google.com>
parents: 32433
diff changeset
1647 icasefs = not util.fscasesensitive(r.root)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1648 return matchmod.match(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1649 r.root,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1650 r.getcwd(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1651 pats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1652 include,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1653 exclude,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1654 default,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1655 auditor=r.auditor,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1656 ctx=self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1657 listsubrepos=listsubrepos,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1658 badfn=badfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1659 icasefs=icasefs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1660 )
24790
baa11dde8c0e match: add a subclass for dirstate normalizing of the matched patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24776
diff changeset
1661
21393
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1662 def _filtersuspectsymlink(self, files):
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1663 if not files or self._repo.dirstate._checklink:
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1664 return files
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1665
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1666 # Symlink placeholders may get non-symlink-like contents
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1667 # via user error or dereferencing by NFS or Samba servers,
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1668 # so we filter out any placeholders that don't look like a
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1669 # symlink
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1670 sane = []
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1671 for f in files:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1672 if self.flags(f) == b'l':
21393
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1673 d = self[f].data()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1674 if (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1675 d == b''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1676 or len(d) >= 1024
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1677 or b'\n' in d
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1678 or stringutil.binary(d)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1679 ):
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1680 self._repo.ui.debug(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1681 b'ignoring suspect symlink placeholder' b' "%s"\n' % f
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1682 )
21393
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1683 continue
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1684 sane.append(f)
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1685 return sane
a45af4da0421 localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21238
diff changeset
1686
21395
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1687 def _checklookup(self, files):
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1688 # check for any possibly clean files
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1689 if not files:
32141
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1690 return [], [], []
21395
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1691
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1692 modified = []
32141
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1693 deleted = []
21395
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1694 fixup = []
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1695 pctx = self._parents[0]
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1696 # do a full compare of any files that might have changed
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1697 for f in sorted(files):
32141
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1698 try:
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1699 # This will return True for a file that got replaced by a
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1700 # directory in the interim, but fixing that is pretty hard.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1701 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1702 f not in pctx
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1703 or self.flags(f) != pctx.flags(f)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1704 or pctx[f].cmp(self[f])
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1705 ):
32141
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1706 modified.append(f)
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1707 else:
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1708 fixup.append(f)
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1709 except (IOError, OSError):
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1710 # A file become inaccessible in between? Mark it as deleted,
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1711 # matching dirstate behavior (issue5584).
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1712 # The dirstate has more complex behavior around whether a
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1713 # missing file matches a directory, etc, but we don't need to
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1714 # bother with that: if f has made it to this point, we're sure
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1715 # it's in the dirstate.
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1716 deleted.append(f)
21395
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1717
32831
add613cddcb6 workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents: 32801
diff changeset
1718 return modified, deleted, fixup
add613cddcb6 workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents: 32801
diff changeset
1719
32832
6d73b7ff8f92 workingctx: also pass status tuple into poststatusfixup
Siddharth Agarwal <sid0@fb.com>
parents: 32831
diff changeset
1720 def _poststatusfixup(self, status, fixup):
32831
add613cddcb6 workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents: 32801
diff changeset
1721 """update dirstate for files that are actually clean"""
32833
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1722 poststatus = self._repo.postdsstatus()
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1723 if fixup or poststatus:
21395
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1724 try:
32772
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32748
diff changeset
1725 oldid = self._repo.dirstate.identity()
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32748
diff changeset
1726
21395
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1727 # updating the dirstate is optional
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1728 # so we don't wait on the lock
21990
48e32c2c499b context: call normal on the right object
Siddharth Agarwal <sid0@fb.com>
parents: 21973
diff changeset
1729 # wlock can invalidate the dirstate, so cache normal _after_
48e32c2c499b context: call normal on the right object
Siddharth Agarwal <sid0@fb.com>
parents: 21973
diff changeset
1730 # taking the lock
27813
ff20fe74e5c6 with: use context manager for wlock in checklookup
Bryan O'Sullivan <bryano@fb.com>
parents: 27812
diff changeset
1731 with self._repo.wlock(False):
32772
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32748
diff changeset
1732 if self._repo.dirstate.identity() == oldid:
32833
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1733 if fixup:
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1734 normal = self._repo.dirstate.normal
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1735 for f in fixup:
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1736 normal(f)
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1737 # write changes out explicitly, because nesting
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1738 # wlock at runtime may prevent 'wlock.release()'
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1739 # after this block from doing so for subsequent
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1740 # changing files
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1741 tr = self._repo.currenttransaction()
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1742 self._repo.dirstate.write(tr)
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1743
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1744 if poststatus:
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1745 for ps in poststatus:
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1746 ps(self, status)
32772
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32748
diff changeset
1747 else:
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32748
diff changeset
1748 # in this case, writing changes out breaks
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32748
diff changeset
1749 # consistency, because .hg/dirstate was
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32748
diff changeset
1750 # already changed simultaneously after last
dc7efa2826e4 context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32748
diff changeset
1751 # caching (see also issue5584 for detail)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1752 self._repo.ui.debug(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1753 b'skip updating dirstate: ' b'identity mismatch\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1754 )
21395
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1755 except error.LockError:
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1756 pass
32833
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1757 finally:
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1758 # Even if the wlock couldn't be grabbed, clear out the list.
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32832
diff changeset
1759 self._repo.clearpostdsstatus()
21395
f251b92d9ed9 localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents: 21393
diff changeset
1760
33955
e43264525ce5 context: remove unnecessary default values for matchers (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33954
diff changeset
1761 def _dirstatestatus(self, match, ignored=False, clean=False, unknown=False):
21397
38743c59f3f8 context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21396
diff changeset
1762 '''Gets the status from the dirstate -- internal use only.'''
38743c59f3f8 context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21396
diff changeset
1763 subrepos = []
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1764 if b'.hgsub' in self:
21397
38743c59f3f8 context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21396
diff changeset
1765 subrepos = sorted(self.substate)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1766 cmp, s = self._repo.dirstate.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1767 match, subrepos, ignored=ignored, clean=clean, unknown=unknown
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1768 )
21397
38743c59f3f8 context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21396
diff changeset
1769
38743c59f3f8 context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21396
diff changeset
1770 # check for any possibly clean files
32831
add613cddcb6 workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents: 32801
diff changeset
1771 fixup = []
21397
38743c59f3f8 context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21396
diff changeset
1772 if cmp:
32141
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1773 modified2, deleted2, fixup = self._checklookup(cmp)
23303
3f269bd4826c context.status: avoid de- and reconstructing status tuple
Martin von Zweigbergk <martinvonz@google.com>
parents: 23302
diff changeset
1774 s.modified.extend(modified2)
32141
c850f0ed54c1 status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents: 32069
diff changeset
1775 s.deleted.extend(deleted2)
21397
38743c59f3f8 context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21396
diff changeset
1776
34351
ac0cd81e2f83 dirstate: use keyword arguments to clarify status()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents: 34350
diff changeset
1777 if fixup and clean:
23303
3f269bd4826c context.status: avoid de- and reconstructing status tuple
Martin von Zweigbergk <martinvonz@google.com>
parents: 23302
diff changeset
1778 s.clean.extend(fixup)
21397
38743c59f3f8 context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21396
diff changeset
1779
32832
6d73b7ff8f92 workingctx: also pass status tuple into poststatusfixup
Siddharth Agarwal <sid0@fb.com>
parents: 32831
diff changeset
1780 self._poststatusfixup(s, fixup)
32831
add613cddcb6 workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents: 32801
diff changeset
1781
23776
70bf92b87410 status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents: 23770
diff changeset
1782 if match.always():
70bf92b87410 status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents: 23770
diff changeset
1783 # cache for performance
70bf92b87410 status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents: 23770
diff changeset
1784 if s.unknown or s.ignored or s.clean:
70bf92b87410 status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents: 23770
diff changeset
1785 # "_status" is cached with list*=False in the normal route
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1786 self._status = scmutil.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1787 s.modified, s.added, s.removed, s.deleted, [], [], []
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1788 )
23776
70bf92b87410 status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents: 23770
diff changeset
1789 else:
70bf92b87410 status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents: 23770
diff changeset
1790 self._status = s
70bf92b87410 status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents: 23770
diff changeset
1791
23303
3f269bd4826c context.status: avoid de- and reconstructing status tuple
Martin von Zweigbergk <martinvonz@google.com>
parents: 23302
diff changeset
1792 return s
21397
38743c59f3f8 context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents: 21396
diff changeset
1793
31269
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1794 @propertycache
42318
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1795 def _copies(self):
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1796 p1copies = {}
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1797 p2copies = {}
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1798 parents = self._repo.dirstate.parents()
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1799 p1manifest = self._repo[parents[0]].manifest()
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1800 p2manifest = self._repo[parents[1]].manifest()
42865
2b869a515ba6 context: filter out invalid copies from workingctx.p[12]copies()
Martin von Zweigbergk <martinvonz@google.com>
parents: 42785
diff changeset
1801 changedset = set(self.added()) | set(self.modified())
42318
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1802 narrowmatch = self._repo.narrowmatch()
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1803 for dst, src in self._repo.dirstate.copies().items():
42865
2b869a515ba6 context: filter out invalid copies from workingctx.p[12]copies()
Martin von Zweigbergk <martinvonz@google.com>
parents: 42785
diff changeset
1804 if dst not in changedset or not narrowmatch(dst):
42318
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1805 continue
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1806 if src in p1manifest:
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1807 p1copies[dst] = src
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1808 elif src in p2manifest:
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1809 p2copies[dst] = src
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1810 return p1copies, p2copies
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1811
a13b30555ffb context: reuse changectx._copies() in all but workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42317
diff changeset
1812 @propertycache
31269
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1813 def _manifest(self):
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1814 """generate a manifest corresponding to the values in self._status
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1815
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1816 This reuse the file nodeid from parent, but we use special node
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1817 identifiers for added and modified files. This is used by manifests
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1818 merge to see that files are different and by update logic to avoid
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1819 deleting newly added files.
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1820 """
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1821 return self._buildstatusmanifest(self._status)
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1822
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1823 def _buildstatusmanifest(self, status):
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1824 """Builds a manifest that includes the given status results."""
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1825 parents = self.parents()
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1826
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1827 man = parents[0].manifest().copy()
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1828
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1829 ff = self._flagfunc
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1830 for i, l in (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1831 (addednodeid, status.added),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1832 (modifiednodeid, status.modified),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1833 ):
31269
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1834 for f in l:
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1835 man[f] = i
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1836 try:
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1837 man.setflag(f, ff(f))
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1838 except OSError:
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1839 pass
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1840
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1841 for f in status.deleted + status.removed:
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1842 if f in man:
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1843 del man[f]
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1844
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1845 return man
6a9d0d24fdb4 context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents: 31268
diff changeset
1846
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1847 def _buildstatus(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1848 self, other, s, match, listignored, listclean, listunknown
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1849 ):
21480
d19f491e5d5b workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents: 21477
diff changeset
1850 """build a status with respect to another context
d19f491e5d5b workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents: 21477
diff changeset
1851
d19f491e5d5b workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents: 21477
diff changeset
1852 This includes logic for maintaining the fast path of status when
d19f491e5d5b workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents: 21477
diff changeset
1853 comparing the working directory against its parent, which is to skip
d19f491e5d5b workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents: 21477
diff changeset
1854 building a new manifest if self (working directory) is not comparing
d19f491e5d5b workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents: 21477
diff changeset
1855 against its parent (repo['.']).
d19f491e5d5b workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents: 21477
diff changeset
1856 """
23239
9fbb50444d55 context.status: call _dirstatestatus() from within _buildstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 23238
diff changeset
1857 s = self._dirstatestatus(match, listignored, listclean, listunknown)
23543
4dd8a6a1240d spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23410
diff changeset
1858 # Filter out symlinks that, in the case of FAT32 and NTFS filesystems,
23242
18168938e1c1 context.status: only filter suspect symlinks in the dirstate status
Martin von Zweigbergk <martinvonz@google.com>
parents: 23241
diff changeset
1859 # might have accidentally ended up with the entire contents of the file
23543
4dd8a6a1240d spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23410
diff changeset
1860 # they are supposed to be linking to.
23302
24f67ad49da7 context.status: make _dirstatestatus() return an status tuple
Martin von Zweigbergk <martinvonz@google.com>
parents: 23301
diff changeset
1861 s.modified[:] = self._filtersuspectsymlink(s.modified)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1862 if other != self._repo[b'.']:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1863 s = super(workingctx, self)._buildstatus(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1864 other, s, match, listignored, listclean, listunknown
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1865 )
21480
d19f491e5d5b workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents: 21477
diff changeset
1866 return s
d19f491e5d5b workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents: 21477
diff changeset
1867
23237
98f41a2f8fba context.status: remove unused arguments from _matchstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 23236
diff changeset
1868 def _matchstatus(self, other, match):
21482
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1869 """override the match method with a filter for directory patterns
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1870
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1871 We use inheritance to customize the match.bad method only in cases of
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1872 workingctx since it belongs only to the working directory when
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1873 comparing against the parent changeset.
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1874
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1875 If we aren't comparing against the working directory's parent, then we
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1876 just use the default match object sent to us.
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1877 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1878 if other != self._repo[b'.']:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1879
21482
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1880 def bad(f, msg):
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1881 # 'f' may be a directory pattern from 'match.files()',
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1882 # so 'f not in ctx1' is not enough
24326
637da5711122 manifest: have context use self.hasdir()
Drew Gottlieb <drgott@google.com>
parents: 24325
diff changeset
1883 if f not in other and not other.hasdir(f):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1884 self._repo.ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1885 b'%s: %s\n' % (self._repo.dirstate.pathto(f), msg)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1886 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1887
21482
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1888 match.bad = bad
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1889 return match
869a28d016e9 workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents: 21481
diff changeset
1890
42320
4fbfc893e6b9 context: move walk() and match() overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42319
diff changeset
1891 def walk(self, match):
4fbfc893e6b9 context: move walk() and match() overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42319
diff changeset
1892 '''Generates matching file names.'''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1893 return sorted(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1894 self._repo.dirstate.walk(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1895 self._repo.narrowmatch(match),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1896 subrepos=sorted(self.substate),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1897 unknown=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1898 ignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1899 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1900 )
42320
4fbfc893e6b9 context: move walk() and match() overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42319
diff changeset
1901
4fbfc893e6b9 context: move walk() and match() overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42319
diff changeset
1902 def matches(self, match):
4fbfc893e6b9 context: move walk() and match() overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42319
diff changeset
1903 match = self._repo.narrowmatch(match)
4fbfc893e6b9 context: move walk() and match() overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42319
diff changeset
1904 ds = self._repo.dirstate
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1905 return sorted(f for f in ds.matches(match) if ds[f] != b'r')
42320
4fbfc893e6b9 context: move walk() and match() overrides from committablectx to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42319
diff changeset
1906
33353
160efb559f67 sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33283
diff changeset
1907 def markcommitted(self, node):
42322
fdd4d668ceb5 context: move contents of committablectx.markcommitted() to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42320
diff changeset
1908 with self._repo.dirstate.parentchange():
fdd4d668ceb5 context: move contents of committablectx.markcommitted() to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42320
diff changeset
1909 for f in self.modified() + self.added():
fdd4d668ceb5 context: move contents of committablectx.markcommitted() to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42320
diff changeset
1910 self._repo.dirstate.normal(f)
fdd4d668ceb5 context: move contents of committablectx.markcommitted() to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42320
diff changeset
1911 for f in self.removed():
fdd4d668ceb5 context: move contents of committablectx.markcommitted() to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42320
diff changeset
1912 self._repo.dirstate.drop(f)
fdd4d668ceb5 context: move contents of committablectx.markcommitted() to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42320
diff changeset
1913 self._repo.dirstate.setparents(node)
fdd4d668ceb5 context: move contents of committablectx.markcommitted() to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42320
diff changeset
1914
fdd4d668ceb5 context: move contents of committablectx.markcommitted() to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42320
diff changeset
1915 # write changes out explicitly, because nesting wlock at
fdd4d668ceb5 context: move contents of committablectx.markcommitted() to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42320
diff changeset
1916 # runtime may prevent 'wlock.release()' in 'repo.commit()'
fdd4d668ceb5 context: move contents of committablectx.markcommitted() to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42320
diff changeset
1917 # from immediately doing so for subsequent changing files
fdd4d668ceb5 context: move contents of committablectx.markcommitted() to workingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42320
diff changeset
1918 self._repo.dirstate.write(self._repo.currenttransaction())
33353
160efb559f67 sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33283
diff changeset
1919
160efb559f67 sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33283
diff changeset
1920 sparse.aftercommit(self._repo, node)
160efb559f67 sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33283
diff changeset
1921
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1922
19733
51988f008df3 context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents: 19705
diff changeset
1923 class committablefilectx(basefilectx):
51988f008df3 context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents: 19705
diff changeset
1924 """A committablefilectx provides common functionality for a file context
51988f008df3 context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents: 19705
diff changeset
1925 that wants the ability to commit, e.g. workingfilectx or memfilectx."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1926
19701
f0f8380ec516 commitablefilectx: add a class that will be used for mutable file contexts
Sean Farley <sean.michael.farley@gmail.com>
parents: 19700
diff changeset
1927 def __init__(self, repo, path, filelog=None, ctx=None):
3217
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1928 self._repo = repo
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1929 self._path = path
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1930 self._changeid = None
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1931 self._filerev = self._filenode = None
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1932
19149
921b64e1f7b9 filecontext: use 'is not None' to check for filelog existence
Durham Goode <durham@fb.com>
parents: 19061
diff changeset
1933 if filelog is not None:
3217
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1934 self._filelog = filelog
19702
d25fdd4c2fd1 commitablefilectx: move __init__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19701
diff changeset
1935 if ctx:
d25fdd4c2fd1 commitablefilectx: move __init__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19701
diff changeset
1936 self._changectx = ctx
d25fdd4c2fd1 commitablefilectx: move __init__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19701
diff changeset
1937
19703
d2936bec530b commitablefilectx: move __nonzero__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19702
diff changeset
1938 def __nonzero__(self):
d2936bec530b commitablefilectx: move __nonzero__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19702
diff changeset
1939 return True
d2936bec530b commitablefilectx: move __nonzero__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19702
diff changeset
1940
31483
413b44003462 py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31473
diff changeset
1941 __bool__ = __nonzero__
413b44003462 py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31473
diff changeset
1942
24420
065b886f61c6 committablefilectx: override linkrev() to point to the associated changectx
Yuya Nishihara <yuya@tcha.org>
parents: 24415
diff changeset
1943 def linkrev(self):
065b886f61c6 committablefilectx: override linkrev() to point to the associated changectx
Yuya Nishihara <yuya@tcha.org>
parents: 24415
diff changeset
1944 # linked to self._changectx no matter if file is modified or not
065b886f61c6 committablefilectx: override linkrev() to point to the associated changectx
Yuya Nishihara <yuya@tcha.org>
parents: 24415
diff changeset
1945 return self.rev()
065b886f61c6 committablefilectx: override linkrev() to point to the associated changectx
Yuya Nishihara <yuya@tcha.org>
parents: 24415
diff changeset
1946
41779
c7a843aa4b42 context: move equivalent renamed() implementations to superclass
Martin von Zweigbergk <martinvonz@google.com>
parents: 41778
diff changeset
1947 def renamed(self):
c7a843aa4b42 context: move equivalent renamed() implementations to superclass
Martin von Zweigbergk <martinvonz@google.com>
parents: 41778
diff changeset
1948 path = self.copysource()
c7a843aa4b42 context: move equivalent renamed() implementations to superclass
Martin von Zweigbergk <martinvonz@google.com>
parents: 41778
diff changeset
1949 if not path:
c7a843aa4b42 context: move equivalent renamed() implementations to superclass
Martin von Zweigbergk <martinvonz@google.com>
parents: 41778
diff changeset
1950 return None
c7a843aa4b42 context: move equivalent renamed() implementations to superclass
Martin von Zweigbergk <martinvonz@google.com>
parents: 41778
diff changeset
1951 return path, self._changectx._parents[0]._manifest.get(path, nullid)
c7a843aa4b42 context: move equivalent renamed() implementations to superclass
Martin von Zweigbergk <martinvonz@google.com>
parents: 41778
diff changeset
1952
3217
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1953 def parents(self):
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1954 '''return parent filectxs, following copies if necessary'''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1955
8528
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1956 def filenode(ctx, path):
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1957 return ctx._manifest.get(path, nullid)
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1958
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1959 path = self._path
3217
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1960 fl = self._filelog
8528
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1961 pcl = self._changectx._parents
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1962 renamed = self.renamed()
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1963
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1964 if renamed:
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1965 pl = [renamed + (None,)]
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1966 else:
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1967 pl = [(path, filenode(pcl[0], path), fl)]
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1968
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1969 for pc in pcl[1:]:
4ddffb793d18 workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8527
diff changeset
1970 pl.append((path, filenode(pc, path), fl))
3217
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1971
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1972 return [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1973 self._parentfilectx(p, fileid=n, filelog=l)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1974 for p, n, l in pl
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1975 if n != nullid
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1976 ]
3217
6d98149d70fe contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents: 3216
diff changeset
1977
19705
79792c8ea6da commitablefilectx: move children from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19704
diff changeset
1978 def children(self):
79792c8ea6da commitablefilectx: move children from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19704
diff changeset
1979 return []
79792c8ea6da commitablefilectx: move children from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19704
diff changeset
1980
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1981
19733
51988f008df3 context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents: 19705
diff changeset
1982 class workingfilectx(committablefilectx):
19704
bad0bd99ac96 commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19703
diff changeset
1983 """A workingfilectx object makes access to data related to a particular
bad0bd99ac96 commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19703
diff changeset
1984 file in the working directory convenient."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1985
19704
bad0bd99ac96 commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19703
diff changeset
1986 def __init__(self, repo, path, filelog=None, workingctx=None):
bad0bd99ac96 commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19703
diff changeset
1987 super(workingfilectx, self).__init__(repo, path, filelog, workingctx)
bad0bd99ac96 commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19703
diff changeset
1988
bad0bd99ac96 commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19703
diff changeset
1989 @propertycache
bad0bd99ac96 commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19703
diff changeset
1990 def _changectx(self):
bad0bd99ac96 commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19703
diff changeset
1991 return workingctx(self._repo)
bad0bd99ac96 commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19703
diff changeset
1992
bad0bd99ac96 commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19703
diff changeset
1993 def data(self):
bad0bd99ac96 commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19703
diff changeset
1994 return self._repo.wread(self._path)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
1995
41777
041d829575ed context: add specialized way of getting copy source file only
Martin von Zweigbergk <martinvonz@google.com>
parents: 41775
diff changeset
1996 def copysource(self):
041d829575ed context: add specialized way of getting copy source file only
Martin von Zweigbergk <martinvonz@google.com>
parents: 41775
diff changeset
1997 return self._repo.dirstate.copied(self._path)
19704
bad0bd99ac96 commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 19703
diff changeset
1998
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
1999 def size(self):
19901
4d3ce1646dfc context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19900
diff changeset
2000 return self._repo.wvfs.lstat(self._path).st_size
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2001
42472
87a34c767384 merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 42426
diff changeset
2002 def lstat(self):
87a34c767384 merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 42426
diff changeset
2003 return self._repo.wvfs.lstat(self._path)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2004
3962
2b8825c94c5a add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3961
diff changeset
2005 def date(self):
2b8825c94c5a add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3961
diff changeset
2006 t, tz = self._changectx.date()
2b8825c94c5a add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3961
diff changeset
2007 try:
36789
ffa3026d4196 cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents: 36744
diff changeset
2008 return (self._repo.wvfs.lstat(self._path)[stat.ST_MTIME], tz)
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25600
diff changeset
2009 except OSError as err:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
2010 if err.errno != errno.ENOENT:
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
2011 raise
3962
2b8825c94c5a add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3961
diff changeset
2012 return (t, tz)
3310
0e370798eebf context: add cmp for filectxs
Matt Mackall <mpm@selenic.com>
parents: 3302
diff changeset
2013
33283
634b259079c5 workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents: 33098
diff changeset
2014 def exists(self):
634b259079c5 workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents: 33098
diff changeset
2015 return self._repo.wvfs.exists(self._path)
634b259079c5 workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents: 33098
diff changeset
2016
634b259079c5 workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents: 33098
diff changeset
2017 def lexists(self):
634b259079c5 workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents: 33098
diff changeset
2018 return self._repo.wvfs.lexists(self._path)
634b259079c5 workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents: 33098
diff changeset
2019
33098
eb4c49f55f1f workingfilectx: add audit() as a wrapper for wvfs.audit()
Phil Cohen <phillco@fb.com>
parents: 33097
diff changeset
2020 def audit(self):
eb4c49f55f1f workingfilectx: add audit() as a wrapper for wvfs.audit()
Phil Cohen <phillco@fb.com>
parents: 33097
diff changeset
2021 return self._repo.wvfs.audit(self._path)
eb4c49f55f1f workingfilectx: add audit() as a wrapper for wvfs.audit()
Phil Cohen <phillco@fb.com>
parents: 33097
diff changeset
2022
11702
eb07fbc21e9c filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11605
diff changeset
2023 def cmp(self, fctx):
eb07fbc21e9c filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11605
diff changeset
2024 """compare with other file context
11539
a463e3c50212 cmp: document the fact that we return True if content is different
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11538
diff changeset
2025
11702
eb07fbc21e9c filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11605
diff changeset
2026 returns True if different than fctx.
11539
a463e3c50212 cmp: document the fact that we return True if content is different
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11538
diff changeset
2027 """
17425
e95ec38f86b0 fix wording and not-completely-trivial spelling errors and bad docstrings
Mads Kiilerich <mads@kiilerich.com>
parents: 17424
diff changeset
2028 # fctx should be a filectx (not a workingfilectx)
11703
55a2af02e45c context: reuse filecontext.cmp in workingfilecontext.cmp
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11702
diff changeset
2029 # invert comparison to reuse the same code path
55a2af02e45c context: reuse filecontext.cmp in workingfilecontext.cmp
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11702
diff changeset
2030 return fctx.cmp(self)
6715
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2031
22073
0c48bc3d0eb2 workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22072
diff changeset
2032 def remove(self, ignoremissing=False):
0c48bc3d0eb2 workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22072
diff changeset
2033 """wraps unlink for a repo's working directory"""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2034 rmdir = self._repo.ui.configbool(b'experimental', b'removeemptydirs')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2035 self._repo.wvfs.unlinkpath(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2036 self._path, ignoremissing=ignoremissing, rmdir=rmdir
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2037 )
22073
0c48bc3d0eb2 workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22072
diff changeset
2038
35725
2a7e777c9eed write: add the possibility to pass keyword argument from batchget to vfs
Boris Feld <boris.feld@octobus.net>
parents: 35610
diff changeset
2039 def write(self, data, flags, backgroundclose=False, **kwargs):
22073
0c48bc3d0eb2 workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22072
diff changeset
2040 """wraps repo.wwrite"""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2041 return self._repo.wwrite(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2042 self._path, data, flags, backgroundclose=backgroundclose, **kwargs
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2043 )
22073
0c48bc3d0eb2 workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22072
diff changeset
2044
34787
754b5117622f context: add workingfilectx.markcopied
Phil Cohen <phillco@fb.com>
parents: 34783
diff changeset
2045 def markcopied(self, src):
754b5117622f context: add workingfilectx.markcopied
Phil Cohen <phillco@fb.com>
parents: 34783
diff changeset
2046 """marks this file a copy of `src`"""
42345
313812cbf4ca copies: fix duplicatecopies() with overlay context
Martin von Zweigbergk <martinvonz@google.com>
parents: 42324
diff changeset
2047 self._repo.dirstate.copy(src, self._path)
34787
754b5117622f context: add workingfilectx.markcopied
Phil Cohen <phillco@fb.com>
parents: 34783
diff changeset
2048
34054
65ae54582713 merge: move some of the logic in batchget() to workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34017
diff changeset
2049 def clearunknown(self):
65ae54582713 merge: move some of the logic in batchget() to workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34017
diff changeset
2050 """Removes conflicting items in the working directory so that
65ae54582713 merge: move some of the logic in batchget() to workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34017
diff changeset
2051 ``write()`` can be called successfully.
65ae54582713 merge: move some of the logic in batchget() to workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34017
diff changeset
2052 """
65ae54582713 merge: move some of the logic in batchget() to workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34017
diff changeset
2053 wvfs = self._repo.wvfs
34556
7a8a16f8ea22 context: also consider path conflicts when clearing unknown files
Mark Thomas <mbthomas@fb.com>
parents: 34480
diff changeset
2054 f = self._path
34833
07bbb208a924 context: audit paths before clearing unknown files and dirs
Mark Thomas <mbthomas@fb.com>
parents: 34787
diff changeset
2055 wvfs.audit(f)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2056 if self._repo.ui.configbool(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2057 b'experimental', b'merge.checkpathconflicts'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2058 ):
38775
8c6775e812d8 merge: do not delete untracked files silently (issue5962)
Yuya Nishihara <yuya@tcha.org>
parents: 38761
diff changeset
2059 # remove files under the directory as they should already be
8c6775e812d8 merge: do not delete untracked files silently (issue5962)
Yuya Nishihara <yuya@tcha.org>
parents: 38761
diff changeset
2060 # warned and backed up
8c6775e812d8 merge: do not delete untracked files silently (issue5962)
Yuya Nishihara <yuya@tcha.org>
parents: 38761
diff changeset
2061 if wvfs.isdir(f) and not wvfs.islink(f):
8c6775e812d8 merge: do not delete untracked files silently (issue5962)
Yuya Nishihara <yuya@tcha.org>
parents: 38761
diff changeset
2062 wvfs.rmtree(f, forcibly=True)
37104
656ac240f392 context: skip path conflicts by default when clearing unknown file (issue5776)
Matt Harbison <matt_harbison@yahoo.com>
parents: 37087
diff changeset
2063 for p in reversed(list(util.finddirs(f))):
656ac240f392 context: skip path conflicts by default when clearing unknown file (issue5776)
Matt Harbison <matt_harbison@yahoo.com>
parents: 37087
diff changeset
2064 if wvfs.isfileorlink(p):
656ac240f392 context: skip path conflicts by default when clearing unknown file (issue5776)
Matt Harbison <matt_harbison@yahoo.com>
parents: 37087
diff changeset
2065 wvfs.unlink(p)
656ac240f392 context: skip path conflicts by default when clearing unknown file (issue5776)
Matt Harbison <matt_harbison@yahoo.com>
parents: 37087
diff changeset
2066 break
38775
8c6775e812d8 merge: do not delete untracked files silently (issue5962)
Yuya Nishihara <yuya@tcha.org>
parents: 38761
diff changeset
2067 else:
8c6775e812d8 merge: do not delete untracked files silently (issue5962)
Yuya Nishihara <yuya@tcha.org>
parents: 38761
diff changeset
2068 # don't remove files if path conflicts are not processed
8c6775e812d8 merge: do not delete untracked files silently (issue5962)
Yuya Nishihara <yuya@tcha.org>
parents: 38761
diff changeset
2069 if wvfs.isdir(f) and not wvfs.islink(f):
8c6775e812d8 merge: do not delete untracked files silently (issue5962)
Yuya Nishihara <yuya@tcha.org>
parents: 38761
diff changeset
2070 wvfs.removedirs(f)
34054
65ae54582713 merge: move some of the logic in batchget() to workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34017
diff changeset
2071
33096
873f638fd7db merge: change repo.wvfs.setflags calls to a new wctx[f].setflags function
Phil Cohen <phillco@fb.com>
parents: 33038
diff changeset
2072 def setflags(self, l, x):
873f638fd7db merge: change repo.wvfs.setflags calls to a new wctx[f].setflags function
Phil Cohen <phillco@fb.com>
parents: 33038
diff changeset
2073 self._repo.wvfs.setflags(self._path, l, x)
873f638fd7db merge: change repo.wvfs.setflags calls to a new wctx[f].setflags function
Phil Cohen <phillco@fb.com>
parents: 33038
diff changeset
2074
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2075
35332
8e1386b342f7 overlayworkingctx: inherit from committablectx instead of workingctx
Phil Cohen <phillco@fb.com>
parents: 35331
diff changeset
2076 class overlayworkingctx(committablectx):
8e1386b342f7 overlayworkingctx: inherit from committablectx instead of workingctx
Phil Cohen <phillco@fb.com>
parents: 35331
diff changeset
2077 """Wraps another mutable context with a write-back cache that can be
8e1386b342f7 overlayworkingctx: inherit from committablectx instead of workingctx
Phil Cohen <phillco@fb.com>
parents: 35331
diff changeset
2078 converted into a commit context.
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2079
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2080 self._cache[path] maps to a dict with keys: {
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2081 'exists': bool?
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2082 'date': date?
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2083 'data': str?
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2084 'flags': str?
35302
8b3a636bb341 overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents: 35298
diff changeset
2085 'copied': str? (path or None)
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2086 }
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2087 If `exists` is True, `flags` must be non-None and 'date' is non-None. If it
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2088 is `False`, the file was deleted.
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2089 """
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2090
35298
2f8c476c49fe overlayworkingctx: move _wrappedctx out of the constructor
Phil Cohen <phillco@fb.com>
parents: 35295
diff changeset
2091 def __init__(self, repo):
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2092 super(overlayworkingctx, self).__init__(repo)
35295
307b1689e3f8 overlayworkingctx: make clean() public
Phil Cohen <phillco@fb.com>
parents: 35294
diff changeset
2093 self.clean()
35298
2f8c476c49fe overlayworkingctx: move _wrappedctx out of the constructor
Phil Cohen <phillco@fb.com>
parents: 35295
diff changeset
2094
2f8c476c49fe overlayworkingctx: move _wrappedctx out of the constructor
Phil Cohen <phillco@fb.com>
parents: 35295
diff changeset
2095 def setbase(self, wrappedctx):
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2096 self._wrappedctx = wrappedctx
35298
2f8c476c49fe overlayworkingctx: move _wrappedctx out of the constructor
Phil Cohen <phillco@fb.com>
parents: 35295
diff changeset
2097 self._parents = [wrappedctx]
35336
777cb4497d8d overlayworkingctx: invalidate the manifest cache when changing parents
Phil Cohen <phillco@fb.com>
parents: 35335
diff changeset
2098 # Drop old manifest cache as it is now out of date.
777cb4497d8d overlayworkingctx: invalidate the manifest cache when changing parents
Phil Cohen <phillco@fb.com>
parents: 35335
diff changeset
2099 # This is necessary when, e.g., rebasing several nodes with one
777cb4497d8d overlayworkingctx: invalidate the manifest cache when changing parents
Phil Cohen <phillco@fb.com>
parents: 35335
diff changeset
2100 # ``overlayworkingctx`` (e.g. with --collapse).
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2101 util.clearcachedproperty(self, b'_manifest')
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2102
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2103 def data(self, path):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2104 if self.isdirty(path):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2105 if self._cache[path][b'exists']:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2106 if self._cache[path][b'data'] is not None:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2107 return self._cache[path][b'data']
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2108 else:
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2109 # Must fallback here, too, because we only set flags.
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2110 return self._wrappedctx[path].data()
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2111 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2112 raise error.ProgrammingError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2113 b"No such file or directory: %s" % path
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2114 )
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2115 else:
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2116 return self._wrappedctx[path].data()
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2117
35330
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2118 @propertycache
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2119 def _manifest(self):
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2120 parents = self.parents()
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2121 man = parents[0].manifest().copy()
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2122
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2123 flag = self._flagfunc
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2124 for path in self.added():
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2125 man[path] = addednodeid
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2126 man.setflag(path, flag(path))
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2127 for path in self.modified():
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2128 man[path] = modifiednodeid
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2129 man.setflag(path, flag(path))
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2130 for path in self.removed():
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2131 del man[path]
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2132 return man
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2133
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2134 @propertycache
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2135 def _flagfunc(self):
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2136 def f(path):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2137 return self._cache[path][b'flags']
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2138
35330
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2139 return f
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2140
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2141 def files(self):
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2142 return sorted(self.added() + self.modified() + self.removed())
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2143
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2144 def modified(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2145 return [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2146 f
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2147 for f in self._cache.keys()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2148 if self._cache[f][b'exists'] and self._existsinparent(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2149 ]
35330
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2150
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2151 def added(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2152 return [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2153 f
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2154 for f in self._cache.keys()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2155 if self._cache[f][b'exists'] and not self._existsinparent(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2156 ]
35330
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2157
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2158 def removed(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2159 return [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2160 f
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2161 for f in self._cache.keys()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2162 if not self._cache[f][b'exists'] and self._existsinparent(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2163 ]
35330
2e1c32a9c97b overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents: 35328
diff changeset
2164
41764
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2165 def p1copies(self):
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2166 copies = self._repo._wrappedctx.p1copies().copy()
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2167 narrowmatch = self._repo.narrowmatch()
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2168 for f in self._cache.keys():
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2169 if not narrowmatch(f):
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2170 continue
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2171 copies.pop(f, None) # delete if it exists
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2172 source = self._cache[f][b'copied']
41764
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2173 if source:
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2174 copies[f] = source
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2175 return copies
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2176
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2177 def p2copies(self):
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2178 copies = self._repo._wrappedctx.p2copies().copy()
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2179 narrowmatch = self._repo.narrowmatch()
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2180 for f in self._cache.keys():
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2181 if not narrowmatch(f):
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2182 continue
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2183 copies.pop(f, None) # delete if it exists
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2184 source = self._cache[f][b'copied']
41764
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2185 if source:
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2186 copies[f] = source
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2187 return copies
a4358f7345b4 context: introduce p[12]copies() methods and debugp[12]copies commands
Martin von Zweigbergk <martinvonz@google.com>
parents: 41657
diff changeset
2188
34681
4dc8a2ee0f4f context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents: 34556
diff changeset
2189 def isinmemory(self):
4dc8a2ee0f4f context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents: 34556
diff changeset
2190 return True
4dc8a2ee0f4f context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents: 34556
diff changeset
2191
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2192 def filedate(self, path):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2193 if self.isdirty(path):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2194 return self._cache[path][b'date']
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2195 else:
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2196 return self._wrappedctx[path].date()
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2197
35302
8b3a636bb341 overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents: 35298
diff changeset
2198 def markcopied(self, path, origin):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2199 self._markdirty(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2200 path,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2201 exists=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2202 date=self.filedate(path),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2203 flags=self.flags(path),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2204 copied=origin,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2205 )
35302
8b3a636bb341 overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents: 35298
diff changeset
2206
8b3a636bb341 overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents: 35298
diff changeset
2207 def copydata(self, path):
8b3a636bb341 overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents: 35298
diff changeset
2208 if self.isdirty(path):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2209 return self._cache[path][b'copied']
35302
8b3a636bb341 overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents: 35298
diff changeset
2210 else:
42315
cdcebc897529 overlaycontext: allow calling copydata() on clean context
Martin von Zweigbergk <martinvonz@google.com>
parents: 42156
diff changeset
2211 return None
35302
8b3a636bb341 overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents: 35298
diff changeset
2212
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2213 def flags(self, path):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2214 if self.isdirty(path):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2215 if self._cache[path][b'exists']:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2216 return self._cache[path][b'flags']
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2217 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2218 raise error.ProgrammingError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2219 b"No such file or directory: %s" % self._path
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2220 )
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2221 else:
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2222 return self._wrappedctx[path].flags()
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2223
40456
44c2e80db985 rebase: fix dir/file conflict detection when using in-mem merge
Martin von Zweigbergk <martinvonz@google.com>
parents: 40302
diff changeset
2224 def __contains__(self, key):
44c2e80db985 rebase: fix dir/file conflict detection when using in-mem merge
Martin von Zweigbergk <martinvonz@google.com>
parents: 40302
diff changeset
2225 if key in self._cache:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2226 return self._cache[key][b'exists']
40456
44c2e80db985 rebase: fix dir/file conflict detection when using in-mem merge
Martin von Zweigbergk <martinvonz@google.com>
parents: 40302
diff changeset
2227 return key in self.p1()
44c2e80db985 rebase: fix dir/file conflict detection when using in-mem merge
Martin von Zweigbergk <martinvonz@google.com>
parents: 40302
diff changeset
2228
35304
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2229 def _existsinparent(self, path):
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2230 try:
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2231 # ``commitctx` raises a ``ManifestLookupError`` if a path does not
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2232 # exist, unlike ``workingctx``, which returns a ``workingfilectx``
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2233 # with an ``exists()`` function.
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2234 self._wrappedctx[path]
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2235 return True
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2236 except error.ManifestLookupError:
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2237 return False
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2238
35333
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2239 def _auditconflicts(self, path):
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2240 """Replicates conflict checks done by wvfs.write().
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2241
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2242 Since we never write to the filesystem and never call `applyupdates` in
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2243 IMM, we'll never check that a path is actually writable -- e.g., because
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2244 it adds `a/foo`, but `a` is actually a file in the other commit.
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2245 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2246
35333
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2247 def fail(path, component):
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2248 # p1() is the base and we're receiving "writes" for p2()'s
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2249 # files.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2250 if b'l' in self.p1()[component].flags():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2251 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2252 b"error: %s conflicts with symlink %s "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2253 b"in %d." % (path, component, self.p1().rev())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2254 )
35333
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2255 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2256 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2257 b"error: '%s' conflicts with file '%s' in "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2258 b"%d." % (path, component, self.p1().rev())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2259 )
35333
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2260
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2261 # Test that each new directory to be created to write this path from p2
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2262 # is not a file in p1.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2263 components = path.split(b'/')
38823
e7aa113b14f7 global: use pycompat.xrange()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38816
diff changeset
2264 for i in pycompat.xrange(len(components)):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2265 component = b"/".join(components[0:i])
40456
44c2e80db985 rebase: fix dir/file conflict detection when using in-mem merge
Martin von Zweigbergk <martinvonz@google.com>
parents: 40302
diff changeset
2266 if component in self:
35333
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2267 fail(path, component)
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2268
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2269 # Test the other direction -- that this path from p2 isn't a directory
40461
1c8c54cf9725 rebase: fix path auditing to audit path relative to repo root (issue5818)
Martin von Zweigbergk <martinvonz@google.com>
parents: 40456
diff changeset
2270 # in p1 (test that p1 doesn't have any paths matching `path/*`).
42102
976f069e0ad6 overlayworkingctx: remove misleading trailing slash from directory pattern
Martin von Zweigbergk <martinvonz@google.com>
parents: 42101
diff changeset
2271 match = self.match([path], default=b'path')
35333
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2272 matches = self.p1().manifest().matches(match)
39592
fa4d16daf1be context: don't count deleted files as candidates for path conflicts in IMM
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39319
diff changeset
2273 mfiles = matches.keys()
fa4d16daf1be context: don't count deleted files as candidates for path conflicts in IMM
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39319
diff changeset
2274 if len(mfiles) > 0:
fa4d16daf1be context: don't count deleted files as candidates for path conflicts in IMM
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39319
diff changeset
2275 if len(mfiles) == 1 and mfiles[0] == path:
fa4d16daf1be context: don't count deleted files as candidates for path conflicts in IMM
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39319
diff changeset
2276 return
fa4d16daf1be context: don't count deleted files as candidates for path conflicts in IMM
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39319
diff changeset
2277 # omit the files which are deleted in current IMM wctx
40456
44c2e80db985 rebase: fix dir/file conflict detection when using in-mem merge
Martin von Zweigbergk <martinvonz@google.com>
parents: 40302
diff changeset
2278 mfiles = [m for m in mfiles if m in self]
39592
fa4d16daf1be context: don't count deleted files as candidates for path conflicts in IMM
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39319
diff changeset
2279 if not mfiles:
35333
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2280 return
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2281 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2282 b"error: file '%s' cannot be written because "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2283 b" '%s/' is a directory in %s (containing %d "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2284 b"entries: %s)"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2285 % (path, path, self.p1(), len(mfiles), b', '.join(mfiles))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2286 )
35333
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2287
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2288 def write(self, path, data, flags=b'', **kwargs):
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2289 if data is None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2290 raise error.ProgrammingError(b"data must be non-None")
35333
72fbdd373de8 overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents: 35332
diff changeset
2291 self._auditconflicts(path)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2292 self._markdirty(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2293 path, exists=True, data=data, date=dateutil.makedate(), flags=flags
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2294 )
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2295
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2296 def setflags(self, path, l, x):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2297 flag = b''
39103
2488dcfa71f8 context: safegaurd from 'lx' being passed as file flag in manifest
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 38858
diff changeset
2298 if l:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2299 flag = b'l'
39103
2488dcfa71f8 context: safegaurd from 'lx' being passed as file flag in manifest
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 38858
diff changeset
2300 elif x:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2301 flag = b'x'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2302 self._markdirty(path, exists=True, date=dateutil.makedate(), flags=flag)
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2303
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2304 def remove(self, path):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2305 self._markdirty(path, exists=False)
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2306
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2307 def exists(self, path):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2308 """exists behaves like `lexists`, but needs to follow symlinks and
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2309 return False if they are broken.
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2310 """
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2311 if self.isdirty(path):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2312 # If this path exists and is a symlink, "follow" it by calling
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2313 # exists on the destination path.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2314 if (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2315 self._cache[path][b'exists']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2316 and b'l' in self._cache[path][b'flags']
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2317 ):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2318 return self.exists(self._cache[path][b'data'].strip())
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2319 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2320 return self._cache[path][b'exists']
35304
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2321
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2322 return self._existsinparent(path)
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2323
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2324 def lexists(self, path):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2325 """lexists returns True if the path exists"""
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2326 if self.isdirty(path):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2327 return self._cache[path][b'exists']
35304
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2328
bea46aed1e1b overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents: 35303
diff changeset
2329 return self._existsinparent(path)
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2330
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2331 def size(self, path):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2332 if self.isdirty(path):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2333 if self._cache[path][b'exists']:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2334 return len(self._cache[path][b'data'])
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2335 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2336 raise error.ProgrammingError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2337 b"No such file or directory: %s" % self._path
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2338 )
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2339 return self._wrappedctx[path].size()
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2340
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2341 def tomemctx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2342 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2343 text,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2344 branch=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2345 extra=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2346 date=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2347 parents=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2348 user=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2349 editor=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2350 ):
35334
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2351 """Converts this ``overlayworkingctx`` into a ``memctx`` ready to be
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2352 committed.
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2353
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2354 ``text`` is the commit message.
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2355 ``parents`` (optional) are rev numbers.
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2356 """
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2357 # Default parents to the wrapped contexts' if not passed.
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2358 if parents is None:
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2359 parents = self._wrappedctx.parents()
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2360 if len(parents) == 1:
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2361 parents = (parents[0], None)
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2362
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2363 # ``parents`` is passed as rev numbers; convert to ``commitctxs``.
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2364 if parents[1] is None:
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2365 parents = (self._repo[parents[0]], None)
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2366 else:
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2367 parents = (self._repo[parents[0]], self._repo[parents[1]])
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2368
42317
e79aeb518aa1 overlayworkingctx: don't include added-then-deleted files in memctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 42315
diff changeset
2369 files = self.files()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2370
35334
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2371 def getfile(repo, memctx, path):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2372 if self._cache[path][b'exists']:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2373 return memfilectx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2374 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2375 memctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2376 path,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2377 self._cache[path][b'data'],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2378 b'l' in self._cache[path][b'flags'],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2379 b'x' in self._cache[path][b'flags'],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2380 self._cache[path][b'copied'],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2381 )
35334
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2382 else:
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2383 # Returning None, but including the path in `files`, is
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2384 # necessary for memctx to register a deletion.
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2385 return None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2386
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2387 return memctx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2388 self._repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2389 parents,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2390 text,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2391 files,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2392 getfile,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2393 date=date,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2394 extra=extra,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2395 user=user,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2396 branch=branch,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2397 editor=editor,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2398 )
35334
71edd38c4bb4 overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents: 35333
diff changeset
2399
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2400 def isdirty(self, path):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2401 return path in self._cache
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2402
35328
228916ca12b5 rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents: 35304
diff changeset
2403 def isempty(self):
228916ca12b5 rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents: 35304
diff changeset
2404 # We need to discard any keys that are actually clean before the empty
228916ca12b5 rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents: 35304
diff changeset
2405 # commit check.
228916ca12b5 rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents: 35304
diff changeset
2406 self._compact()
228916ca12b5 rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents: 35304
diff changeset
2407 return len(self._cache) == 0
228916ca12b5 rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents: 35304
diff changeset
2408
35295
307b1689e3f8 overlayworkingctx: make clean() public
Phil Cohen <phillco@fb.com>
parents: 35294
diff changeset
2409 def clean(self):
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2410 self._cache = {}
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2411
35335
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2412 def _compact(self):
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2413 """Removes keys from the cache that are actually clean, by comparing
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2414 them with the underlying context.
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2415
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2416 This can occur during the merge process, e.g. by passing --tool :local
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2417 to resolve a conflict.
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2418 """
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2419 keys = []
41154
f18f665b1424 context: schedule file prefetch before comparing for cleanliness
Kyle Lippincott <spectral@google.com>
parents: 41001
diff changeset
2420 # This won't be perfect, but can help performance significantly when
f18f665b1424 context: schedule file prefetch before comparing for cleanliness
Kyle Lippincott <spectral@google.com>
parents: 41001
diff changeset
2421 # using things like remotefilelog.
f18f665b1424 context: schedule file prefetch before comparing for cleanliness
Kyle Lippincott <spectral@google.com>
parents: 41001
diff changeset
2422 scmutil.prefetchfiles(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2423 self.repo(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2424 [self.p1().rev()],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2425 scmutil.matchfiles(self.repo(), self._cache.keys()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2426 )
41154
f18f665b1424 context: schedule file prefetch before comparing for cleanliness
Kyle Lippincott <spectral@google.com>
parents: 41001
diff changeset
2427
35335
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2428 for path in self._cache.keys():
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2429 cache = self._cache[path]
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2430 try:
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2431 underlying = self._wrappedctx[path]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2432 if (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2433 underlying.data() == cache[b'data']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2434 and underlying.flags() == cache[b'flags']
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2435 ):
35335
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2436 keys.append(path)
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2437 except error.ManifestLookupError:
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2438 # Path not in the underlying manifest (created).
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2439 continue
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2440
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2441 for path in keys:
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2442 del self._cache[path]
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2443 return keys
dc9da4f4f363 overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents: 35334
diff changeset
2444
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2445 def _markdirty(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2446 self, path, exists, data=None, date=None, flags=b'', copied=None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2447 ):
39164
95bd19f60957 overlayworkingctx: fix exception in metadata-only inmemory merges (issue5960)
Kyle Lippincott <spectral@google.com>
parents: 39115
diff changeset
2448 # data not provided, let's see if we already have some; if not, let's
95bd19f60957 overlayworkingctx: fix exception in metadata-only inmemory merges (issue5960)
Kyle Lippincott <spectral@google.com>
parents: 39115
diff changeset
2449 # grab it from our underlying context, so that we always have data if
95bd19f60957 overlayworkingctx: fix exception in metadata-only inmemory merges (issue5960)
Kyle Lippincott <spectral@google.com>
parents: 39115
diff changeset
2450 # the file is marked as existing.
95bd19f60957 overlayworkingctx: fix exception in metadata-only inmemory merges (issue5960)
Kyle Lippincott <spectral@google.com>
parents: 39115
diff changeset
2451 if exists and data is None:
95bd19f60957 overlayworkingctx: fix exception in metadata-only inmemory merges (issue5960)
Kyle Lippincott <spectral@google.com>
parents: 39115
diff changeset
2452 oldentry = self._cache.get(path) or {}
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2453 data = oldentry.get(b'data')
42535
e079e001d536 rebase: fix in-memory rebasing of copy of empty file
Martin von Zweigbergk <martinvonz@google.com>
parents: 42472
diff changeset
2454 if data is None:
e079e001d536 rebase: fix in-memory rebasing of copy of empty file
Martin von Zweigbergk <martinvonz@google.com>
parents: 42472
diff changeset
2455 data = self._wrappedctx[path].data()
39164
95bd19f60957 overlayworkingctx: fix exception in metadata-only inmemory merges (issue5960)
Kyle Lippincott <spectral@google.com>
parents: 39115
diff changeset
2456
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2457 self._cache[path] = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2458 b'exists': exists,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2459 b'data': data,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2460 b'date': date,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2461 b'flags': flags,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2462 b'copied': copied,
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2463 }
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2464
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2465 def filectx(self, path, filelog=None):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2466 return overlayworkingfilectx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2467 self._repo, path, parent=self, filelog=filelog
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2468 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2469
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2470
35332
8e1386b342f7 overlayworkingctx: inherit from committablectx instead of workingctx
Phil Cohen <phillco@fb.com>
parents: 35331
diff changeset
2471 class overlayworkingfilectx(committablefilectx):
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2472 """Wrap a ``workingfilectx`` but intercepts all writes into an in-memory
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2473 cache, which can be flushed through later by calling ``flush()``."""
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2474
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2475 def __init__(self, repo, path, filelog=None, parent=None):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2476 super(overlayworkingfilectx, self).__init__(repo, path, filelog, parent)
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2477 self._repo = repo
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2478 self._parent = parent
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2479 self._path = path
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2480
34783
0c812885586b context: add overlayfilectx.cmp()
Phil Cohen <phillco@fb.com>
parents: 34685
diff changeset
2481 def cmp(self, fctx):
0c812885586b context: add overlayfilectx.cmp()
Phil Cohen <phillco@fb.com>
parents: 34685
diff changeset
2482 return self.data() != fctx.data()
0c812885586b context: add overlayfilectx.cmp()
Phil Cohen <phillco@fb.com>
parents: 34685
diff changeset
2483
35290
010179e21e91 context: switch ctx() use to changectx()
Phil Cohen <phillco@fb.com>
parents: 35280
diff changeset
2484 def changectx(self):
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2485 return self._parent
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2486
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2487 def data(self):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2488 return self._parent.data(self._path)
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2489
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2490 def date(self):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2491 return self._parent.filedate(self._path)
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2492
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2493 def exists(self):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2494 return self.lexists()
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2495
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2496 def lexists(self):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2497 return self._parent.exists(self._path)
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2498
41777
041d829575ed context: add specialized way of getting copy source file only
Martin von Zweigbergk <martinvonz@google.com>
parents: 41775
diff changeset
2499 def copysource(self):
041d829575ed context: add specialized way of getting copy source file only
Martin von Zweigbergk <martinvonz@google.com>
parents: 41775
diff changeset
2500 return self._parent.copydata(self._path)
041d829575ed context: add specialized way of getting copy source file only
Martin von Zweigbergk <martinvonz@google.com>
parents: 41775
diff changeset
2501
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2502 def size(self):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2503 return self._parent.size(self._path)
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2504
35302
8b3a636bb341 overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents: 35298
diff changeset
2505 def markcopied(self, origin):
8b3a636bb341 overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents: 35298
diff changeset
2506 self._parent.markcopied(self._path, origin)
8b3a636bb341 overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents: 35298
diff changeset
2507
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2508 def audit(self):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2509 pass
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2510
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2511 def flags(self):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2512 return self._parent.flags(self._path)
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2513
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2514 def setflags(self, islink, isexec):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2515 return self._parent.setflags(self._path, islink, isexec)
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2516
35725
2a7e777c9eed write: add the possibility to pass keyword argument from batchget to vfs
Boris Feld <boris.feld@octobus.net>
parents: 35610
diff changeset
2517 def write(self, data, flags, backgroundclose=False, **kwargs):
2a7e777c9eed write: add the possibility to pass keyword argument from batchget to vfs
Boris Feld <boris.feld@octobus.net>
parents: 35610
diff changeset
2518 return self._parent.write(self._path, data, flags, **kwargs)
34119
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2519
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2520 def remove(self, ignoremissing=False):
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2521 return self._parent.remove(self._path)
f698bb31bdfb context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents: 34068
diff changeset
2522
35331
baf58e621363 overlayworkingctx: add a no-op ``clearunknown()``
Phil Cohen <phillco@fb.com>
parents: 35330
diff changeset
2523 def clearunknown(self):
baf58e621363 overlayworkingctx: add a no-op ``clearunknown()``
Phil Cohen <phillco@fb.com>
parents: 35330
diff changeset
2524 pass
baf58e621363 overlayworkingctx: add a no-op ``clearunknown()``
Phil Cohen <phillco@fb.com>
parents: 35330
diff changeset
2525
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2526
23710
745e3b485632 context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23709
diff changeset
2527 class workingcommitctx(workingctx):
745e3b485632 context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23709
diff changeset
2528 """A workingcommitctx object makes access to data related to
745e3b485632 context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23709
diff changeset
2529 the revision being committed convenient.
745e3b485632 context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23709
diff changeset
2530
745e3b485632 context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23709
diff changeset
2531 This hides changes in the working directory, if they aren't
745e3b485632 context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23709
diff changeset
2532 committed in this context.
745e3b485632 context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23709
diff changeset
2533 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2534
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2535 def __init__(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2536 self, repo, changes, text=b"", user=None, date=None, extra=None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2537 ):
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2538 super(workingcommitctx, self).__init__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2539 repo, text, user, date, extra, changes
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2540 )
23710
745e3b485632 context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23709
diff changeset
2541
33955
e43264525ce5 context: remove unnecessary default values for matchers (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33954
diff changeset
2542 def _dirstatestatus(self, match, ignored=False, clean=False, unknown=False):
23712
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2543 """Return matched files only in ``self._status``
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2544
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2545 Uncommitted files appear "clean" via this context, even if
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2546 they aren't actually so in the working directory.
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2547 """
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2548 if clean:
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2549 clean = [f for f in self._manifest if f not in self._changedset]
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2550 else:
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2551 clean = []
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2552 return scmutil.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2553 [f for f in self._status.modified if match(f)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2554 [f for f in self._status.added if match(f)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2555 [f for f in self._status.removed if match(f)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2556 [],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2557 [],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2558 [],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2559 clean,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2560 )
23712
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2561
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2562 @propertycache
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2563 def _changedset(self):
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2564 """Return the set of files changed in this context
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2565 """
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2566 changed = set(self._status.modified)
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2567 changed.update(self._status.added)
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2568 changed.update(self._status.removed)
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2569 return changed
bfce25d25c96 context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23711
diff changeset
2570
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2571
27906
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2572 def makecachingfilectxfn(func):
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2573 """Create a filectxfn that caches based on the path.
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2574
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2575 We can't use util.cachefunc because it uses all arguments as the cache
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2576 key and this creates a cycle since the arguments include the repo and
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2577 memctx.
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2578 """
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2579 cache = {}
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2580
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2581 def getfilectx(repo, memctx, path):
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2582 if path not in cache:
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2583 cache[path] = func(repo, memctx, path)
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2584 return cache[path]
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2585
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2586 return getfilectx
c183f7b79541 context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27813
diff changeset
2587
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2588
32783
34be21aa2b26 memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents: 32772
diff changeset
2589 def memfilefromctx(ctx):
34be21aa2b26 memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents: 32772
diff changeset
2590 """Given a context return a memfilectx for ctx[path]
34be21aa2b26 memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents: 32772
diff changeset
2591
34be21aa2b26 memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents: 32772
diff changeset
2592 This is a convenience method for building a memctx based on another
34be21aa2b26 memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents: 32772
diff changeset
2593 context.
34be21aa2b26 memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents: 32772
diff changeset
2594 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2595
32783
34be21aa2b26 memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents: 32772
diff changeset
2596 def getfilectx(repo, memctx, path):
34be21aa2b26 memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents: 32772
diff changeset
2597 fctx = ctx[path]
41994
550a172a603b memctx: rename constructor argument "copied" to "copysource" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41972
diff changeset
2598 copysource = fctx.copysource()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2599 return memfilectx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2600 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2601 memctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2602 path,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2603 fctx.data(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2604 islink=fctx.islink(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2605 isexec=fctx.isexec(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2606 copysource=copysource,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2607 )
32783
34be21aa2b26 memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents: 32772
diff changeset
2608
34be21aa2b26 memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents: 32772
diff changeset
2609 return getfilectx
34be21aa2b26 memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents: 32772
diff changeset
2610
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2611
32784
ec302748edd8 context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents: 32783
diff changeset
2612 def memfilefrompatch(patchstore):
ec302748edd8 context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents: 32783
diff changeset
2613 """Given a patch (e.g. patchstore object) return a memfilectx
ec302748edd8 context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents: 32783
diff changeset
2614
ec302748edd8 context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents: 32783
diff changeset
2615 This is a convenience method for building a memctx based on a patchstore.
ec302748edd8 context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents: 32783
diff changeset
2616 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2617
32784
ec302748edd8 context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents: 32783
diff changeset
2618 def getfilectx(repo, memctx, path):
41994
550a172a603b memctx: rename constructor argument "copied" to "copysource" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41972
diff changeset
2619 data, mode, copysource = patchstore.getfile(path)
32784
ec302748edd8 context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents: 32783
diff changeset
2620 if data is None:
ec302748edd8 context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents: 32783
diff changeset
2621 return None
ec302748edd8 context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents: 32783
diff changeset
2622 islink, isexec = mode
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2623 return memfilectx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2624 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2625 memctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2626 path,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2627 data,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2628 islink=islink,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2629 isexec=isexec,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2630 copysource=copysource,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2631 )
32784
ec302748edd8 context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents: 32783
diff changeset
2632
ec302748edd8 context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents: 32783
diff changeset
2633 return getfilectx
ec302748edd8 context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents: 32783
diff changeset
2634
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2635
21665
d2743be1bb06 memctx: inherit from committablectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21664
diff changeset
2636 class memctx(committablectx):
7077
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2637 """Use memctx to perform in-memory commits via localrepo.commitctx().
6715
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2638
7077
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2639 Revision information is supplied at initialization time while
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2640 related files data and is made available through a callback
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2641 mechanism. 'repo' is the current localrepo, 'parents' is a
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2642 sequence of two parent revisions identifiers (pass None for every
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2643 missing parent), 'text' is the commit message and 'files' lists
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2644 names of files touched by the revision (normalized and relative to
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2645 repository root).
6715
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2646
7077
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2647 filectxfn(repo, memctx, path) is a callable receiving the
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2648 repository, the current memctx object and the normalized path of
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2649 requested file, relative to repository root. It is fired by the
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2650 commit function for every file in 'files', but calls order is
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2651 undefined. If the file is available in the revision being
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2652 committed (updated or added), filectxfn returns a memfilectx
31617
c93cdfa131a8 misc: update descriptions about removed file for filectxfn
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31483
diff changeset
2653 object. If the file was removed, filectxfn return None for recent
c93cdfa131a8 misc: update descriptions about removed file for filectxfn
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31483
diff changeset
2654 Mercurial. Moved files are represented by marking the source file
7077
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2655 removed and the new file added with copy information (see
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2656 memfilectx).
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2657
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2658 user receives the committer name and defaults to current
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2659 repository username, date is the commit date in any format
36636
c6061cadb400 util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents: 36441
diff changeset
2660 supported by dateutil.parsedate() and defaults to current date, extra
7077
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2661 is a dictionary of metadata or is left empty.
6715
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2662 """
22313
d226fe36e362 memctx: allow extensions to determine what filectxfn should do
Siddharth Agarwal <sid0@fb.com>
parents: 22296
diff changeset
2663
d226fe36e362 memctx: allow extensions to determine what filectxfn should do
Siddharth Agarwal <sid0@fb.com>
parents: 22296
diff changeset
2664 # Mercurial <= 3.1 expects the filectxfn to raise IOError for missing files.
d226fe36e362 memctx: allow extensions to determine what filectxfn should do
Siddharth Agarwal <sid0@fb.com>
parents: 22296
diff changeset
2665 # Extensions that need to retain compatibility across Mercurial 3.1 can use
d226fe36e362 memctx: allow extensions to determine what filectxfn should do
Siddharth Agarwal <sid0@fb.com>
parents: 22296
diff changeset
2666 # this field to determine what to do in filectxfn.
d226fe36e362 memctx: allow extensions to determine what filectxfn should do
Siddharth Agarwal <sid0@fb.com>
parents: 22296
diff changeset
2667 _returnnoneformissingfiles = True
d226fe36e362 memctx: allow extensions to determine what filectxfn should do
Siddharth Agarwal <sid0@fb.com>
parents: 22296
diff changeset
2668
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2669 def __init__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2670 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2671 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2672 parents,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2673 text,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2674 files,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2675 filectxfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2676 user=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2677 date=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2678 extra=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2679 branch=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2680 editor=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2681 ):
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2682 super(memctx, self).__init__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2683 repo, text, user, date, extra, branch=branch
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2684 )
6715
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2685 self._rev = None
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2686 self._node = None
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2687 parents = [(p or nullid) for p in parents]
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2688 p1, p2 = parents
37175
05ff1a155a21 memctx: create parent contexts using "repo[p]" syntax
Martin von Zweigbergk <martinvonz@google.com>
parents: 37173
diff changeset
2689 self._parents = [self._repo[p] for p in (p1, p2)]
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8207
diff changeset
2690 files = sorted(set(files))
23587
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2691 self._files = files
21938
c8411fb5dfef memctx: substate needs to be {} instead of None
Sean Farley <sean.michael.farley@gmail.com>
parents: 21895
diff changeset
2692 self.substate = {}
6715
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2693
32785
041d976b662a context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents: 32784
diff changeset
2694 if isinstance(filectxfn, patch.filestore):
32801
448fc659a430 memctx: always use cache for filectxfn
Sean Farley <sean@farley.io>
parents: 32785
diff changeset
2695 filectxfn = memfilefrompatch(filectxfn)
32785
041d976b662a context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents: 32784
diff changeset
2696 elif not callable(filectxfn):
041d976b662a context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents: 32784
diff changeset
2697 # if store is not callable, wrap it in a function
32801
448fc659a430 memctx: always use cache for filectxfn
Sean Farley <sean@farley.io>
parents: 32785
diff changeset
2698 filectxfn = memfilefromctx(filectxfn)
448fc659a430 memctx: always use cache for filectxfn
Sean Farley <sean@farley.io>
parents: 32785
diff changeset
2699
448fc659a430 memctx: always use cache for filectxfn
Sean Farley <sean@farley.io>
parents: 32785
diff changeset
2700 # memoizing increases performance for e.g. vcs convert scenarios.
448fc659a430 memctx: always use cache for filectxfn
Sean Farley <sean@farley.io>
parents: 32785
diff changeset
2701 self._filectxfn = makecachingfilectxfn(filectxfn)
22072
443ef664fb55 memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents: 22055
diff changeset
2702
21238
25d6fdc0294a context: move editor invocation from "makememctx()" to "memctx.__init__()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21203
diff changeset
2703 if editor:
25d6fdc0294a context: move editor invocation from "makememctx()" to "memctx.__init__()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21203
diff changeset
2704 self._text = editor(self._repo, self, [])
25d6fdc0294a context: move editor invocation from "makememctx()" to "memctx.__init__()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21203
diff changeset
2705 self._repo.savecommitmessage(self._text)
25d6fdc0294a context: move editor invocation from "makememctx()" to "memctx.__init__()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21203
diff changeset
2706
6715
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2707 def filectx(self, path, filelog=None):
22296
650b5b6e75ed convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents: 22207
diff changeset
2708 """get a file context from the working directory
650b5b6e75ed convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents: 22207
diff changeset
2709
650b5b6e75ed convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents: 22207
diff changeset
2710 Returns None if file doesn't exist and should be removed."""
6715
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2711 return self._filectxfn(self._repo, self, path)
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2712
11151
c5c190822501 slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents: 11144
diff changeset
2713 def commit(self):
c5c190822501 slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents: 11144
diff changeset
2714 """commit context to the repo"""
c5c190822501 slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents: 11144
diff changeset
2715 return self._repo.commitctx(self)
c5c190822501 slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents: 11144
diff changeset
2716
21835
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2717 @propertycache
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2718 def _manifest(self):
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2719 """generate a manifest based on the return values of filectxfn"""
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2720
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2721 # keep this simple for now; just worry about p1
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2722 pctx = self._parents[0]
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2723 man = pctx.manifest().copy()
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2724
23603
d74eb8d477d5 memctx: calculate manifest more efficiently
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23602
diff changeset
2725 for f in self._status.modified:
39729
a5dafefc4a53 memctx: simplify _manifest with new revlog nodeids
Sean Farley <sean@farley.io>
parents: 39728
diff changeset
2726 man[f] = modifiednodeid
21835
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2727
23588
87a76cff7147 memctx: calculate manifest including newly added files correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23587
diff changeset
2728 for f in self._status.added:
39729
a5dafefc4a53 memctx: simplify _manifest with new revlog nodeids
Sean Farley <sean@farley.io>
parents: 39728
diff changeset
2729 man[f] = addednodeid
23588
87a76cff7147 memctx: calculate manifest including newly added files correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23587
diff changeset
2730
23589
200215cdf7aa memctx: calculate manifest correctly with newly-removed files (issue4470)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23588
diff changeset
2731 for f in self._status.removed:
200215cdf7aa memctx: calculate manifest correctly with newly-removed files (issue4470)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23588
diff changeset
2732 if f in man:
200215cdf7aa memctx: calculate manifest correctly with newly-removed files (issue4470)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23588
diff changeset
2733 del man[f]
21835
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2734
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2735 return man
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2736
23587
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2737 @propertycache
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2738 def _status(self):
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2739 """Calculate exact status from ``files`` specified at construction
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2740 """
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2741 man1 = self.p1().manifest()
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2742 p2 = self._parents[1]
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2743 # "1 < len(self._parents)" can't be used for checking
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2744 # existence of the 2nd parent, because "memctx._parents" is
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2745 # explicitly initialized by the list, of which length is 2.
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2746 if p2.node() != nullid:
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2747 man2 = p2.manifest()
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2748 managing = lambda f: f in man1 or f in man2
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2749 else:
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2750 managing = lambda f: f in man1
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2751
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2752 modified, added, removed = [], [], []
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2753 for f in self._files:
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2754 if not managing(f):
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2755 added.append(f)
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2756 elif self[f]:
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2757 modified.append(f)
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2758 else:
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2759 removed.append(f)
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2760
8063901e56cd memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23584
diff changeset
2761 return scmutil.status(modified, added, removed, [], [], [], [])
21835
b342c3e2518a memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents: 21834
diff changeset
2762
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2763
21688
cc677803bad4 memfilectx: inherit from committablefilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21687
diff changeset
2764 class memfilectx(committablefilectx):
7077
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2765 """memfilectx represents an in-memory file to commit.
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2766
23139
e53f6b72a0e4 spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23110
diff changeset
2767 See memctx and committablefilectx for more details.
6715
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2768 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2769
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2770 def __init__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2771 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2772 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2773 changectx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2774 path,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2775 data,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2776 islink=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2777 isexec=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2778 copysource=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2779 ):
7077
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2780 """
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2781 path is the normalized file path relative to repository root.
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2782 data is the file content as a string.
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2783 islink is True if the file is a symbolic link.
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2784 isexec is True if the file is executable.
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2785 copied is the source file path if current file was copied in the
ccbd39cad3c3 context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents: 7008
diff changeset
2786 revision being committed, or None."""
35407
8a0cac20a1ad memfilectx: make changectx argument mandatory in constructor (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 35362
diff changeset
2787 super(memfilectx, self).__init__(repo, path, None, changectx)
6715
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2788 self._data = data
38761
d558e53cd6b6 context: safegaurd against 'lx' being passed as file flag in manifest
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 38755
diff changeset
2789 if islink:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2790 self._flags = b'l'
38761
d558e53cd6b6 context: safegaurd against 'lx' being passed as file flag in manifest
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 38755
diff changeset
2791 elif isexec:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2792 self._flags = b'x'
38761
d558e53cd6b6 context: safegaurd against 'lx' being passed as file flag in manifest
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 38755
diff changeset
2793 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2794 self._flags = b''
41995
6fef387af1da memfilectx: override copysource() instead of using dummy nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents: 41994
diff changeset
2795 self._copysource = copysource
6fef387af1da memfilectx: override copysource() instead of using dummy nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents: 41994
diff changeset
2796
6fef387af1da memfilectx: override copysource() instead of using dummy nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents: 41994
diff changeset
2797 def copysource(self):
6fef387af1da memfilectx: override copysource() instead of using dummy nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents: 41994
diff changeset
2798 return self._copysource
6715
a3c41abfa828 context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
2799
40470
328557af18eb context: reimplement memfilectx.cmp()
Yuya Nishihara <yuya@tcha.org>
parents: 40461
diff changeset
2800 def cmp(self, fctx):
328557af18eb context: reimplement memfilectx.cmp()
Yuya Nishihara <yuya@tcha.org>
parents: 40461
diff changeset
2801 return self.data() != fctx.data()
328557af18eb context: reimplement memfilectx.cmp()
Yuya Nishihara <yuya@tcha.org>
parents: 40461
diff changeset
2802
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
2803 def data(self):
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
2804 return self._data
22074
fbe967b027bd memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22073
diff changeset
2805
fbe967b027bd memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22073
diff changeset
2806 def remove(self, ignoremissing=False):
fbe967b027bd memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22073
diff changeset
2807 """wraps unlink for a repo's working directory"""
fbe967b027bd memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22073
diff changeset
2808 # need to figure out what to do here
fbe967b027bd memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22073
diff changeset
2809 del self._changectx[self._path]
fbe967b027bd memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22073
diff changeset
2810
35725
2a7e777c9eed write: add the possibility to pass keyword argument from batchget to vfs
Boris Feld <boris.feld@octobus.net>
parents: 35610
diff changeset
2811 def write(self, data, flags, **kwargs):
22074
fbe967b027bd memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22073
diff changeset
2812 """wraps repo.wwrite"""
fbe967b027bd memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents: 22073
diff changeset
2813 self._data = data
30572
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2814
32283
07da778f3b58 filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents: 32282
diff changeset
2815
30572
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2816 class metadataonlyctx(committablectx):
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2817 """Like memctx but it's reusing the manifest of different commit.
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2818 Intended to be used by lightweight operations that are creating
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2819 metadata-only changes.
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2820
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2821 Revision information is supplied at initialization time. 'repo' is the
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2822 current localrepo, 'ctx' is original revision which manifest we're reuisng
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2823 'parents' is a sequence of two parent revisions identifiers (pass None for
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2824 every missing parent), 'text' is the commit.
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2825
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2826 user receives the committer name and defaults to current repository
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2827 username, date is the commit date in any format supported by
36636
c6061cadb400 util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents: 36441
diff changeset
2828 dateutil.parsedate() and defaults to current date, extra is a dictionary of
30572
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2829 metadata or is left empty.
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2830 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2831
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2832 def __init__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2833 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2834 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2835 originalctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2836 parents=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2837 text=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2838 user=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2839 date=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2840 extra=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2841 editor=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2842 ):
34016
becce02036e1 context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents: 33955
diff changeset
2843 if text is None:
becce02036e1 context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents: 33955
diff changeset
2844 text = originalctx.description()
30572
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2845 super(metadataonlyctx, self).__init__(repo, text, user, date, extra)
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2846 self._rev = None
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2847 self._node = None
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2848 self._originalctx = originalctx
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2849 self._manifestnode = originalctx.manifestnode()
34016
becce02036e1 context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents: 33955
diff changeset
2850 if parents is None:
becce02036e1 context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents: 33955
diff changeset
2851 parents = originalctx.parents()
becce02036e1 context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents: 33955
diff changeset
2852 else:
becce02036e1 context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents: 33955
diff changeset
2853 parents = [repo[p] for p in parents if p is not None]
becce02036e1 context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents: 33955
diff changeset
2854 parents = parents[:]
becce02036e1 context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents: 33955
diff changeset
2855 while len(parents) < 2:
becce02036e1 context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents: 33955
diff changeset
2856 parents.append(repo[nullid])
becce02036e1 context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents: 33955
diff changeset
2857 p1, p2 = self._parents = parents
30572
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2858
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2859 # sanity check to ensure that the reused manifest parents are
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2860 # manifests of our commit parents
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2861 mp1, mp2 = self.manifestctx().parents
31840
7973e0a15bd4 metadataonlyctx: replace "changeset()[0]" to "manifestnode()"
Jun Wu <quark@fb.com>
parents: 31668
diff changeset
2862 if p1 != nullid and p1.manifestnode() != mp1:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2863 raise RuntimeError(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2864 r"can't reuse the manifest: its p1 "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2865 r"doesn't match the new ctx p1"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2866 )
31840
7973e0a15bd4 metadataonlyctx: replace "changeset()[0]" to "manifestnode()"
Jun Wu <quark@fb.com>
parents: 31668
diff changeset
2867 if p2 != nullid and p2.manifestnode() != mp2:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2868 raise RuntimeError(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2869 r"can't reuse the manifest: "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2870 r"its p2 doesn't match the new ctx p2"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2871 )
30572
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2872
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2873 self._files = originalctx.files()
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2874 self.substate = {}
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2875
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2876 if editor:
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2877 self._text = editor(self._repo, self, [])
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2878 self._repo.savecommitmessage(self._text)
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2879
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2880 def manifestnode(self):
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2881 return self._manifestnode
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2882
32552
6ae068f801e3 context: do not cache manifestctx
Jun Wu <quark@fb.com>
parents: 32519
diff changeset
2883 @property
30572
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2884 def _manifestctx(self):
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2885 return self._repo.manifestlog[self._manifestnode]
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2886
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2887 def filectx(self, path, filelog=None):
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2888 return self._originalctx.filectx(path, filelog=filelog)
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2889
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2890 def commit(self):
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2891 """commit context to the repo"""
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2892 return self._repo.commitctx(self)
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2893
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2894 @property
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2895 def _manifest(self):
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2896 return self._originalctx.manifest()
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2897
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2898 @propertycache
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2899 def _status(self):
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2900 """Calculate exact status from ``files`` specified in the ``origctx``
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2901 and parents manifests.
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2902 """
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2903 man1 = self.p1().manifest()
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2904 p2 = self._parents[1]
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2905 # "1 < len(self._parents)" can't be used for checking
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2906 # existence of the 2nd parent, because "metadataonlyctx._parents" is
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2907 # explicitly initialized by the list, of which length is 2.
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2908 if p2.node() != nullid:
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2909 man2 = p2.manifest()
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2910 managing = lambda f: f in man1 or f in man2
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2911 else:
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2912 managing = lambda f: f in man1
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2913
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2914 modified, added, removed = [], [], []
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2915 for f in self._files:
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2916 if not managing(f):
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2917 added.append(f)
34017
be814edf3306 metadataonlyctx: don't crash when reusing the manifest with deletions
Jun Wu <quark@fb.com>
parents: 34016
diff changeset
2918 elif f in self:
30572
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2919 modified.append(f)
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2920 else:
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2921 removed.append(f)
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2922
73ce055b169a memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents: 30371
diff changeset
2923 return scmutil.status(modified, added, removed, [], [], [], [])
34068
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2924
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2925
34068
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2926 class arbitraryfilectx(object):
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2927 """Allows you to use filectx-like functions on a file in an arbitrary
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2928 location on disk, possibly not in the working directory.
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2929 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43025
diff changeset
2930
34685
6036e6e205ca context: add a fast-comparision for arbitraryfilectx and workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34681
diff changeset
2931 def __init__(self, path, repo=None):
6036e6e205ca context: add a fast-comparision for arbitraryfilectx and workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34681
diff changeset
2932 # Repo is optional because contrib/simplemerge uses this class.
6036e6e205ca context: add a fast-comparision for arbitraryfilectx and workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34681
diff changeset
2933 self._repo = repo
34068
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2934 self._path = path
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2935
34685
6036e6e205ca context: add a fast-comparision for arbitraryfilectx and workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34681
diff changeset
2936 def cmp(self, fctx):
34835
14c87708f432 arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents: 34833
diff changeset
2937 # filecmp follows symlinks whereas `cmp` should not, so skip the fast
14c87708f432 arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents: 34833
diff changeset
2938 # path if either side is a symlink.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2939 symlinks = b'l' in self.flags() or b'l' in fctx.flags()
34835
14c87708f432 arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents: 34833
diff changeset
2940 if not symlinks and isinstance(fctx, workingfilectx) and self._repo:
34685
6036e6e205ca context: add a fast-comparision for arbitraryfilectx and workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34681
diff changeset
2941 # Add a fast-path for merge if both sides are disk-backed.
34835
14c87708f432 arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents: 34833
diff changeset
2942 # Note that filecmp uses the opposite return values (True if same)
14c87708f432 arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents: 34833
diff changeset
2943 # from our cmp functions (True if different).
34685
6036e6e205ca context: add a fast-comparision for arbitraryfilectx and workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34681
diff changeset
2944 return not filecmp.cmp(self.path(), self._repo.wjoin(fctx.path()))
6036e6e205ca context: add a fast-comparision for arbitraryfilectx and workingfilectx
Phil Cohen <phillco@fb.com>
parents: 34681
diff changeset
2945 return self.data() != fctx.data()
34068
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2946
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2947 def path(self):
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2948 return self._path
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2949
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2950 def flags(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2951 return b''
34068
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2952
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2953 def data(self):
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2954 return util.readfile(self._path)
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2955
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2956 def decodeddata(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2957 with open(self._path, b"rb") as f:
34068
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2958 return f.read()
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2959
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2960 def remove(self):
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2961 util.unlink(self._path)
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2962
35725
2a7e777c9eed write: add the possibility to pass keyword argument from batchget to vfs
Boris Feld <boris.feld@octobus.net>
parents: 35610
diff changeset
2963 def write(self, data, flags, **kwargs):
34068
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2964 assert not flags
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2965 with open(self._path, b"wb") as f:
34068
d2fc88426d21 context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents: 34054
diff changeset
2966 f.write(data)