Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/context.py @ 35571:265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
When trying to access filtered revision, it is likely because they have been
obsoleted by an obs-marker. The current message shows how to access the
revision anyway:
abort: hidden revision '13bedc178fce'!
But in the case of an obsoleted revision, the user is likely to want to update
to or use the successor of the revision.
We update the message to display more information about the obsolescence fate
of the revision in the following cases:
abort: hidden revision '13bedc178fce' is pruned!
abort: hidden revision '13bedc178fce' has diverged!
abort: hidden revision '13bedc178fce' was rewritten as X, Y and 2 more!
Differential Revision: https://phab.mercurial-scm.org/D1591
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Fri, 05 Jan 2018 09:12:08 +0100 |
parents | 8a0cac20a1ad |
children | cb0db11f392d |
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 | 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 |
26604
a3fcc8e3136b
context: don't hex encode all unknown 20 char revision specs (issue4890)
Mads Kiilerich <madski@unity3d.com>
parents:
26587
diff
changeset
|
13 import re |
27506
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
14 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
|
15 |
27506
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
16 from .i18n import _ |
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
17 from .node import ( |
30371
1070df141718
dirstate: change added/modified placeholder hash length to 20 bytes
Durham Goode <durham@fb.com>
parents:
30370
diff
changeset
|
18 addednodeid, |
27506
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
19 bin, |
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
20 hex, |
30371
1070df141718
dirstate: change added/modified placeholder hash length to 20 bytes
Durham Goode <durham@fb.com>
parents:
30370
diff
changeset
|
21 modifiednodeid, |
27506
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
22 nullid, |
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
23 nullrev, |
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
24 short, |
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
25 wdirid, |
31268
c414e339e7af
status: handle more node indicators in buildstatus
Durham Goode <durham@fb.com>
parents:
31093
diff
changeset
|
26 wdirnodes, |
32680
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32674
diff
changeset
|
27 wdirrev, |
27506
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
28 ) |
34433
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
29 from .thirdparty import ( |
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
30 attr, |
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
31 ) |
27506
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
32 from . import ( |
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 mdiff, |
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
38 obsolete as obsmod, |
35571
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
39 obsutil, |
27506
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
40 patch, |
33501
7008f6819002
context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
33499
diff
changeset
|
41 pathutil, |
27506
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
42 phases, |
31352
ff2f90503d64
context: work around `long` not existing on Python 3
Augie Fackler <augie@google.com>
parents:
31318
diff
changeset
|
43 pycompat, |
27506
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
44 repoview, |
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
45 revlog, |
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
46 scmutil, |
33353
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33283
diff
changeset
|
47 sparse, |
27506
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
48 subrepo, |
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
49 util, |
e6d3dad71e44
context: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27234
diff
changeset
|
50 ) |
3122
da85145d4571
filectx: add rename traversal for parents()
Matt Mackall <mpm@selenic.com>
parents:
2859
diff
changeset
|
51 |
8207
dd8d5be57d65
util: take propertycache from context.py
Matt Mackall <mpm@selenic.com>
parents:
8157
diff
changeset
|
52 propertycache = util.propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
53 |
26604
a3fcc8e3136b
context: don't hex encode all unknown 20 char revision specs (issue4890)
Mads Kiilerich <madski@unity3d.com>
parents:
26587
diff
changeset
|
54 nonascii = re.compile(r'[^\x21-\x7f]').search |
a3fcc8e3136b
context: don't hex encode all unknown 20 char revision specs (issue4890)
Mads Kiilerich <madski@unity3d.com>
parents:
26587
diff
changeset
|
55 |
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
|
56 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
|
57 """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
|
58 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
|
59 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
|
60 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
|
61 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
|
62 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
|
63 def __new__(cls, repo, changeid='', *args, **kwargs): |
19538
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
64 if isinstance(changeid, basectx): |
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
65 return changeid |
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
66 |
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
67 o = super(basectx, cls).__new__(cls) |
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
68 |
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
69 o._repo = repo |
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
70 o._rev = nullrev |
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
71 o._node = nullid |
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
72 |
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
73 return o |
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
|
74 |
31353
c99371e38e5e
context: implement both __bytes__ and __str__ for Python 3
Augie Fackler <augie@google.com>
parents:
31352
diff
changeset
|
75 def __bytes__(self): |
19540
7b864da00e21
basectx: move __str__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19539
diff
changeset
|
76 return short(self.node()) |
7b864da00e21
basectx: move __str__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19539
diff
changeset
|
77 |
33038
ce96efec8112
py3: add utility to forward __str__() to __bytes__()
Yuya Nishihara <yuya@tcha.org>
parents:
33035
diff
changeset
|
78 __str__ = encoding.strmethod(__bytes__) |
ce96efec8112
py3: add utility to forward __str__() to __bytes__()
Yuya Nishihara <yuya@tcha.org>
parents:
33035
diff
changeset
|
79 |
19545
5af7045b0b18
basectx: move __int__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19544
diff
changeset
|
80 def __int__(self): |
5af7045b0b18
basectx: move __int__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19544
diff
changeset
|
81 return self.rev() |
5af7045b0b18
basectx: move __int__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19544
diff
changeset
|
82 |
19546
a45cf68dd9a2
basectx: move __repr__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19545
diff
changeset
|
83 def __repr__(self): |
32636
e7eb7494e98d
py3: make sure we return strings from __str__ and __repr__
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32633
diff
changeset
|
84 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
|
85 |
19547
0537c0cfd87c
basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19546
diff
changeset
|
86 def __eq__(self, other): |
0537c0cfd87c
basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19546
diff
changeset
|
87 try: |
0537c0cfd87c
basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19546
diff
changeset
|
88 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
|
89 except AttributeError: |
0537c0cfd87c
basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19546
diff
changeset
|
90 return False |
0537c0cfd87c
basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19546
diff
changeset
|
91 |
19548
730fdcaa791d
basectx: move __ne__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19547
diff
changeset
|
92 def __ne__(self, other): |
730fdcaa791d
basectx: move __ne__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19547
diff
changeset
|
93 return not (self == other) |
730fdcaa791d
basectx: move __ne__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19547
diff
changeset
|
94 |
19550
0c8ad779eb36
basectx: move __contains__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19549
diff
changeset
|
95 def __contains__(self, key): |
0c8ad779eb36
basectx: move __contains__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19549
diff
changeset
|
96 return key in self._manifest |
0c8ad779eb36
basectx: move __contains__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19549
diff
changeset
|
97 |
19551
e07c69145724
basectx: move __getitem__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19550
diff
changeset
|
98 def __getitem__(self, key): |
e07c69145724
basectx: move __getitem__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19550
diff
changeset
|
99 return self.filectx(key) |
e07c69145724
basectx: move __getitem__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19550
diff
changeset
|
100 |
19552
6b76070c4b54
basectx: move __iter__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19551
diff
changeset
|
101 def __iter__(self): |
24227
8ec2df32bd39
context: don't sort manifest entries
Augie Fackler <augie@google.com>
parents:
24213
diff
changeset
|
102 return iter(self._manifest) |
19552
6b76070c4b54
basectx: move __iter__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19551
diff
changeset
|
103 |
31271
bd884ef2ee46
context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31270
diff
changeset
|
104 def _buildstatusmanifest(self, status): |
bd884ef2ee46
context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31270
diff
changeset
|
105 """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
|
106 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
|
107 the normal manifest.""" |
bd884ef2ee46
context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31270
diff
changeset
|
108 return self.manifest() |
21880
e6754f5e4cf7
context: generate filtered manifest efficiently for exact matchers
Siddharth Agarwal <sid0@fb.com>
parents:
21845
diff
changeset
|
109 |
23237
98f41a2f8fba
context.status: remove unused arguments from _matchstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
23236
diff
changeset
|
110 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
|
111 """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
|
112 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
|
113 """ |
33954
c714e82b9ac2
context: always pass a matcher into _matchstatus() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33919
diff
changeset
|
114 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
|
115 |
21471
90aff492dc4a
context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21468
diff
changeset
|
116 def _buildstatus(self, other, s, match, listignored, listclean, |
21663
8d9449eaaeff
context: fix wrong indentation from renaming method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21616
diff
changeset
|
117 listunknown): |
21471
90aff492dc4a
context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21468
diff
changeset
|
118 """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
|
119 # 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
|
120 # 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
|
121 # 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
|
122 # 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
|
123 # 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
|
124 # delta application. |
31270
aac054e5389b
context: remove assumptions about manifest creation during _buildstatus
Durham Goode <durham@fb.com>
parents:
31269
diff
changeset
|
125 mf2 = None |
23238
39eb9f78f968
context.status: move manifest caching trick to _buildstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
23237
diff
changeset
|
126 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
|
127 mf2 = self._buildstatusmanifest(s) |
bd884ef2ee46
context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31270
diff
changeset
|
128 mf1 = other._buildstatusmanifest(s) |
31270
aac054e5389b
context: remove assumptions about manifest creation during _buildstatus
Durham Goode <durham@fb.com>
parents:
31269
diff
changeset
|
129 if mf2 is None: |
31271
bd884ef2ee46
context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31270
diff
changeset
|
130 mf2 = self._buildstatusmanifest(s) |
21471
90aff492dc4a
context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21468
diff
changeset
|
131 |
23755
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
132 modified, added = [], [] |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
133 removed = [] |
23757
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
134 clean = [] |
23304
dd3f857598a0
context.status: pass status tuple into _buildstatus
Martin von Zweigbergk <martinvonz@google.com>
parents:
23303
diff
changeset
|
135 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
|
136 deletedset = set(deleted) |
31271
bd884ef2ee46
context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31270
diff
changeset
|
137 d = mf1.diff(mf2, match=match, clean=listclean) |
23757
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
138 for fn, value in d.iteritems(): |
23731
ccbaa2ed11a4
status: don't list files as both clean and deleted
Martin von Zweigbergk <martinvonz@google.com>
parents:
23730
diff
changeset
|
139 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
|
140 continue |
23757
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
141 if value is None: |
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
142 clean.append(fn) |
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
143 continue |
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
144 (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
|
145 if node1 is None: |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
146 added.append(fn) |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
147 elif node2 is None: |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
148 removed.append(fn) |
27749
215b47449e47
context: check for differing flags a little earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
27748
diff
changeset
|
149 elif flag1 != flag2: |
215b47449e47
context: check for differing flags a little earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
27748
diff
changeset
|
150 modified.append(fn) |
31268
c414e339e7af
status: handle more node indicators in buildstatus
Durham Goode <durham@fb.com>
parents:
31093
diff
changeset
|
151 elif node2 not in wdirnodes: |
27748
81b391a45264
context: clarify why we don't compare file contents when nodeid differs
Martin von Zweigbergk <martinvonz@google.com>
parents:
27747
diff
changeset
|
152 # 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
|
153 # 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
|
154 # 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
|
155 # to a file as a modification. |
27747
54522bbe1597
status: back out changeset 89f49813526c
Martin von Zweigbergk <martinvonz@google.com>
parents:
27720
diff
changeset
|
156 modified.append(fn) |
23755
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
157 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
|
158 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
|
159 else: |
23757
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
160 clean.append(fn) |
23755
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
161 |
21971
412ac613fd89
status: explicitly exclude removed file from unknown and ignored
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21938
diff
changeset
|
162 if removed: |
412ac613fd89
status: explicitly exclude removed file from unknown and ignored
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21938
diff
changeset
|
163 # need to filter files if they are already reported as removed |
31271
bd884ef2ee46
context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31270
diff
changeset
|
164 unknown = [fn for fn in unknown if fn not in mf1 and |
bd884ef2ee46
context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31270
diff
changeset
|
165 (not match or match(fn))] |
bd884ef2ee46
context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31270
diff
changeset
|
166 ignored = [fn for fn in ignored if fn not in mf1 and |
bd884ef2ee46
context: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31270
diff
changeset
|
167 (not match or match(fn))] |
23730
4b56219a5ac2
status: don't list files as both removed and deleted
Martin von Zweigbergk <martinvonz@google.com>
parents:
23712
diff
changeset
|
168 # 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
|
169 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
|
170 |
23302
24f67ad49da7
context.status: make _dirstatestatus() return an status tuple
Martin von Zweigbergk <martinvonz@google.com>
parents:
23301
diff
changeset
|
171 return scmutil.status(modified, added, removed, deleted, unknown, |
24f67ad49da7
context.status: make _dirstatestatus() return an status tuple
Martin von Zweigbergk <martinvonz@google.com>
parents:
23301
diff
changeset
|
172 ignored, clean) |
21471
90aff492dc4a
context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21468
diff
changeset
|
173 |
19549
78155484ae34
basectx: move substate from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19548
diff
changeset
|
174 @propertycache |
78155484ae34
basectx: move substate from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19548
diff
changeset
|
175 def substate(self): |
78155484ae34
basectx: move substate from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19548
diff
changeset
|
176 return subrepo.state(self, self._repo.ui) |
78155484ae34
basectx: move substate from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19548
diff
changeset
|
177 |
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
|
178 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
|
179 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
|
180 |
19541
421d49f2f8e2
basectx: move rev from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19540
diff
changeset
|
181 def rev(self): |
421d49f2f8e2
basectx: move rev from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19540
diff
changeset
|
182 return self._rev |
19542
bd95621a2d56
basectx: move node from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19541
diff
changeset
|
183 def node(self): |
bd95621a2d56
basectx: move node from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19541
diff
changeset
|
184 return self._node |
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()) |
19553
64a99d972b9e
basectx: move manifest from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19552
diff
changeset
|
187 def manifest(self): |
64a99d972b9e
basectx: move manifest from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19552
diff
changeset
|
188 return self._manifest |
30354
362f6f651b2e
context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents:
30350
diff
changeset
|
189 def manifestctx(self): |
362f6f651b2e
context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents:
30350
diff
changeset
|
190 return self._manifestctx |
24300
a07314472a80
context: add a repo accessor
Matt Harbison <matt_harbison@yahoo.com>
parents:
24227
diff
changeset
|
191 def repo(self): |
a07314472a80
context: add a repo accessor
Matt Harbison <matt_harbison@yahoo.com>
parents:
24227
diff
changeset
|
192 return self._repo |
19554
98f8875f4baa
basectx: move phasestr from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19553
diff
changeset
|
193 def phasestr(self): |
98f8875f4baa
basectx: move phasestr from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19553
diff
changeset
|
194 return phases.phasenames[self.phase()] |
19555
613b70fedc4e
basectx: move mutable from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19554
diff
changeset
|
195 def mutable(self): |
613b70fedc4e
basectx: move mutable from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19554
diff
changeset
|
196 return self.phase() > phases.public |
19541
421d49f2f8e2
basectx: move rev from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19540
diff
changeset
|
197 |
20400
f0137d994c83
context: add a getfileset() method so fewer things need fileset directly
Augie Fackler <raf@durin42.com>
parents:
20292
diff
changeset
|
198 def getfileset(self, expr): |
f0137d994c83
context: add a getfileset() method so fewer things need fileset directly
Augie Fackler <raf@durin42.com>
parents:
20292
diff
changeset
|
199 return fileset.getfileset(self, expr) |
f0137d994c83
context: add a getfileset() method so fewer things need fileset directly
Augie Fackler <raf@durin42.com>
parents:
20292
diff
changeset
|
200 |
19734
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
201 def obsolete(self): |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
202 """True if the changeset is obsolete""" |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
203 return self.rev() in obsmod.getrevs(self._repo, 'obsolete') |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
204 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
205 def extinct(self): |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
206 """True if the changeset is extinct""" |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
207 return self.rev() in obsmod.getrevs(self._repo, 'extinct') |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
208 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
209 def unstable(self): |
33753
f163edb45c47
context: rename unstable into orphan
Boris Feld <boris.feld@octobus.net>
parents:
33752
diff
changeset
|
210 msg = ("'context.unstable' is deprecated, " |
f163edb45c47
context: rename unstable into orphan
Boris Feld <boris.feld@octobus.net>
parents:
33752
diff
changeset
|
211 "use 'context.orphan'") |
f163edb45c47
context: rename unstable into orphan
Boris Feld <boris.feld@octobus.net>
parents:
33752
diff
changeset
|
212 self._repo.ui.deprecwarn(msg, '4.4') |
f163edb45c47
context: rename unstable into orphan
Boris Feld <boris.feld@octobus.net>
parents:
33752
diff
changeset
|
213 return self.orphan() |
f163edb45c47
context: rename unstable into orphan
Boris Feld <boris.feld@octobus.net>
parents:
33752
diff
changeset
|
214 |
f163edb45c47
context: rename unstable into orphan
Boris Feld <boris.feld@octobus.net>
parents:
33752
diff
changeset
|
215 def orphan(self): |
19734
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
216 """True if the changeset is not obsolete but it's ancestor are""" |
33798
d4b7496f7d0b
obsolete: rename unstable volatile set into orphan volatile set
Boris Feld <boris.feld@octobus.net>
parents:
33756
diff
changeset
|
217 return self.rev() in obsmod.getrevs(self._repo, 'orphan') |
19734
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
218 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
219 def bumped(self): |
33755
8413cbeae275
context: rename bumped into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents:
33754
diff
changeset
|
220 msg = ("'context.bumped' is deprecated, " |
8413cbeae275
context: rename bumped into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents:
33754
diff
changeset
|
221 "use 'context.phasedivergent'") |
8413cbeae275
context: rename bumped into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents:
33754
diff
changeset
|
222 self._repo.ui.deprecwarn(msg, '4.4') |
8413cbeae275
context: rename bumped into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents:
33754
diff
changeset
|
223 return self.phasedivergent() |
8413cbeae275
context: rename bumped into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents:
33754
diff
changeset
|
224 |
8413cbeae275
context: rename bumped into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents:
33754
diff
changeset
|
225 def phasedivergent(self): |
19734
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
226 """True if the changeset try to be a successor of a public changeset |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
227 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
228 Only non-public and non-obsolete changesets may be bumped. |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
229 """ |
33800
9fa874fb34e1
obsolete: rename bumped volatile set into phasedivergent volatile set
Boris Feld <boris.feld@octobus.net>
parents:
33799
diff
changeset
|
230 return self.rev() in obsmod.getrevs(self._repo, 'phasedivergent') |
19734
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
231 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
232 def divergent(self): |
33754
8b2d7684407b
context: rename divergent into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents:
33753
diff
changeset
|
233 msg = ("'context.divergent' is deprecated, " |
8b2d7684407b
context: rename divergent into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents:
33753
diff
changeset
|
234 "use 'context.contentdivergent'") |
8b2d7684407b
context: rename divergent into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents:
33753
diff
changeset
|
235 self._repo.ui.deprecwarn(msg, '4.4') |
8b2d7684407b
context: rename divergent into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents:
33753
diff
changeset
|
236 return self.contentdivergent() |
8b2d7684407b
context: rename divergent into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents:
33753
diff
changeset
|
237 |
8b2d7684407b
context: rename divergent into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents:
33753
diff
changeset
|
238 def contentdivergent(self): |
19734
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
239 """Is a successors of a changeset with multiple possible successors set |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
240 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
241 Only non-public and non-obsolete changesets may be divergent. |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
242 """ |
33799
f3f06c260e9e
obsolete: rename divergent volatile set into contentdivergent volatile set
Boris Feld <boris.feld@octobus.net>
parents:
33798
diff
changeset
|
243 return self.rev() in obsmod.getrevs(self._repo, 'contentdivergent') |
19734
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
244 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
245 def troubled(self): |
33756
52c5ff856b49
context: rename troubled into isunstable
Boris Feld <boris.feld@octobus.net>
parents:
33755
diff
changeset
|
246 msg = ("'context.troubled' is deprecated, " |
52c5ff856b49
context: rename troubled into isunstable
Boris Feld <boris.feld@octobus.net>
parents:
33755
diff
changeset
|
247 "use 'context.isunstable'") |
52c5ff856b49
context: rename troubled into isunstable
Boris Feld <boris.feld@octobus.net>
parents:
33755
diff
changeset
|
248 self._repo.ui.deprecwarn(msg, '4.4') |
33818
4abf34f47526
context: fix troubled deprecation
Boris Feld <boris.feld@octobus.net>
parents:
33800
diff
changeset
|
249 return self.isunstable() |
33756
52c5ff856b49
context: rename troubled into isunstable
Boris Feld <boris.feld@octobus.net>
parents:
33755
diff
changeset
|
250 |
52c5ff856b49
context: rename troubled into isunstable
Boris Feld <boris.feld@octobus.net>
parents:
33755
diff
changeset
|
251 def isunstable(self): |
19734
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
252 """True if the changeset is either unstable, bumped or divergent""" |
33755
8413cbeae275
context: rename bumped into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents:
33754
diff
changeset
|
253 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
|
254 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
255 def troubles(self): |
33752
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
256 """Keep the old version around in order to avoid breaking extensions |
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
257 about different return values. |
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
258 """ |
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
259 msg = ("'context.troubles' is deprecated, " |
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
260 "use 'context.instabilities'") |
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
261 self._repo.ui.deprecwarn(msg, '4.4') |
19734
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
262 |
33752
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
263 troubles = [] |
33753
f163edb45c47
context: rename unstable into orphan
Boris Feld <boris.feld@octobus.net>
parents:
33752
diff
changeset
|
264 if self.orphan(): |
33752
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
265 troubles.append('orphan') |
33755
8413cbeae275
context: rename bumped into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents:
33754
diff
changeset
|
266 if self.phasedivergent(): |
33752
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
267 troubles.append('bumped') |
33754
8b2d7684407b
context: rename divergent into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents:
33753
diff
changeset
|
268 if self.contentdivergent(): |
33752
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
269 troubles.append('divergent') |
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
270 return troubles |
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
271 |
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
272 def instabilities(self): |
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
273 """return the list of instabilities affecting this changeset. |
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
274 |
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
275 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
|
276 - orphan, |
33715
9c27a2891b75
evolution: rename bumped to phase-divergent
Boris Feld <boris.feld@octobus.net>
parents:
33714
diff
changeset
|
277 - phase-divergent, |
33714
2194a8723138
evolution: rename divergent to content-divergent
Boris Feld <boris.feld@octobus.net>
parents:
33695
diff
changeset
|
278 - content-divergent. |
19734
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
279 """ |
33752
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
280 instabilities = [] |
33753
f163edb45c47
context: rename unstable into orphan
Boris Feld <boris.feld@octobus.net>
parents:
33752
diff
changeset
|
281 if self.orphan(): |
33752
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
282 instabilities.append('orphan') |
33755
8413cbeae275
context: rename bumped into phasedivergent
Boris Feld <boris.feld@octobus.net>
parents:
33754
diff
changeset
|
283 if self.phasedivergent(): |
33752
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
284 instabilities.append('phase-divergent') |
33754
8b2d7684407b
context: rename divergent into contentdivergent
Boris Feld <boris.feld@octobus.net>
parents:
33753
diff
changeset
|
285 if self.contentdivergent(): |
33752
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
286 instabilities.append('content-divergent') |
ab0c55c2ad9a
context: rename troubles into instabilities
Boris Feld <boris.feld@octobus.net>
parents:
33715
diff
changeset
|
287 return instabilities |
19734
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
288 |
19556
732ee7fff35a
basectx: move parents from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19555
diff
changeset
|
289 def parents(self): |
732ee7fff35a
basectx: move parents from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19555
diff
changeset
|
290 """return contexts for each parent changeset""" |
732ee7fff35a
basectx: move parents from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19555
diff
changeset
|
291 return self._parents |
732ee7fff35a
basectx: move parents from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19555
diff
changeset
|
292 |
19557
9f57ebf0cce8
basectx: move p1 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19556
diff
changeset
|
293 def p1(self): |
9f57ebf0cce8
basectx: move p1 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19556
diff
changeset
|
294 return self._parents[0] |
9f57ebf0cce8
basectx: move p1 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19556
diff
changeset
|
295 |
19558
d0448e9d4554
basectx: move p2 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19557
diff
changeset
|
296 def p2(self): |
27064
a29db426c5ba
context: avoid extra parents lookups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27063
diff
changeset
|
297 parents = self._parents |
a29db426c5ba
context: avoid extra parents lookups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27063
diff
changeset
|
298 if len(parents) == 2: |
a29db426c5ba
context: avoid extra parents lookups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27063
diff
changeset
|
299 return parents[1] |
a29db426c5ba
context: avoid extra parents lookups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27063
diff
changeset
|
300 return changectx(self._repo, nullrev) |
19558
d0448e9d4554
basectx: move p2 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19557
diff
changeset
|
301 |
19559
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
302 def _fileinfo(self, path): |
32197
2cfdf5241096
py3: use raw strings while accessing class.__dict__
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32069
diff
changeset
|
303 if r'_manifest' in self.__dict__: |
19559
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
304 try: |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
305 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
|
306 except KeyError: |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
307 raise error.ManifestLookupError(self._node, path, |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
308 _('not found in manifest')) |
32197
2cfdf5241096
py3: use raw strings while accessing class.__dict__
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32069
diff
changeset
|
309 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
|
310 if path in self._manifestdelta: |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
311 return (self._manifestdelta[path], |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
312 self._manifestdelta.flags(path)) |
30350
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30289
diff
changeset
|
313 mfl = self._repo.manifestlog |
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30289
diff
changeset
|
314 try: |
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30289
diff
changeset
|
315 node, flag = mfl[self._changeset.manifest].find(path) |
608ba935e041
manifest: remove manifest.find
Durham Goode <durham@fb.com>
parents:
30289
diff
changeset
|
316 except KeyError: |
19559
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
317 raise error.ManifestLookupError(self._node, path, |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
318 _('not found in manifest')) |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
319 |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
320 return node, flag |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
321 |
19560
f256e1108053
basectx: move filenode from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19559
diff
changeset
|
322 def filenode(self, path): |
f256e1108053
basectx: move filenode from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19559
diff
changeset
|
323 return self._fileinfo(path)[0] |
f256e1108053
basectx: move filenode from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19559
diff
changeset
|
324 |
19561
7806e63598b0
basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19560
diff
changeset
|
325 def flags(self, path): |
7806e63598b0
basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19560
diff
changeset
|
326 try: |
7806e63598b0
basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19560
diff
changeset
|
327 return self._fileinfo(path)[1] |
7806e63598b0
basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19560
diff
changeset
|
328 except error.LookupError: |
7806e63598b0
basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19560
diff
changeset
|
329 return '' |
7806e63598b0
basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19560
diff
changeset
|
330 |
29021
92d37fb3f1aa
verify: don't init subrepo when missing one is referenced (issue5128) (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
28488
diff
changeset
|
331 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
|
332 '''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
|
333 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
|
334 |
25417
95c271356a66
context: introduce the nullsub() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25303
diff
changeset
|
335 def nullsub(self, path, pctx): |
95c271356a66
context: introduce the nullsub() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25303
diff
changeset
|
336 return subrepo.nullsubrepo(self, path, pctx) |
95c271356a66
context: introduce the nullsub() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25303
diff
changeset
|
337 |
25600
70ac1868b707
subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
25590
diff
changeset
|
338 def workingsub(self, path): |
70ac1868b707
subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
25590
diff
changeset
|
339 '''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
|
340 context. |
70ac1868b707
subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
25590
diff
changeset
|
341 ''' |
70ac1868b707
subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
25590
diff
changeset
|
342 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
|
343 |
31397
9e57033fec0c
context: don't use mutable default argument value
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31360
diff
changeset
|
344 def match(self, pats=None, include=None, exclude=None, default='glob', |
25465
f472228a9e5e
context: add an optional constructor parameter for a match.bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25435
diff
changeset
|
345 listsubrepos=False, badfn=None): |
19563
87503cd824fa
basectx: move match from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19562
diff
changeset
|
346 r = self._repo |
31446
084050d76e4f
context: explicitly tests for None
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31397
diff
changeset
|
347 return matchmod.match(r.root, r.getcwd(), pats, |
19563
87503cd824fa
basectx: move match from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19562
diff
changeset
|
348 include, exclude, default, |
27234
15c6eb0a51bd
context: use a the nofsauditor when matching file in history (issue4749)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27183
diff
changeset
|
349 auditor=r.nofsauditor, ctx=self, |
25465
f472228a9e5e
context: add an optional constructor parameter for a match.bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25435
diff
changeset
|
350 listsubrepos=listsubrepos, badfn=badfn) |
19563
87503cd824fa
basectx: move match from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19562
diff
changeset
|
351 |
19564
f0ed47b73d37
basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19563
diff
changeset
|
352 def diff(self, ctx2=None, match=None, **opts): |
f0ed47b73d37
basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19563
diff
changeset
|
353 """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
|
354 if ctx2 is None: |
f0ed47b73d37
basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19563
diff
changeset
|
355 ctx2 = self.p1() |
19568
f58235d85d6b
basectx: remove unnecessary check of instance
Sean Farley <sean.michael.farley@gmail.com>
parents:
19567
diff
changeset
|
356 if ctx2 is not None: |
19564
f0ed47b73d37
basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19563
diff
changeset
|
357 ctx2 = self._repo[ctx2] |
35362
8384553b1684
py3: handle keyword arguments correctly in context.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35336
diff
changeset
|
358 diffopts = patch.diffopts(self._repo.ui, pycompat.byteskwargs(opts)) |
21834
e4d35aa9056c
basectx: pass raw context objects to patch.diff
Sean Farley <sean.michael.farley@gmail.com>
parents:
21722
diff
changeset
|
359 return patch.diff(self._repo, ctx2, self, match=match, opts=diffopts) |
19564
f0ed47b73d37
basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19563
diff
changeset
|
360 |
24323
4c7c6beade1a
manifest: have context's dirs() call its manifest's dirs()
Drew Gottlieb <drgott@google.com>
parents:
24306
diff
changeset
|
361 def dirs(self): |
4c7c6beade1a
manifest: have context's dirs() call its manifest's dirs()
Drew Gottlieb <drgott@google.com>
parents:
24306
diff
changeset
|
362 return self._manifest.dirs() |
19565
bd1580a9c133
basectx: move _dirs from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19564
diff
changeset
|
363 |
24325
79d9c51488ca
manifest: add hasdir() to context
Drew Gottlieb <drgott@google.com>
parents:
24323
diff
changeset
|
364 def hasdir(self, dir): |
79d9c51488ca
manifest: add hasdir() to context
Drew Gottlieb <drgott@google.com>
parents:
24323
diff
changeset
|
365 return self._manifest.hasdir(dir) |
19566
54817c774d38
basectx: move dirs from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19565
diff
changeset
|
366 |
21594
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
367 def status(self, other=None, match=None, listignored=False, |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
368 listclean=False, listunknown=False, listsubrepos=False): |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
369 """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
|
370 directory. |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
371 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
372 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
|
373 |
ee29b0bb1619
status: document the content of the returned tuple in the docstring
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21718
diff
changeset
|
374 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
|
375 """ |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
376 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
377 ctx1 = self |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
378 ctx2 = self._repo[other] |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
379 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
380 # 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
|
381 # 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
|
382 # 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
|
383 # with its first parent. |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
384 # |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
385 # 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
|
386 # |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
387 # workingctx.status(parentctx) |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
388 # |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
389 # 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
|
390 # 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
|
391 # just copy the manifest of the parent. |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
392 reversed = False |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
393 if (not isinstance(ctx1, changectx) |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
394 and isinstance(ctx2, changectx)): |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
395 reversed = True |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
396 ctx1, ctx2 = ctx2, ctx1 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
397 |
33954
c714e82b9ac2
context: always pass a matcher into _matchstatus() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33919
diff
changeset
|
398 match = match or matchmod.always(self._repo.root, self._repo.getcwd()) |
23237
98f41a2f8fba
context.status: remove unused arguments from _matchstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
23236
diff
changeset
|
399 match = ctx2._matchstatus(ctx1, match) |
23304
dd3f857598a0
context.status: pass status tuple into _buildstatus
Martin von Zweigbergk <martinvonz@google.com>
parents:
23303
diff
changeset
|
400 r = scmutil.status([], [], [], [], [], [], []) |
21594
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
401 r = ctx2._buildstatus(ctx1, r, match, listignored, listclean, |
21663
8d9449eaaeff
context: fix wrong indentation from renaming method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21616
diff
changeset
|
402 listunknown) |
21594
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
403 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
404 if reversed: |
23301
c10dc5568069
context.status: wipe deleted/unknown/ignored fields when reversed
Martin von Zweigbergk <martinvonz@google.com>
parents:
23257
diff
changeset
|
405 # 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
|
406 # these make no sense to reverse. |
c10dc5568069
context.status: wipe deleted/unknown/ignored fields when reversed
Martin von Zweigbergk <martinvonz@google.com>
parents:
23257
diff
changeset
|
407 r = scmutil.status(r.modified, r.removed, r.added, [], [], [], |
c10dc5568069
context.status: wipe deleted/unknown/ignored fields when reversed
Martin von Zweigbergk <martinvonz@google.com>
parents:
23257
diff
changeset
|
408 r.clean) |
21594
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 if listsubrepos: |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
411 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
|
412 try: |
27183
0945539a3a6b
extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents:
27064
diff
changeset
|
413 rev2 = ctx2.subrev(subpath) |
0945539a3a6b
extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents:
27064
diff
changeset
|
414 except KeyError: |
0945539a3a6b
extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents:
27064
diff
changeset
|
415 # 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
|
416 # 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
|
417 # 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
|
418 rev2 = None |
28017
d3f1b7ee5e70
match: rename "narrowmatcher" to "subdirmatcher" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27983
diff
changeset
|
419 submatch = matchmod.subdirmatcher(subpath, match) |
27183
0945539a3a6b
extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents:
27064
diff
changeset
|
420 s = sub.status(rev2, match=submatch, ignored=listignored, |
0945539a3a6b
extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents:
27064
diff
changeset
|
421 clean=listclean, unknown=listunknown, |
0945539a3a6b
extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents:
27064
diff
changeset
|
422 listsubrepos=True) |
0945539a3a6b
extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents:
27064
diff
changeset
|
423 for rfiles, sfiles in zip(r, s): |
0945539a3a6b
extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com>
parents:
27064
diff
changeset
|
424 rfiles.extend("%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
|
425 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
426 for l in r: |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
427 l.sort() |
21616
0a8e7f81e8ae
context: explicitly return a tuple
Sean Farley <sean.michael.farley@gmail.com>
parents:
21595
diff
changeset
|
428 |
23301
c10dc5568069
context.status: wipe deleted/unknown/ignored fields when reversed
Martin von Zweigbergk <martinvonz@google.com>
parents:
23257
diff
changeset
|
429 return r |
21594
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
430 |
32006
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
431 def _filterederror(repo, changeid): |
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
432 """build an exception to be raised about a filtered changeid |
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
433 |
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
434 This is extracted in a function to help extensions (eg: evolve) to |
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
435 experiment with various message variants.""" |
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
436 if repo.filtername.startswith('visible'): |
35571
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
437 |
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
438 # Check if the changeset is obsolete |
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
439 unfilteredrepo = repo.unfiltered() |
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
440 ctx = unfilteredrepo[changeid] |
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
441 |
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
442 # If the changeset is obsolete, enrich the hint with the reason that |
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
443 # made this changeset not visible |
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
444 if ctx.obsolete(): |
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
445 reason = obsutil._getfilteredreason(unfilteredrepo, ctx) |
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
446 msg = _("hidden revision '%s' %s") % (changeid, reason) |
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
447 else: |
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
448 msg = _("hidden revision '%s'") % changeid |
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
449 |
32006
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
450 hint = _('use --hidden to access hidden revisions') |
35571
265cd9e19d26
visibility: improve the message when accessing filtered obsolete rev
Boris Feld <boris.feld@octobus.net>
parents:
35407
diff
changeset
|
451 |
32006
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
452 return error.FilteredRepoLookupError(msg, hint=hint) |
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
453 msg = _("filtered revision '%s' (not in '%s' subset)") |
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
454 msg %= (changeid, repo.filtername) |
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
455 return error.FilteredRepoLookupError(msg) |
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
456 |
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
|
457 class changectx(basectx): |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
458 """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
|
459 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
|
460 the repo.""" |
6741
5918e2b79859
context: simplify changeid logic
Matt Mackall <mpm@selenic.com>
parents:
6737
diff
changeset
|
461 def __init__(self, repo, changeid=''): |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
462 """changeid is a revision number, node, or tag""" |
19539
79671c46bb46
changectx: if passing a basectx then exit __init__ immediately
Sean Farley <sean.michael.farley@gmail.com>
parents:
19538
diff
changeset
|
463 |
79671c46bb46
changectx: if passing a basectx then exit __init__ immediately
Sean Farley <sean.michael.farley@gmail.com>
parents:
19538
diff
changeset
|
464 # since basectx.__new__ already took care of copying the object, we |
79671c46bb46
changectx: if passing a basectx then exit __init__ immediately
Sean Farley <sean.michael.farley@gmail.com>
parents:
19538
diff
changeset
|
465 # don't need to do anything in __init__, so we just exit here |
79671c46bb46
changectx: if passing a basectx then exit __init__ immediately
Sean Farley <sean.michael.farley@gmail.com>
parents:
19538
diff
changeset
|
466 if isinstance(changeid, basectx): |
79671c46bb46
changectx: if passing a basectx then exit __init__ immediately
Sean Farley <sean.michael.farley@gmail.com>
parents:
19538
diff
changeset
|
467 return |
79671c46bb46
changectx: if passing a basectx then exit __init__ immediately
Sean Farley <sean.michael.farley@gmail.com>
parents:
19538
diff
changeset
|
468 |
6741
5918e2b79859
context: simplify changeid logic
Matt Mackall <mpm@selenic.com>
parents:
6737
diff
changeset
|
469 if changeid == '': |
5918e2b79859
context: simplify changeid logic
Matt Mackall <mpm@selenic.com>
parents:
6737
diff
changeset
|
470 changeid = '.' |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
471 self._repo = repo |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
472 |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
473 try: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
474 if isinstance(changeid, int): |
23013
b50ed6b9b513
changectx: move `IndexError` handling in the top level try except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23012
diff
changeset
|
475 self._node = repo.changelog.node(changeid) |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
476 self._rev = changeid |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
477 return |
31352
ff2f90503d64
context: work around `long` not existing on Python 3
Augie Fackler <augie@google.com>
parents:
31318
diff
changeset
|
478 if not pycompat.ispy3 and isinstance(changeid, long): |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
479 changeid = str(changeid) |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
480 if changeid == 'null': |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
481 self._node = nullid |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
482 self._rev = nullrev |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
483 return |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
484 if changeid == 'tip': |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
485 self._node = repo.changelog.tip() |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
486 self._rev = repo.changelog.rev(self._node) |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
487 return |
34926
f7e4d6c20095
statichttprepo: prevent loading dirstate over HTTP on node lookup (issue5717)
Yuya Nishihara <yuya@tcha.org>
parents:
34835
diff
changeset
|
488 if (changeid == '.' |
f7e4d6c20095
statichttprepo: prevent loading dirstate over HTTP on node lookup (issue5717)
Yuya Nishihara <yuya@tcha.org>
parents:
34835
diff
changeset
|
489 or repo.local() and changeid == repo.dirstate.p1()): |
24050
a9b61dbdb827
context: use unfiltered repo for '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23984
diff
changeset
|
490 # this is a hack to delay/avoid loading obsmarkers |
a9b61dbdb827
context: use unfiltered repo for '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23984
diff
changeset
|
491 # when we know that '.' won't be hidden |
a9b61dbdb827
context: use unfiltered repo for '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23984
diff
changeset
|
492 self._node = repo.dirstate.p1() |
a9b61dbdb827
context: use unfiltered repo for '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23984
diff
changeset
|
493 self._rev = repo.unfiltered().changelog.rev(self._node) |
a9b61dbdb827
context: use unfiltered repo for '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23984
diff
changeset
|
494 return |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
495 if len(changeid) == 20: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
496 try: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
497 self._node = changeid |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
498 self._rev = repo.changelog.rev(changeid) |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
499 return |
23017
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
500 except error.FilteredRepoLookupError: |
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
501 raise |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
502 except LookupError: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
503 pass |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
504 |
18084
ee3b5fb648c7
clfilter: ensure context raise RepoLookupError when the revision is filtered
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18072
diff
changeset
|
505 try: |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
506 r = int(changeid) |
31360
5da0c7888dc4
context: use portable construction to verify int parsing
Augie Fackler <augie@google.com>
parents:
31353
diff
changeset
|
507 if '%d' % r != changeid: |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
508 raise ValueError |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
509 l = len(repo.changelog) |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
510 if r < 0: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
511 r += l |
32680
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32674
diff
changeset
|
512 if r < 0 or r >= l and r != wdirrev: |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
513 raise ValueError |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
514 self._rev = r |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
515 self._node = repo.changelog.node(r) |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
516 return |
23017
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
517 except error.FilteredIndexError: |
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
518 raise |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
519 except (ValueError, OverflowError, IndexError): |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
520 pass |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
521 |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
522 if len(changeid) == 40: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
523 try: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
524 self._node = bin(changeid) |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
525 self._rev = repo.changelog.rev(self._node) |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
526 return |
23017
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
527 except error.FilteredLookupError: |
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
528 raise |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
529 except (TypeError, LookupError): |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
530 pass |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
531 |
23560
aead63705504
changectx: use names api to simplify and extend node lookup
Sean Farley <sean.michael.farley@gmail.com>
parents:
23543
diff
changeset
|
532 # lookup bookmarks through the name interface |
aead63705504
changectx: use names api to simplify and extend node lookup
Sean Farley <sean.michael.farley@gmail.com>
parents:
23543
diff
changeset
|
533 try: |
23561
3c2419e07df5
namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents:
23560
diff
changeset
|
534 self._node = repo.names.singlenode(repo, changeid) |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
535 self._rev = repo.changelog.rev(self._node) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
536 return |
23560
aead63705504
changectx: use names api to simplify and extend node lookup
Sean Farley <sean.michael.farley@gmail.com>
parents:
23543
diff
changeset
|
537 except KeyError: |
aead63705504
changectx: use names api to simplify and extend node lookup
Sean Farley <sean.michael.farley@gmail.com>
parents:
23543
diff
changeset
|
538 pass |
23017
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
539 except error.FilteredRepoLookupError: |
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
540 raise |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
541 except error.RepoLookupError: |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
542 pass |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
543 |
23017
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
544 self._node = repo.unfiltered().changelog._partialmatch(changeid) |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
545 if self._node is not None: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
546 self._rev = repo.changelog.rev(self._node) |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
547 return |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
548 |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
549 # lookup failed |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
550 # check if it might have come from damaged dirstate |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
551 # |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
552 # XXX we could avoid the unfiltered if we had a recognizable |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
553 # exception for filtered changeset access |
34926
f7e4d6c20095
statichttprepo: prevent loading dirstate over HTTP on node lookup (issue5717)
Yuya Nishihara <yuya@tcha.org>
parents:
34835
diff
changeset
|
554 if (repo.local() |
f7e4d6c20095
statichttprepo: prevent loading dirstate over HTTP on node lookup (issue5717)
Yuya Nishihara <yuya@tcha.org>
parents:
34835
diff
changeset
|
555 and changeid in repo.unfiltered().dirstate.parents()): |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
556 msg = _("working directory has unknown parent '%s'!") |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
557 raise error.Abort(msg % short(changeid)) |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
558 try: |
26604
a3fcc8e3136b
context: don't hex encode all unknown 20 char revision specs (issue4890)
Mads Kiilerich <madski@unity3d.com>
parents:
26587
diff
changeset
|
559 if len(changeid) == 20 and nonascii(changeid): |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
560 changeid = hex(changeid) |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
561 except TypeError: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
562 pass |
23017
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
563 except (error.FilteredIndexError, error.FilteredLookupError, |
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
564 error.FilteredRepoLookupError): |
32006
c84c83b5df0f
hidden: extract the code generating "filtered rev" error for wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31992
diff
changeset
|
565 raise _filterederror(repo, changeid) |
23013
b50ed6b9b513
changectx: move `IndexError` handling in the top level try except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23012
diff
changeset
|
566 except IndexError: |
b50ed6b9b513
changectx: move `IndexError` handling in the top level try except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23012
diff
changeset
|
567 pass |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
568 raise error.RepoLookupError( |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
569 _("unknown revision '%s'") % changeid) |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
570 |
6469
fb502719c75c
python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents:
6286
diff
changeset
|
571 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
|
572 try: |
fb502719c75c
python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents:
6286
diff
changeset
|
573 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
|
574 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
|
575 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
|
576 |
3168
05c588e1803d
context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents:
3166
diff
changeset
|
577 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
|
578 return self._rev != nullrev |
3168
05c588e1803d
context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents:
3166
diff
changeset
|
579 |
31483
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31473
diff
changeset
|
580 __bool__ = __nonzero__ |
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31473
diff
changeset
|
581 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
582 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
583 def _changeset(self): |
28488
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
584 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
|
585 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
586 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
587 def _manifest(self): |
30354
362f6f651b2e
context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents:
30350
diff
changeset
|
588 return self._manifestctx.read() |
362f6f651b2e
context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents:
30350
diff
changeset
|
589 |
32552 | 590 @property |
30354
362f6f651b2e
context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents:
30350
diff
changeset
|
591 def _manifestctx(self): |
362f6f651b2e
context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents:
30350
diff
changeset
|
592 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
|
593 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
594 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
595 def _manifestdelta(self): |
30354
362f6f651b2e
context: add manifestctx property on changectx
Durham Goode <durham@fb.com>
parents:
30350
diff
changeset
|
596 return self._manifestctx.readdelta() |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
597 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
598 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
599 def _parents(self): |
27063
37e1fdcb271c
context: optimize _parents()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27016
diff
changeset
|
600 repo = self._repo |
37e1fdcb271c
context: optimize _parents()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27016
diff
changeset
|
601 p1, p2 = repo.changelog.parentrevs(self._rev) |
37e1fdcb271c
context: optimize _parents()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27016
diff
changeset
|
602 if p2 == nullrev: |
37e1fdcb271c
context: optimize _parents()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27016
diff
changeset
|
603 return [changectx(repo, p1)] |
37e1fdcb271c
context: optimize _parents()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27016
diff
changeset
|
604 return [changectx(repo, p1), changectx(repo, p2)] |
3215
931288cf58a7
contexts: use __getattr__ rather than try/except in changectx
Matt Mackall <mpm@selenic.com>
parents:
3214
diff
changeset
|
605 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
606 def changeset(self): |
28488
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
607 c = self._changeset |
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
608 return ( |
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
609 c.manifest, |
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
610 c.user, |
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
611 c.date, |
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
612 c.files, |
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
613 c.description, |
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
614 c.extra, |
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
615 ) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
616 def manifestnode(self): |
28488
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
617 return self._changeset.manifest |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
618 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
619 def user(self): |
28488
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
620 return self._changeset.user |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
621 def date(self): |
28488
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
622 return self._changeset.date |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
623 def files(self): |
28488
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
624 return self._changeset.files |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
625 def description(self): |
28488
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
626 return self._changeset.description |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
627 def branch(self): |
28488
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
628 return encoding.tolocal(self._changeset.extra.get("branch")) |
16720
e825a89de5d7
context: add changectx.closesbranch() method
Brodie Rao <brodie@sf.io>
parents:
16719
diff
changeset
|
629 def closesbranch(self): |
28488
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
630 return 'close' in self._changeset.extra |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
631 def extra(self): |
35130
b22a0d9e0a83
docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents:
35116
diff
changeset
|
632 """Return a dict of extra information.""" |
28488
437c32dcec7d
context: use changelogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28315
diff
changeset
|
633 return self._changeset.extra |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
634 def tags(self): |
35130
b22a0d9e0a83
docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents:
35116
diff
changeset
|
635 """Return a list of byte tag names""" |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
636 return self._repo.nodetags(self._node) |
13384
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13235
diff
changeset
|
637 def bookmarks(self): |
35130
b22a0d9e0a83
docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents:
35116
diff
changeset
|
638 """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
|
639 return self._repo.nodebookmarks(self._node) |
15421
405ca90df2b1
phases: add a phase method to context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15337
diff
changeset
|
640 def phase(self): |
16657
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16610
diff
changeset
|
641 return self._repo._phasecache.phase(self._repo, self._rev) |
14644
f3a40fd7008c
hidden: Add ``hidden`` method for context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
14528
diff
changeset
|
642 def hidden(self): |
18382
f3b21beb9802
filtering: rename filters to their antonyms
Kevin Bullock <kbullock@ringworld.org>
parents:
18364
diff
changeset
|
643 return self._rev in repoview.filterrevs(self._repo, 'visible') |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
644 |
34681
4dc8a2ee0f4f
context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents:
34556
diff
changeset
|
645 def isinmemory(self): |
4dc8a2ee0f4f
context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents:
34556
diff
changeset
|
646 return False |
4dc8a2ee0f4f
context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents:
34556
diff
changeset
|
647 |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
648 def children(self): |
35130
b22a0d9e0a83
docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents:
35116
diff
changeset
|
649 """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
|
650 |
b22a0d9e0a83
docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents:
35116
diff
changeset
|
651 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
|
652 recursively walk children. |
b22a0d9e0a83
docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents:
35116
diff
changeset
|
653 """ |
2627
b779319a532b
context.py: self.repo is not defined, change to self._repo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2566
diff
changeset
|
654 c = self._repo.changelog.children(self._node) |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
655 return [changectx(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
|
656 |
6876 | 657 def ancestors(self): |
16866
91f3ac205816
revlog: ancestors(*revs) becomes ancestors(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents:
16761
diff
changeset
|
658 for a in self._repo.changelog.ancestors([self._rev]): |
6876 | 659 yield changectx(self._repo, a) |
660 | |
661 def descendants(self): | |
35130
b22a0d9e0a83
docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents:
35116
diff
changeset
|
662 """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
|
663 |
b22a0d9e0a83
docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents:
35116
diff
changeset
|
664 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
|
665 """ |
16867
1093ad1e8903
revlog: descendants(*revs) becomes descendants(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents:
16866
diff
changeset
|
666 for d in self._repo.changelog.descendants([self._rev]): |
6876 | 667 yield changectx(self._repo, d) |
668 | |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
669 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
|
670 """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
|
671 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
|
672 fileid = self.filenode(path) |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
673 return filectx(self._repo, path, fileid=fileid, |
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
674 changectx=self, filelog=filelog) |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
675 |
21203
9f12d8665c7b
ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents:
21126
diff
changeset
|
676 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
|
677 """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
|
678 |
94f77624dbb5
comments: describe ancestor consistently - avoid 'least common ancestor'
Mads Kiilerich <madski@unity3d.com>
parents:
22313
diff
changeset
|
679 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
|
680 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
|
681 revlog ancestor.""" |
9843
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
682 # deal with workingctxs |
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
683 n2 = c2._node |
13031
3da456d0c885
code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents:
13001
diff
changeset
|
684 if n2 is None: |
9843
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
685 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
|
686 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
|
687 if not cahs: |
e94e90a4526e
context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents:
21114
diff
changeset
|
688 anc = nullid |
e94e90a4526e
context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents:
21114
diff
changeset
|
689 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
|
690 anc = cahs[0] |
e94e90a4526e
context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents:
21114
diff
changeset
|
691 else: |
25844
18541e9510c5
merge: make merge.preferancestor type and default consistent
Matt Mackall <mpm@selenic.com>
parents:
25757
diff
changeset
|
692 # experimental config: merge.preferancestor |
34480
99c3dee3f6ce
configitems: register the 'merge.preferancestor' config
Boris Feld <boris.feld@octobus.net>
parents:
34434
diff
changeset
|
693 for r in self._repo.ui.configlist('merge', 'preferancestor'): |
22671
5220c12c43fd
changectx: skip all invalid merge.preferancestor values
Mads Kiilerich <madski@unity3d.com>
parents:
22405
diff
changeset
|
694 try: |
5220c12c43fd
changectx: skip all invalid merge.preferancestor values
Mads Kiilerich <madski@unity3d.com>
parents:
22405
diff
changeset
|
695 ctx = changectx(self._repo, r) |
5220c12c43fd
changectx: skip all invalid merge.preferancestor values
Mads Kiilerich <madski@unity3d.com>
parents:
22405
diff
changeset
|
696 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
|
697 continue |
21126
99b5eaf372a7
context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents:
21125
diff
changeset
|
698 anc = ctx.node() |
99b5eaf372a7
context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents:
21125
diff
changeset
|
699 if anc in cahs: |
99b5eaf372a7
context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents:
21125
diff
changeset
|
700 break |
99b5eaf372a7
context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents:
21125
diff
changeset
|
701 else: |
99b5eaf372a7
context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents:
21125
diff
changeset
|
702 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
|
703 if warn: |
9f12d8665c7b
ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents:
21126
diff
changeset
|
704 self._repo.ui.status( |
9f12d8665c7b
ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents:
21126
diff
changeset
|
705 (_("note: using %s as ancestor of %s and %s\n") % |
9f12d8665c7b
ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents:
21126
diff
changeset
|
706 (short(anc), short(self._node), short(n2))) + |
9f12d8665c7b
ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents:
21126
diff
changeset
|
707 ''.join(_(" alternatively, use --config " |
9f12d8665c7b
ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents:
21126
diff
changeset
|
708 "merge.preferancestor=%s\n") % |
9f12d8665c7b
ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents:
21126
diff
changeset
|
709 short(n) for n in sorted(cahs) if n != anc)) |
21125
e94e90a4526e
context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents:
21114
diff
changeset
|
710 return changectx(self._repo, anc) |
3125
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
711 |
17626
3a524b647897
context: add "descendant()" to changectx for efficient descendant examination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17469
diff
changeset
|
712 def descendant(self, other): |
3a524b647897
context: add "descendant()" to changectx for efficient descendant examination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17469
diff
changeset
|
713 """True if other is descendant of this changeset""" |
3a524b647897
context: add "descendant()" to changectx for efficient descendant examination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17469
diff
changeset
|
714 return self._repo.changelog.descendant(self._rev, other._rev) |
3a524b647897
context: add "descendant()" to changectx for efficient descendant examination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17469
diff
changeset
|
715 |
6764 | 716 def walk(self, match): |
24646
5693c834bcb4
manifest: move changectx.walk() to manifests
Drew Gottlieb <drgott@google.com>
parents:
24633
diff
changeset
|
717 '''Generates matching file names.''' |
20292
8dc254198a8f
changectx: increase perf of walk function
Durham Goode <durham@fb.com>
parents:
20236
diff
changeset
|
718 |
25435
a592a6a6f4fe
context: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25417
diff
changeset
|
719 # 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
|
720 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
|
721 # 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
|
722 # paths into valid subrepos. |
25195 | 723 if any(fn == s or fn.startswith(s + '/') |
724 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
|
725 return |
25435
a592a6a6f4fe
context: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25417
diff
changeset
|
726 match.bad(fn, _('no such file in rev %s') % self) |
20292
8dc254198a8f
changectx: increase perf of walk function
Durham Goode <durham@fb.com>
parents:
20236
diff
changeset
|
727 |
25435
a592a6a6f4fe
context: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25417
diff
changeset
|
728 m = matchmod.badmatch(match, bad) |
a592a6a6f4fe
context: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25417
diff
changeset
|
729 return self._manifest.walk(m) |
6764 | 730 |
21985
7e871e771300
context: add a method to efficiently filter by match if possible
Siddharth Agarwal <sid0@fb.com>
parents:
21973
diff
changeset
|
731 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
|
732 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
|
733 |
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
|
734 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
|
735 """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
|
736 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
|
737 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
|
738 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
|
739 directory, |
32283
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
740 memfilectx: a filecontext that represents files in-memory, |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
741 overlayfilectx: duplicate another filecontext with some fields overridden. |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
742 """ |
19573
dffad92ab709
basefilectx: move _filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19572
diff
changeset
|
743 @propertycache |
dffad92ab709
basefilectx: move _filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19572
diff
changeset
|
744 def _filelog(self): |
dffad92ab709
basefilectx: move _filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19572
diff
changeset
|
745 return self._repo.file(self._path) |
dffad92ab709
basefilectx: move _filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19572
diff
changeset
|
746 |
19574
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
747 @propertycache |
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
748 def _changeid(self): |
32197
2cfdf5241096
py3: use raw strings while accessing class.__dict__
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32069
diff
changeset
|
749 if r'_changeid' in self.__dict__: |
19574
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
750 return self._changeid |
32197
2cfdf5241096
py3: use raw strings while accessing class.__dict__
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32069
diff
changeset
|
751 elif r'_changectx' in self.__dict__: |
19574
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
752 return self._changectx.rev() |
32197
2cfdf5241096
py3: use raw strings while accessing class.__dict__
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32069
diff
changeset
|
753 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
|
754 # 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
|
755 # descendant, we can (lazily) correct for linkrev aliases |
30289
e81d72b4b0ae
adjustlinkrev: remove unnecessary parameters
Jun Wu <quark@fb.com>
parents:
30284
diff
changeset
|
756 return self._adjustlinkrev(self._descendantrev) |
19574
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
757 else: |
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
758 return self._filelog.linkrev(self._filerev) |
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
759 |
19575
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
760 @propertycache |
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
761 def _filenode(self): |
32197
2cfdf5241096
py3: use raw strings while accessing class.__dict__
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32069
diff
changeset
|
762 if r'_fileid' in self.__dict__: |
19575
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
763 return self._filelog.lookup(self._fileid) |
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
764 else: |
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
765 return self._changectx.filenode(self._path) |
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
766 |
19576
18bbd8a3abf3
basefilectx: move _filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19575
diff
changeset
|
767 @propertycache |
18bbd8a3abf3
basefilectx: move _filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19575
diff
changeset
|
768 def _filerev(self): |
18bbd8a3abf3
basefilectx: move _filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19575
diff
changeset
|
769 return self._filelog.rev(self._filenode) |
18bbd8a3abf3
basefilectx: move _filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19575
diff
changeset
|
770 |
19577
b52d572a2177
basefilectx: move _repopath from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19576
diff
changeset
|
771 @propertycache |
b52d572a2177
basefilectx: move _repopath from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19576
diff
changeset
|
772 def _repopath(self): |
b52d572a2177
basefilectx: move _repopath from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19576
diff
changeset
|
773 return self._path |
b52d572a2177
basefilectx: move _repopath from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19576
diff
changeset
|
774 |
19578
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
775 def __nonzero__(self): |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
776 try: |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
777 self._filenode |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
778 return True |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
779 except error.LookupError: |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
780 # file is missing |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
781 return False |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
782 |
31483
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31473
diff
changeset
|
783 __bool__ = __nonzero__ |
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31473
diff
changeset
|
784 |
33038
ce96efec8112
py3: add utility to forward __str__() to __bytes__()
Yuya Nishihara <yuya@tcha.org>
parents:
33035
diff
changeset
|
785 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
|
786 try: |
e25ce44f8447
context: make sure __str__ works, also when there is no _changectx
Mads Kiilerich <mads@kiilerich.com>
parents:
30040
diff
changeset
|
787 return "%s@%s" % (self.path(), self._changectx) |
e25ce44f8447
context: make sure __str__ works, also when there is no _changectx
Mads Kiilerich <mads@kiilerich.com>
parents:
30040
diff
changeset
|
788 except error.LookupError: |
e25ce44f8447
context: make sure __str__ works, also when there is no _changectx
Mads Kiilerich <mads@kiilerich.com>
parents:
30040
diff
changeset
|
789 return "%s@???" % self.path() |
19579
964844d64ef8
basefilectx: move __str__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19578
diff
changeset
|
790 |
33038
ce96efec8112
py3: add utility to forward __str__() to __bytes__()
Yuya Nishihara <yuya@tcha.org>
parents:
33035
diff
changeset
|
791 __str__ = encoding.strmethod(__bytes__) |
33035
daccadd75760
py3: define __bytes__ for basefilectx class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32922
diff
changeset
|
792 |
19580
e86a594ab11f
basefilectx: move __repr__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19579
diff
changeset
|
793 def __repr__(self): |
e86a594ab11f
basefilectx: move __repr__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19579
diff
changeset
|
794 return "<%s %s>" % (type(self).__name__, str(self)) |
e86a594ab11f
basefilectx: move __repr__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19579
diff
changeset
|
795 |
19581
fe50d21be01a
basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19580
diff
changeset
|
796 def __hash__(self): |
fe50d21be01a
basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19580
diff
changeset
|
797 try: |
fe50d21be01a
basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19580
diff
changeset
|
798 return hash((self._path, self._filenode)) |
fe50d21be01a
basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19580
diff
changeset
|
799 except AttributeError: |
fe50d21be01a
basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19580
diff
changeset
|
800 return id(self) |
fe50d21be01a
basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19580
diff
changeset
|
801 |
19582
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
802 def __eq__(self, other): |
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
803 try: |
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
804 return (type(self) == type(other) and self._path == other._path |
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
805 and self._filenode == other._filenode) |
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
806 except AttributeError: |
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
807 return False |
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
808 |
19583
e5074d82afc9
basefilectx: move __ne__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19582
diff
changeset
|
809 def __ne__(self, other): |
e5074d82afc9
basefilectx: move __ne__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19582
diff
changeset
|
810 return not (self == other) |
e5074d82afc9
basefilectx: move __ne__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19582
diff
changeset
|
811 |
19584
fe300e63c28c
basefilectx: move filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19583
diff
changeset
|
812 def filerev(self): |
fe300e63c28c
basefilectx: move filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19583
diff
changeset
|
813 return self._filerev |
19585
8e553cd6071e
basefilectx: move filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19584
diff
changeset
|
814 def filenode(self): |
8e553cd6071e
basefilectx: move filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19584
diff
changeset
|
815 return self._filenode |
32278
8a660af9dbe3
filectx: make flags a property cache
Jun Wu <quark@fb.com>
parents:
32197
diff
changeset
|
816 @propertycache |
8a660af9dbe3
filectx: make flags a property cache
Jun Wu <quark@fb.com>
parents:
32197
diff
changeset
|
817 def _flags(self): |
8a660af9dbe3
filectx: make flags a property cache
Jun Wu <quark@fb.com>
parents:
32197
diff
changeset
|
818 return self._changectx.flags(self._path) |
19586
43f9ed2f64b1
basefilectx: move flags from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19585
diff
changeset
|
819 def flags(self): |
32278
8a660af9dbe3
filectx: make flags a property cache
Jun Wu <quark@fb.com>
parents:
32197
diff
changeset
|
820 return self._flags |
19587
b1c344ebd8e4
basefilectx: move filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19586
diff
changeset
|
821 def filelog(self): |
b1c344ebd8e4
basefilectx: move filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19586
diff
changeset
|
822 return self._filelog |
19588
a192fff6c97d
basefilectx: move rev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19587
diff
changeset
|
823 def rev(self): |
a192fff6c97d
basefilectx: move rev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19587
diff
changeset
|
824 return self._changeid |
19589
6a9043fa06d0
basefilectx: move linkrev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19588
diff
changeset
|
825 def linkrev(self): |
6a9043fa06d0
basefilectx: move linkrev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19588
diff
changeset
|
826 return self._filelog.linkrev(self._filerev) |
19590
90994b176bc1
basefilectx: move node from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19589
diff
changeset
|
827 def node(self): |
90994b176bc1
basefilectx: move node from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19589
diff
changeset
|
828 return self._changectx.node() |
19591
04fbc85f870a
basefilectx: move hex from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19590
diff
changeset
|
829 def hex(self): |
04fbc85f870a
basefilectx: move hex from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19590
diff
changeset
|
830 return self._changectx.hex() |
19592
1cdb3b3df4df
basefilectx: move user from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19591
diff
changeset
|
831 def user(self): |
1cdb3b3df4df
basefilectx: move user from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19591
diff
changeset
|
832 return self._changectx.user() |
19593
e3c241c89350
basefilectx: move date from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19592
diff
changeset
|
833 def date(self): |
e3c241c89350
basefilectx: move date from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19592
diff
changeset
|
834 return self._changectx.date() |
19594
1c030c24e196
basefilectx: move files from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19593
diff
changeset
|
835 def files(self): |
1c030c24e196
basefilectx: move files from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19593
diff
changeset
|
836 return self._changectx.files() |
19595
bb6fd06975a6
basefilectx: move description from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19594
diff
changeset
|
837 def description(self): |
bb6fd06975a6
basefilectx: move description from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19594
diff
changeset
|
838 return self._changectx.description() |
19596
9bc3d0dea371
basefilectx: move branch from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19595
diff
changeset
|
839 def branch(self): |
9bc3d0dea371
basefilectx: move branch from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19595
diff
changeset
|
840 return self._changectx.branch() |
19597
837bc86370f0
basefilectx: move extra from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19596
diff
changeset
|
841 def extra(self): |
837bc86370f0
basefilectx: move extra from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19596
diff
changeset
|
842 return self._changectx.extra() |
19598
e8ef893a3150
basefilectx: move phase from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19597
diff
changeset
|
843 def phase(self): |
e8ef893a3150
basefilectx: move phase from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19597
diff
changeset
|
844 return self._changectx.phase() |
19599
66d83efac20a
basefilectx: move phasestr from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19598
diff
changeset
|
845 def phasestr(self): |
66d83efac20a
basefilectx: move phasestr from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19598
diff
changeset
|
846 return self._changectx.phasestr() |
35111
a9454beb9dd8
context: add obsolete() method to basefilectx
Anton Shestakov <av6@dwimlabs.net>
parents:
34926
diff
changeset
|
847 def obsolete(self): |
a9454beb9dd8
context: add obsolete() method to basefilectx
Anton Shestakov <av6@dwimlabs.net>
parents:
34926
diff
changeset
|
848 return self._changectx.obsolete() |
35116
bd2743936b56
context: add instabilities() method to basefilectx
Anton Shestakov <av6@dwimlabs.net>
parents:
35111
diff
changeset
|
849 def instabilities(self): |
bd2743936b56
context: add instabilities() method to basefilectx
Anton Shestakov <av6@dwimlabs.net>
parents:
35111
diff
changeset
|
850 return self._changectx.instabilities() |
19600
12cdff44fdc4
basefilectx: move manifest from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19599
diff
changeset
|
851 def manifest(self): |
12cdff44fdc4
basefilectx: move manifest from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19599
diff
changeset
|
852 return self._changectx.manifest() |
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 |
32279
c38c15d4ce48
filectx: make renamed a property cache
Jun Wu <quark@fb.com>
parents:
32278
diff
changeset
|
855 def renamed(self): |
c38c15d4ce48
filectx: make renamed a property cache
Jun Wu <quark@fb.com>
parents:
32278
diff
changeset
|
856 return self._copied |
24333
5da0eb641881
filectx: add a repo accessor
Matt Harbison <matt_harbison@yahoo.com>
parents:
24326
diff
changeset
|
857 def repo(self): |
5da0eb641881
filectx: add a repo accessor
Matt Harbison <matt_harbison@yahoo.com>
parents:
24326
diff
changeset
|
858 return self._repo |
32280 | 859 def size(self): |
860 return len(self.data()) | |
19584
fe300e63c28c
basefilectx: move filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19583
diff
changeset
|
861 |
19602
018ee491a6be
basefilectx: move path from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19601
diff
changeset
|
862 def path(self): |
018ee491a6be
basefilectx: move path from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19601
diff
changeset
|
863 return self._path |
018ee491a6be
basefilectx: move path from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19601
diff
changeset
|
864 |
19603
a92302f48a56
basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19602
diff
changeset
|
865 def isbinary(self): |
a92302f48a56
basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19602
diff
changeset
|
866 try: |
a92302f48a56
basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19602
diff
changeset
|
867 return util.binary(self.data()) |
a92302f48a56
basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19602
diff
changeset
|
868 except IOError: |
a92302f48a56
basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19602
diff
changeset
|
869 return False |
22054
ef0ee0c001bf
basefilectx: move isexec and islink from memfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21992
diff
changeset
|
870 def isexec(self): |
ef0ee0c001bf
basefilectx: move isexec and islink from memfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21992
diff
changeset
|
871 return 'x' in self.flags() |
ef0ee0c001bf
basefilectx: move isexec and islink from memfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21992
diff
changeset
|
872 def islink(self): |
ef0ee0c001bf
basefilectx: move isexec and islink from memfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21992
diff
changeset
|
873 return 'l' in self.flags() |
19603
a92302f48a56
basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19602
diff
changeset
|
874 |
26978
9b9d4bcc915e
filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents:
26977
diff
changeset
|
875 def isabsent(self): |
9b9d4bcc915e
filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents:
26977
diff
changeset
|
876 """whether this filectx represents a file not in self._changectx |
9b9d4bcc915e
filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents:
26977
diff
changeset
|
877 |
9b9d4bcc915e
filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents:
26977
diff
changeset
|
878 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
|
879 expected to be True for all subclasses of basectx.""" |
9b9d4bcc915e
filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents:
26977
diff
changeset
|
880 return False |
9b9d4bcc915e
filectx: add isabsent method
Siddharth Agarwal <sid0@fb.com>
parents:
26977
diff
changeset
|
881 |
26977
bd19561b98d9
filectx: allow custom comparators
Siddharth Agarwal <sid0@fb.com>
parents:
26748
diff
changeset
|
882 _customcmp = False |
19604
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
883 def cmp(self, fctx): |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
884 """compare with other file context |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
885 |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
886 returns True if different than fctx. |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
887 """ |
26977
bd19561b98d9
filectx: allow custom comparators
Siddharth Agarwal <sid0@fb.com>
parents:
26748
diff
changeset
|
888 if fctx._customcmp: |
bd19561b98d9
filectx: allow custom comparators
Siddharth Agarwal <sid0@fb.com>
parents:
26748
diff
changeset
|
889 return fctx.cmp(self) |
bd19561b98d9
filectx: allow custom comparators
Siddharth Agarwal <sid0@fb.com>
parents:
26748
diff
changeset
|
890 |
28116
ba8257cb53e8
filectx: replace use of _filerev with _filenode
Durham Goode <durham@fb.com>
parents:
28017
diff
changeset
|
891 if (fctx._filenode is None |
19604
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
892 and (self._repo._encodefilterpats |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
893 # if file data starts with '\1\n', empty metadata block is |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
894 # prepended, which adds 4 bytes to filelog.size(). |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
895 or self.size() - 4 == fctx.size()) |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
896 or self.size() == fctx.size()): |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
897 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
|
898 |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
899 return True |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
900 |
30289
e81d72b4b0ae
adjustlinkrev: remove unnecessary parameters
Jun Wu <quark@fb.com>
parents:
30284
diff
changeset
|
901 def _adjustlinkrev(self, srcrev, inclusive=False): |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24050
diff
changeset
|
902 """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
|
903 |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
904 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
|
905 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
|
906 this file revision. |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
907 |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
908 :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
|
909 :inclusive: if true, the src revision will also be checked |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
910 """ |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
911 repo = self._repo |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
912 cl = repo.unfiltered().changelog |
29943
80be4436e4cc
manifest: adds manifestctx.readfast
Durham Goode <durham@fb.com>
parents:
29942
diff
changeset
|
913 mfl = repo.manifestlog |
23979
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
914 # fetch the linkrev |
30289
e81d72b4b0ae
adjustlinkrev: remove unnecessary parameters
Jun Wu <quark@fb.com>
parents:
30284
diff
changeset
|
915 lkr = self.linkrev() |
23980
c1ce5442453f
_adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23979
diff
changeset
|
916 # 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
|
917 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
|
918 iteranc = None |
24411
5a12ef618c03
adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24410
diff
changeset
|
919 if srcrev is None: |
5a12ef618c03
adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24410
diff
changeset
|
920 # 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
|
921 revs = [p.rev() for p in self._repo[None].parents()] |
5a12ef618c03
adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24410
diff
changeset
|
922 inclusive = True # we skipped the real (revless) source |
5a12ef618c03
adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24410
diff
changeset
|
923 else: |
5a12ef618c03
adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24410
diff
changeset
|
924 revs = [srcrev] |
23980
c1ce5442453f
_adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23979
diff
changeset
|
925 if memberanc is None: |
24411
5a12ef618c03
adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24410
diff
changeset
|
926 memberanc = iteranc = cl.ancestors(revs, lkr, |
5a12ef618c03
adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24410
diff
changeset
|
927 inclusive=inclusive) |
23979
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
928 # 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
|
929 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
|
930 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
|
931 iteranc = cl.ancestors(revs, lkr, inclusive=inclusive) |
30289
e81d72b4b0ae
adjustlinkrev: remove unnecessary parameters
Jun Wu <quark@fb.com>
parents:
30284
diff
changeset
|
932 fnode = self._filenode |
e81d72b4b0ae
adjustlinkrev: remove unnecessary parameters
Jun Wu <quark@fb.com>
parents:
30284
diff
changeset
|
933 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
|
934 for a in iteranc: |
23979
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
935 ac = cl.read(a) # get changeset data (we avoid object creation) |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
936 if path in ac[3]: # checking the 'files' field. |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
937 # 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
|
938 # similar to the one we search for. |
29943
80be4436e4cc
manifest: adds manifestctx.readfast
Durham Goode <durham@fb.com>
parents:
29942
diff
changeset
|
939 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
|
940 return a |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
941 # 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
|
942 # 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
|
943 # 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
|
944 # 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
|
945 return lkr |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
946 |
23703
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
947 def introrev(self): |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
948 """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
|
949 |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
950 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
|
951 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
|
952 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
|
953 '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
|
954 changesets. |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
955 """ |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
956 lkr = self.linkrev() |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
957 attrs = vars(self) |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
958 noctx = not ('_changeid' in attrs or '_changectx' in attrs) |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
959 if noctx or self.rev() == lkr: |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
960 return self.linkrev() |
30289
e81d72b4b0ae
adjustlinkrev: remove unnecessary parameters
Jun Wu <quark@fb.com>
parents:
30284
diff
changeset
|
961 return self._adjustlinkrev(self.rev(), inclusive=True) |
23703
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
962 |
35280
d90c534099b1
filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents:
35130
diff
changeset
|
963 def introfilectx(self): |
d90c534099b1
filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents:
35130
diff
changeset
|
964 """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
|
965 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
|
966 introrev = self.introrev() |
d90c534099b1
filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents:
35130
diff
changeset
|
967 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
|
968 return self |
d90c534099b1
filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents:
35130
diff
changeset
|
969 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
|
970 |
24816
8eec040cb65e
filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents:
24815
diff
changeset
|
971 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
|
972 """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
|
973 fctx = filectx(self._repo, path, fileid=fileid, filelog=filelog) |
8eec040cb65e
filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents:
24815
diff
changeset
|
974 if '_changeid' in vars(self) or '_changectx' in vars(self): |
8eec040cb65e
filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents:
24815
diff
changeset
|
975 # 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
|
976 # 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
|
977 # 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
|
978 # 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
|
979 fctx._descendantrev = self.rev() |
8eec040cb65e
filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents:
24815
diff
changeset
|
980 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
|
981 elif '_descendantrev' in vars(self): |
8eec040cb65e
filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents:
24815
diff
changeset
|
982 # 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
|
983 fctx._descendantrev = self._descendantrev |
8eec040cb65e
filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents:
24815
diff
changeset
|
984 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
|
985 return fctx |
8eec040cb65e
filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents:
24815
diff
changeset
|
986 |
19605
cf7322cb1c13
basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19604
diff
changeset
|
987 def parents(self): |
22201
269688a398c4
cleanup: fix some list comprehension redefinitions of existing vars
Mads Kiilerich <madski@unity3d.com>
parents:
22192
diff
changeset
|
988 _path = self._path |
19605
cf7322cb1c13
basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19604
diff
changeset
|
989 fl = self._filelog |
23688
20932983d520
filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23687
diff
changeset
|
990 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
|
991 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
|
992 |
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
|
993 r = fl.renamed(self._filenode) |
19605
cf7322cb1c13
basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19604
diff
changeset
|
994 if r: |
23688
20932983d520
filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23687
diff
changeset
|
995 # - 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
|
996 # - 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
|
997 # 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
|
998 # the first one. |
20932983d520
filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23687
diff
changeset
|
999 # |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24050
diff
changeset
|
1000 # 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
|
1001 # 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
|
1002 # 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
|
1003 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
|
1004 |
24816
8eec040cb65e
filectx: extract function to create parent fctx keeping ancestry info
Yuya Nishihara <yuya@tcha.org>
parents:
24815
diff
changeset
|
1005 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
|
1006 |
19606
284f91230c07
basefilectx: move p1 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19605
diff
changeset
|
1007 def p1(self): |
284f91230c07
basefilectx: move p1 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19605
diff
changeset
|
1008 return self.parents()[0] |
284f91230c07
basefilectx: move p1 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19605
diff
changeset
|
1009 |
19607
056a949799ac
basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19606
diff
changeset
|
1010 def p2(self): |
056a949799ac
basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19606
diff
changeset
|
1011 p = self.parents() |
056a949799ac
basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19606
diff
changeset
|
1012 if len(p) == 2: |
056a949799ac
basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19606
diff
changeset
|
1013 return p[1] |
056a949799ac
basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19606
diff
changeset
|
1014 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
|
1015 |
32519
1df80eff24cf
annotate: add a new experimental --skip option to skip revs
Siddharth Agarwal <sid0@fb.com>
parents:
32518
diff
changeset
|
1016 def annotate(self, follow=False, linenumber=False, skiprevs=None, |
1df80eff24cf
annotate: add a new experimental --skip option to skip revs
Siddharth Agarwal <sid0@fb.com>
parents:
32518
diff
changeset
|
1017 diffopts=None): |
29527
576ff900fcc7
context: eliminate handling of linenumber being None in annotate
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29223
diff
changeset
|
1018 '''returns a list of tuples of ((ctx, number), line) for each line |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
1019 in the file, where ctx is the filectx of the node where |
29527
576ff900fcc7
context: eliminate handling of linenumber being None in annotate
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29223
diff
changeset
|
1020 that line was last changed; if linenumber parameter is true, number is |
576ff900fcc7
context: eliminate handling of linenumber being None in annotate
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29223
diff
changeset
|
1021 the line number at the first appearance in the managed file, otherwise, |
576ff900fcc7
context: eliminate handling of linenumber being None in annotate
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29223
diff
changeset
|
1022 number has a fixed value of False. |
576ff900fcc7
context: eliminate handling of linenumber being None in annotate
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29223
diff
changeset
|
1023 ''' |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
1024 |
29223
c04ad3d3c651
annotate: optimize line counting
Matt Mackall <mpm@selenic.com>
parents:
29021
diff
changeset
|
1025 def lines(text): |
c04ad3d3c651
annotate: optimize line counting
Matt Mackall <mpm@selenic.com>
parents:
29021
diff
changeset
|
1026 if text.endswith("\n"): |
c04ad3d3c651
annotate: optimize line counting
Matt Mackall <mpm@selenic.com>
parents:
29021
diff
changeset
|
1027 return text.count("\n") |
30040
3e3f2201bbdf
annotate: calculate line count correctly
Jun Wu <quark@fb.com>
parents:
30025
diff
changeset
|
1028 return text.count("\n") + int(bool(text)) |
29223
c04ad3d3c651
annotate: optimize line counting
Matt Mackall <mpm@selenic.com>
parents:
29021
diff
changeset
|
1029 |
29527
576ff900fcc7
context: eliminate handling of linenumber being None in annotate
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
29223
diff
changeset
|
1030 if linenumber: |
22192
d1823cdf8554
annotate: inline definition of decorate() functions
Yuya Nishihara <yuya@tcha.org>
parents:
22191
diff
changeset
|
1031 def decorate(text, rev): |
34433
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
1032 return ([annotateline(fctx=rev, lineno=i) |
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
1033 for i in xrange(1, lines(text) + 1)], text) |
22191
9f9a2b79dcd7
annotate: rewrite long short-circuit statement by if-elif-else
Yuya Nishihara <yuya@tcha.org>
parents:
22075
diff
changeset
|
1034 else: |
22192
d1823cdf8554
annotate: inline definition of decorate() functions
Yuya Nishihara <yuya@tcha.org>
parents:
22191
diff
changeset
|
1035 def decorate(text, rev): |
34433
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
1036 return ([annotateline(fctx=rev)] * lines(text), text) |
4856
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
1037 |
9097
431462bd8478
fix memory usage of revlog caches by limiting cache size [issue1639]
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
1038 getlog = util.lrucachefunc(lambda x: self._repo.file(x)) |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
1039 |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
1040 def parents(f): |
24862
c82d88dfaf59
annotate: always adjust linkrev before walking down to parents (issue4623)
Yuya Nishihara <yuya@tcha.org>
parents:
24818
diff
changeset
|
1041 # 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
|
1042 # 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
|
1043 # 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
|
1044 # 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
|
1045 f._changeid |
19292
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
1046 pl = f.parents() |
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
1047 |
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
1048 # 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
|
1049 if not follow: |
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
1050 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
|
1051 |
19292
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
1052 # 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
|
1053 # from the cache to save time |
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
1054 for p in pl: |
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
1055 if not '_filelog' in p.__dict__: |
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
1056 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
|
1057 |
19292
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
1058 return pl |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1059 |
3404
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
1060 # 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
|
1061 base = self.introfilectx() |
24818
8d7d0bf62f9f
annotate: prepare ancestry context of workingfilectx
Yuya Nishihara <yuya@tcha.org>
parents:
24817
diff
changeset
|
1062 if getattr(base, '_ancestrycontext', None) is None: |
8d7d0bf62f9f
annotate: prepare ancestry context of workingfilectx
Yuya Nishihara <yuya@tcha.org>
parents:
24817
diff
changeset
|
1063 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
|
1064 if base.rev() is None: |
24818
8d7d0bf62f9f
annotate: prepare ancestry context of workingfilectx
Yuya Nishihara <yuya@tcha.org>
parents:
24817
diff
changeset
|
1065 # wctx is not inclusive, but works because _ancestrycontext |
8d7d0bf62f9f
annotate: prepare ancestry context of workingfilectx
Yuya Nishihara <yuya@tcha.org>
parents:
24817
diff
changeset
|
1066 # is used to test filelog revisions |
8d7d0bf62f9f
annotate: prepare ancestry context of workingfilectx
Yuya Nishihara <yuya@tcha.org>
parents:
24817
diff
changeset
|
1067 ac = cl.ancestors([p.rev() for p in base.parents()], |
8d7d0bf62f9f
annotate: prepare ancestry context of workingfilectx
Yuya Nishihara <yuya@tcha.org>
parents:
24817
diff
changeset
|
1068 inclusive=True) |
8d7d0bf62f9f
annotate: prepare ancestry context of workingfilectx
Yuya Nishihara <yuya@tcha.org>
parents:
24817
diff
changeset
|
1069 else: |
35280
d90c534099b1
filectx: extract helper method to obtain filectx pointing to its introrev
Yuya Nishihara <yuya@tcha.org>
parents:
35130
diff
changeset
|
1070 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
|
1071 base._ancestrycontext = ac |
3404
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
1072 |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1073 # This algorithm would prefer to be recursive, but Python is a |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1074 # bit recursion-hostile. Instead we do an iterative |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1075 # depth-first search. |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1076 |
29667
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1077 # 1st DFS pre-calculates pcache and needed |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1078 visit = [base] |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1079 pcache = {} |
3404
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
1080 needed = {base: 1} |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
1081 while visit: |
29667
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1082 f = visit.pop() |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1083 if f in pcache: |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1084 continue |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1085 pl = parents(f) |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1086 pcache[f] = pl |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1087 for p in pl: |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1088 needed[p] = needed.get(p, 0) + 1 |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1089 if p not in pcache: |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1090 visit.append(p) |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1091 |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1092 # 2nd DFS does the actual annotate |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1093 visit[:] = [base] |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1094 hist = {} |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1095 while visit: |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1096 f = visit[-1] |
29667
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1097 if f in hist: |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1098 visit.pop() |
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1099 continue |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
1100 |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1101 ready = True |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1102 pl = pcache[f] |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1103 for p in pl: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1104 if p not in hist: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1105 ready = False |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1106 visit.append(p) |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1107 if ready: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1108 visit.pop() |
29667
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1109 curr = decorate(f.data(), f) |
32519
1df80eff24cf
annotate: add a new experimental --skip option to skip revs
Siddharth Agarwal <sid0@fb.com>
parents:
32518
diff
changeset
|
1110 skipchild = False |
1df80eff24cf
annotate: add a new experimental --skip option to skip revs
Siddharth Agarwal <sid0@fb.com>
parents:
32518
diff
changeset
|
1111 if skiprevs is not None: |
1df80eff24cf
annotate: add a new experimental --skip option to skip revs
Siddharth Agarwal <sid0@fb.com>
parents:
32518
diff
changeset
|
1112 skipchild = f._changeid in skiprevs |
1df80eff24cf
annotate: add a new experimental --skip option to skip revs
Siddharth Agarwal <sid0@fb.com>
parents:
32518
diff
changeset
|
1113 curr = _annotatepair([hist[p] for p in pl], f, curr, skipchild, |
32518
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1114 diffopts) |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1115 for p in pl: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1116 if needed[p] == 1: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1117 del hist[p] |
19061
36067f5baf24
annotate: discard refcount of discarded annotation for memory efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18993
diff
changeset
|
1118 del needed[p] |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1119 else: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1120 needed[p] -= 1 |
6762 | 1121 |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1122 hist[f] = curr |
29667
2f6d5c60f6fc
annotate: pre-calculate the "needed" dictionary (issue5360)
Jun Wu <quark@fb.com>
parents:
29527
diff
changeset
|
1123 del pcache[f] |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
1124 |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
1125 return zip(hist[base][0], hist[base][1].splitlines(True)) |
3124
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
1126 |
19610
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
1127 def ancestors(self, followfirst=False): |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
1128 visit = {} |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
1129 c = self |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
1130 if followfirst: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
1131 cut = 1 |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
1132 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
1133 cut = None |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
1134 |
19610
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
1135 while True: |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
1136 for parent in c.parents()[:cut]: |
23981
24b57c3899f8
filectx: use linkrev to sort ancestors
Matt Mackall <mpm@selenic.com>
parents:
23980
diff
changeset
|
1137 visit[(parent.linkrev(), parent.filenode())] = parent |
19610
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
1138 if not visit: |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
1139 break |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
1140 c = visit.pop(max(visit)) |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
1141 yield c |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
1142 |
33919
f488223a87ab
context: add `decodeddata()` to basefilectx
Phil Cohen <phillco@fb.com>
parents:
33818
diff
changeset
|
1143 def decodeddata(self): |
f488223a87ab
context: add `decodeddata()` to basefilectx
Phil Cohen <phillco@fb.com>
parents:
33818
diff
changeset
|
1144 """Returns `data()` after running repository decoding filters. |
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 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
|
1147 """ |
f488223a87ab
context: add `decodeddata()` to basefilectx
Phil Cohen <phillco@fb.com>
parents:
33818
diff
changeset
|
1148 return self._repo.wwritedata(self.path(), self.data()) |
f488223a87ab
context: add `decodeddata()` to basefilectx
Phil Cohen <phillco@fb.com>
parents:
33818
diff
changeset
|
1149 |
34433
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
1150 @attr.s(slots=True, frozen=True) |
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
1151 class annotateline(object): |
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
1152 fctx = attr.ib() |
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
1153 lineno = attr.ib(default=False) |
34434
2f5a135b2b04
annotate: track whether a particular annotation was the result of a skip
Siddharth Agarwal <sid0@fb.com>
parents:
34433
diff
changeset
|
1154 # Whether this annotation was the result of a skip-annotate. |
2f5a135b2b04
annotate: track whether a particular annotation was the result of a skip
Siddharth Agarwal <sid0@fb.com>
parents:
34433
diff
changeset
|
1155 skip = attr.ib(default=False) |
34433
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
1156 |
32518
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1157 def _annotatepair(parents, childfctx, child, skipchild, diffopts): |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1158 r''' |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1159 Given parent and child fctxes and annotate data for parents, for all lines |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1160 in either parent that match the child, annotate the child with the parent's |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1161 data. |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1162 |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1163 Additionally, if `skipchild` is True, replace all other lines with parent |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1164 annotate data as well such that child is never blamed for any lines. |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1165 |
34431
80215865d154
annotate: move annotatepair unit tests to a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
34351
diff
changeset
|
1166 See test-annotate.py for unit tests. |
32518
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1167 ''' |
32517
c50f29b37aab
annotate: make pair take all parents to pair against
Siddharth Agarwal <sid0@fb.com>
parents:
32516
diff
changeset
|
1168 pblocks = [(parent, mdiff.allblocks(parent[1], child[1], opts=diffopts)) |
c50f29b37aab
annotate: make pair take all parents to pair against
Siddharth Agarwal <sid0@fb.com>
parents:
32516
diff
changeset
|
1169 for parent in parents] |
32518
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1170 |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1171 if skipchild: |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1172 # Need to iterate over the blocks twice -- make it a list |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1173 pblocks = [(p, list(blocks)) for (p, blocks) in pblocks] |
32517
c50f29b37aab
annotate: make pair take all parents to pair against
Siddharth Agarwal <sid0@fb.com>
parents:
32516
diff
changeset
|
1174 # Mercurial currently prefers p2 over p1 for annotate. |
c50f29b37aab
annotate: make pair take all parents to pair against
Siddharth Agarwal <sid0@fb.com>
parents:
32516
diff
changeset
|
1175 # TODO: change this? |
c50f29b37aab
annotate: make pair take all parents to pair against
Siddharth Agarwal <sid0@fb.com>
parents:
32516
diff
changeset
|
1176 for parent, blocks in pblocks: |
c50f29b37aab
annotate: make pair take all parents to pair against
Siddharth Agarwal <sid0@fb.com>
parents:
32516
diff
changeset
|
1177 for (a1, a2, b1, b2), t in blocks: |
c50f29b37aab
annotate: make pair take all parents to pair against
Siddharth Agarwal <sid0@fb.com>
parents:
32516
diff
changeset
|
1178 # Changed blocks ('!') or blocks made only of blank lines ('~') |
c50f29b37aab
annotate: make pair take all parents to pair against
Siddharth Agarwal <sid0@fb.com>
parents:
32516
diff
changeset
|
1179 # belong to the child. |
c50f29b37aab
annotate: make pair take all parents to pair against
Siddharth Agarwal <sid0@fb.com>
parents:
32516
diff
changeset
|
1180 if t == '=': |
c50f29b37aab
annotate: make pair take all parents to pair against
Siddharth Agarwal <sid0@fb.com>
parents:
32516
diff
changeset
|
1181 child[0][b1:b2] = parent[0][a1:a2] |
32518
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1182 |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1183 if skipchild: |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1184 # Now try and match up anything that couldn't be matched, |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1185 # Reversing pblocks maintains bias towards p2, matching above |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1186 # behavior. |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1187 pblocks.reverse() |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1188 |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1189 # The heuristics are: |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1190 # * Work on blocks of changed lines (effectively diff hunks with -U0). |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1191 # This could potentially be smarter but works well enough. |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1192 # * For a non-matching section, do a best-effort fit. Match lines in |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1193 # diff hunks 1:1, dropping lines as necessary. |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1194 # * Repeat the last line as a last resort. |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1195 |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1196 # First, replace as much as possible without repeating the last line. |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1197 remaining = [(parent, []) for parent, _blocks in pblocks] |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1198 for idx, (parent, blocks) in enumerate(pblocks): |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1199 for (a1, a2, b1, b2), _t in blocks: |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1200 if a2 - a1 >= b2 - b1: |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1201 for bk in xrange(b1, b2): |
34433
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
1202 if child[0][bk].fctx == childfctx: |
32518
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1203 ak = min(a1 + (bk - b1), a2 - 1) |
34434
2f5a135b2b04
annotate: track whether a particular annotation was the result of a skip
Siddharth Agarwal <sid0@fb.com>
parents:
34433
diff
changeset
|
1204 child[0][bk] = attr.evolve(parent[0][ak], skip=True) |
32518
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1205 else: |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1206 remaining[idx][1].append((a1, a2, b1, b2)) |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1207 |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1208 # Then, look at anything left, which might involve repeating the last |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1209 # line. |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1210 for parent, blocks in remaining: |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1211 for a1, a2, b1, b2 in blocks: |
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1212 for bk in xrange(b1, b2): |
34433
2e32c6a31cc7
annotate: introduce attr for storing per-line annotate data
Siddharth Agarwal <sid0@fb.com>
parents:
34432
diff
changeset
|
1213 if child[0][bk].fctx == childfctx: |
32518
05abc47f3746
annotate: add core algorithm to skip a rev
Siddharth Agarwal <sid0@fb.com>
parents:
32517
diff
changeset
|
1214 ak = min(a1 + (bk - b1), a2 - 1) |
34434
2f5a135b2b04
annotate: track whether a particular annotation was the result of a skip
Siddharth Agarwal <sid0@fb.com>
parents:
34433
diff
changeset
|
1215 child[0][bk] = attr.evolve(parent[0][ak], skip=True) |
32516
f8fb8a441b4a
annotate: move pair function to top level
Siddharth Agarwal <sid0@fb.com>
parents:
32447
diff
changeset
|
1216 return child |
f8fb8a441b4a
annotate: move pair function to top level
Siddharth Agarwal <sid0@fb.com>
parents:
32447
diff
changeset
|
1217 |
19608
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1218 class filectx(basefilectx): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1219 """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
|
1220 filerevision convenient.""" |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1221 def __init__(self, repo, path, changeid=None, fileid=None, |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1222 filelog=None, changectx=None): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1223 """changeid can be a changeset revision, node, or tag. |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1224 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
|
1225 self._repo = repo |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1226 self._path = path |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1227 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1228 assert (changeid is not None |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1229 or fileid is not None |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1230 or changectx is not None), \ |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1231 ("bad args: changeid=%r, fileid=%r, changectx=%r" |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1232 % (changeid, fileid, changectx)) |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1233 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1234 if filelog is not None: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1235 self._filelog = filelog |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1236 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1237 if changeid is not None: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1238 self._changeid = changeid |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1239 if changectx is not None: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1240 self._changectx = changectx |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1241 if fileid is not None: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1242 self._fileid = fileid |
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 @propertycache |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1245 def _changectx(self): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1246 try: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1247 return changectx(self._repo, self._changeid) |
23687
8f32dcfbc338
context: catch FilteredRepoLookupError instead of RepoLookupError
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23616
diff
changeset
|
1248 except error.FilteredRepoLookupError: |
19608
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1249 # 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
|
1250 # 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
|
1251 # `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
|
1252 # 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
|
1253 # 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
|
1254 # `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
|
1255 # filtering. |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1256 # |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1257 # 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
|
1258 # 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
|
1259 # 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
|
1260 # behavior" is seen as better as "crash" |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1261 # |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1262 # 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
|
1263 # 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
|
1264 # considered when solving linkrev issue are on the table. |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1265 return changectx(self._repo.unfiltered(), self._changeid) |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1266 |
23770
50f0096a7346
filectx: fix annotate to not directly instantiate filectx
Durham Goode <durham@fb.com>
parents:
23757
diff
changeset
|
1267 def filectx(self, fileid, changeid=None): |
19608
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1268 '''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
|
1269 opening a new filelog''' |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1270 return filectx(self._repo, self._path, fileid=fileid, |
23770
50f0096a7346
filectx: fix annotate to not directly instantiate filectx
Durham Goode <durham@fb.com>
parents:
23757
diff
changeset
|
1271 filelog=self._filelog, changeid=changeid) |
19608
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1272 |
30743
2df983125d37
revlog: add 'raw' argument to revision and _addrevision
Remi Chaintron <remi@fb.com>
parents:
30718
diff
changeset
|
1273 def rawdata(self): |
2df983125d37
revlog: add 'raw' argument to revision and _addrevision
Remi Chaintron <remi@fb.com>
parents:
30718
diff
changeset
|
1274 return self._filelog.revision(self._filenode, raw=True) |
2df983125d37
revlog: add 'raw' argument to revision and _addrevision
Remi Chaintron <remi@fb.com>
parents:
30718
diff
changeset
|
1275 |
32281 | 1276 def rawflags(self): |
1277 """low-level revlog flags""" | |
1278 return self._filelog.flags(self._filerev) | |
1279 | |
19608
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1280 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
|
1281 try: |
d81792872984
context: handle censored data in an on-disk file context based on config
Mike Edgar <adgar@google.com>
parents:
22916
diff
changeset
|
1282 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
|
1283 except error.CensoredNodeError: |
33499
0407a51b9d8c
codemod: register core configitems using a script
Jun Wu <quark@fb.com>
parents:
33364
diff
changeset
|
1284 if self._repo.ui.config("censor", "policy") == "ignore": |
22932
d81792872984
context: handle censored data in an on-disk file context based on config
Mike Edgar <adgar@google.com>
parents:
22916
diff
changeset
|
1285 return "" |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26492
diff
changeset
|
1286 raise error.Abort(_("censored node: %s") % short(self._filenode), |
23110
692bde7f486d
i18n: make hint message of exception translatable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23085
diff
changeset
|
1287 hint=_("set censor.policy to ignore errors")) |
22932
d81792872984
context: handle censored data in an on-disk file context based on config
Mike Edgar <adgar@google.com>
parents:
22916
diff
changeset
|
1288 |
19608
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1289 def size(self): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1290 return self._filelog.size(self._filerev) |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1291 |
32279
c38c15d4ce48
filectx: make renamed a property cache
Jun Wu <quark@fb.com>
parents:
32278
diff
changeset
|
1292 @propertycache |
c38c15d4ce48
filectx: make renamed a property cache
Jun Wu <quark@fb.com>
parents:
32278
diff
changeset
|
1293 def _copied(self): |
19608
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1294 """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
|
1295 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1296 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
|
1297 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
|
1298 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
|
1299 """ |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1300 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1301 renamed = self._filelog.renamed(self._filenode) |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1302 if not renamed: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1303 return renamed |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1304 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1305 if self.rev() == self.linkrev(): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1306 return renamed |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1307 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1308 name = self.path() |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1309 fnode = self._filenode |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1310 for p in self._changectx.parents(): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1311 try: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1312 if fnode == p.filenode(name): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1313 return None |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1314 except error.LookupError: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1315 pass |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1316 return renamed |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1317 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1318 def children(self): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1319 # hard for renames |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1320 c = self._filelog.children(self._filenode) |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1321 return [filectx(self._repo, self._path, fileid=x, |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1322 filelog=self._filelog) for x in c] |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1323 |
19733
51988f008df3
context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents:
19705
diff
changeset
|
1324 class committablectx(basectx): |
51988f008df3
context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents:
19705
diff
changeset
|
1325 """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
|
1326 wants the ability to commit, e.g. workingctx or memctx.""" |
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
|
1327 def __init__(self, repo, text="", user=None, date=None, extra=None, |
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
|
1328 changes=None): |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1329 self._repo = repo |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1330 self._rev = None |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1331 self._node = None |
6709
f84f507c53d3
context: let workingctx.date(), .user() and description() be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6708
diff
changeset
|
1332 self._text = text |
6718
4386a7706828
Fix commit date (issue1193)
Christian Ebert <blacktrash@gmx.net>
parents:
6715
diff
changeset
|
1333 if date: |
6709
f84f507c53d3
context: let workingctx.date(), .user() and description() be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6708
diff
changeset
|
1334 self._date = util.parsedate(date) |
6817 | 1335 if user: |
1336 self._user = user | |
6707
02bad34230a2
localrepo: hide commit() file selection behind workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6705
diff
changeset
|
1337 if changes: |
21592
16f62b4203b1
committablectx: simplify caching the status
Sean Farley <sean.michael.farley@gmail.com>
parents:
21590
diff
changeset
|
1338 self._status = changes |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1339 |
6708
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1340 self._extra = {} |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1341 if extra: |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1342 self._extra = extra.copy() |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1343 if 'branch' not in self._extra: |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1344 try: |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
13031
diff
changeset
|
1345 branch = encoding.fromlocal(self._repo.dirstate.branch()) |
6708
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1346 except UnicodeDecodeError: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26492
diff
changeset
|
1347 raise error.Abort(_('branch name not in UTF-8!')) |
6708
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1348 self._extra['branch'] = branch |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1349 if self._extra['branch'] == '': |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1350 self._extra['branch'] = 'default' |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1351 |
32666
1df98fc923d4
py3: implement __bytes__ for committablectx
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32636
diff
changeset
|
1352 def __bytes__(self): |
1df98fc923d4
py3: implement __bytes__ for committablectx
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32636
diff
changeset
|
1353 return bytes(self._parents[0]) + "+" |
19666
09459edfb48b
commitablectx: move __str__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19665
diff
changeset
|
1354 |
33038
ce96efec8112
py3: add utility to forward __str__() to __bytes__()
Yuya Nishihara <yuya@tcha.org>
parents:
33035
diff
changeset
|
1355 __str__ = encoding.strmethod(__bytes__) |
ce96efec8112
py3: add utility to forward __str__() to __bytes__()
Yuya Nishihara <yuya@tcha.org>
parents:
33035
diff
changeset
|
1356 |
19667
40040e4015f9
commitablectx: move __nonzero__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19666
diff
changeset
|
1357 def __nonzero__(self): |
40040e4015f9
commitablectx: move __nonzero__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19666
diff
changeset
|
1358 return True |
40040e4015f9
commitablectx: move __nonzero__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19666
diff
changeset
|
1359 |
31483
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31473
diff
changeset
|
1360 __bool__ = __nonzero__ |
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31473
diff
changeset
|
1361 |
15337
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1362 def _buildflagfunc(self): |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1363 # Create a fallback function for getting file flags when the |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1364 # filesystem doesn't support them |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1365 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1366 copiesget = self._repo.dirstate.copies().get |
27064
a29db426c5ba
context: avoid extra parents lookups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27063
diff
changeset
|
1367 parents = self.parents() |
a29db426c5ba
context: avoid extra parents lookups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27063
diff
changeset
|
1368 if len(parents) < 2: |
15337
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1369 # when we have one parent, it's easy: copy from parent |
27064
a29db426c5ba
context: avoid extra parents lookups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27063
diff
changeset
|
1370 man = parents[0].manifest() |
15337
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1371 def func(f): |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1372 f = copiesget(f, f) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1373 return man.flags(f) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1374 else: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1375 # merges are tricky: we try to reconstruct the unstored |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1376 # result from the merge (issue1802) |
27064
a29db426c5ba
context: avoid extra parents lookups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27063
diff
changeset
|
1377 p1, p2 = parents |
15337
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1378 pa = p1.ancestor(p2) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1379 m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest() |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1380 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1381 def func(f): |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1382 f = copiesget(f, f) # may be wrong for merges with copies |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1383 fl1, fl2, fla = m1.flags(f), m2.flags(f), ma.flags(f) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1384 if fl1 == fl2: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1385 return fl1 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1386 if fl1 == fla: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1387 return fl2 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1388 if fl2 == fla: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1389 return fl1 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1390 return '' # punt for conflicts |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1391 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1392 return func |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1393 |
19670
6ac735fbea50
commitablectx: move _flagfunc from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19669
diff
changeset
|
1394 @propertycache |
6ac735fbea50
commitablectx: move _flagfunc from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19669
diff
changeset
|
1395 def _flagfunc(self): |
6ac735fbea50
commitablectx: move _flagfunc from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19669
diff
changeset
|
1396 return self._repo.dirstate.flagfunc(self._buildflagfunc) |
6ac735fbea50
commitablectx: move _flagfunc from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19669
diff
changeset
|
1397 |
15337
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1398 @propertycache |
19672
375986c02539
commitablectx: move _status from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19671
diff
changeset
|
1399 def _status(self): |
21592
16f62b4203b1
committablectx: simplify caching the status
Sean Farley <sean.michael.farley@gmail.com>
parents:
21590
diff
changeset
|
1400 return self._repo.status() |
19672
375986c02539
commitablectx: move _status from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19671
diff
changeset
|
1401 |
19674
ec5b2e2b947f
commitablectx: move _user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19673
diff
changeset
|
1402 @propertycache |
ec5b2e2b947f
commitablectx: move _user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19673
diff
changeset
|
1403 def _user(self): |
ec5b2e2b947f
commitablectx: move _user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19673
diff
changeset
|
1404 return self._repo.ui.username() |
ec5b2e2b947f
commitablectx: move _user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19673
diff
changeset
|
1405 |
19676
103525f36337
commitablectx: move _date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19675
diff
changeset
|
1406 @propertycache |
103525f36337
commitablectx: move _date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19675
diff
changeset
|
1407 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
|
1408 ui = self._repo.ui |
3e2e179ef031
devel: add a config field to force dates to timestamp 0
Boris Feld <boris.feld@octobus.net>
parents:
32439
diff
changeset
|
1409 date = ui.configdate('devel', 'default-date') |
3e2e179ef031
devel: add a config field to force dates to timestamp 0
Boris Feld <boris.feld@octobus.net>
parents:
32439
diff
changeset
|
1410 if date is None: |
3e2e179ef031
devel: add a config field to force dates to timestamp 0
Boris Feld <boris.feld@octobus.net>
parents:
32439
diff
changeset
|
1411 date = util.makedate() |
3e2e179ef031
devel: add a config field to force dates to timestamp 0
Boris Feld <boris.feld@octobus.net>
parents:
32439
diff
changeset
|
1412 return date |
19676
103525f36337
commitablectx: move _date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19675
diff
changeset
|
1413 |
21587
02a8612ddec2
committablectx: add subrev method to return None
Sean Farley <sean.michael.farley@gmail.com>
parents:
21586
diff
changeset
|
1414 def subrev(self, subpath): |
02a8612ddec2
committablectx: add subrev method to return None
Sean Farley <sean.michael.farley@gmail.com>
parents:
21586
diff
changeset
|
1415 return None |
02a8612ddec2
committablectx: add subrev method to return None
Sean Farley <sean.michael.farley@gmail.com>
parents:
21586
diff
changeset
|
1416 |
24719
11e8fec00234
committablectx: override manifestnode() to return None
Yuya Nishihara <yuya@tcha.org>
parents:
24646
diff
changeset
|
1417 def manifestnode(self): |
11e8fec00234
committablectx: override manifestnode() to return None
Yuya Nishihara <yuya@tcha.org>
parents:
24646
diff
changeset
|
1418 return None |
19675
84249d49f37c
commitablectx: move user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19674
diff
changeset
|
1419 def user(self): |
84249d49f37c
commitablectx: move user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19674
diff
changeset
|
1420 return self._user or self._repo.ui.username() |
19677
e11415510352
commitablectx: move date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19676
diff
changeset
|
1421 def date(self): |
e11415510352
commitablectx: move date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19676
diff
changeset
|
1422 return self._date |
19678
897c2dbc0256
commitablectx: move description from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19677
diff
changeset
|
1423 def description(self): |
897c2dbc0256
commitablectx: move description from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19677
diff
changeset
|
1424 return self._text |
19679
f21804f1582e
commitablectx: move files from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19678
diff
changeset
|
1425 def files(self): |
22916
cfa8d7561938
context: store status class instead of plain tuple in self._status
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1426 return sorted(self._status.modified + self._status.added + |
cfa8d7561938
context: store status class instead of plain tuple in self._status
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1427 self._status.removed) |
19675
84249d49f37c
commitablectx: move user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19674
diff
changeset
|
1428 |
19680
fc33fcfa08f2
commitablectx: move modified from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19679
diff
changeset
|
1429 def modified(self): |
22916
cfa8d7561938
context: store status class instead of plain tuple in self._status
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1430 return self._status.modified |
19681
cfc4ae65023f
commitablectx: move added from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19680
diff
changeset
|
1431 def added(self): |
22916
cfa8d7561938
context: store status class instead of plain tuple in self._status
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1432 return self._status.added |
19682
42ffc7f31acf
commitablectx: move removed from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19681
diff
changeset
|
1433 def removed(self): |
22916
cfa8d7561938
context: store status class instead of plain tuple in self._status
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1434 return self._status.removed |
19683
6336f35ed77d
commitablectx: move deleted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19682
diff
changeset
|
1435 def deleted(self): |
22916
cfa8d7561938
context: store status class instead of plain tuple in self._status
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1436 return self._status.deleted |
19687
54b3b4821bfb
commitablectx: move branch from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19686
diff
changeset
|
1437 def branch(self): |
54b3b4821bfb
commitablectx: move branch from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19686
diff
changeset
|
1438 return encoding.tolocal(self._extra['branch']) |
19688
21e1068109a7
commitablectx: move closesbranch from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19687
diff
changeset
|
1439 def closesbranch(self): |
21e1068109a7
commitablectx: move closesbranch from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19687
diff
changeset
|
1440 return 'close' in self._extra |
19689
8dbb66f339f3
commitablectx: move extra from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19688
diff
changeset
|
1441 def extra(self): |
8dbb66f339f3
commitablectx: move extra from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19688
diff
changeset
|
1442 return self._extra |
19680
fc33fcfa08f2
commitablectx: move modified from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19679
diff
changeset
|
1443 |
34681
4dc8a2ee0f4f
context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents:
34556
diff
changeset
|
1444 def isinmemory(self): |
4dc8a2ee0f4f
context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents:
34556
diff
changeset
|
1445 return False |
4dc8a2ee0f4f
context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents:
34556
diff
changeset
|
1446 |
19690
65ff9fd67d8d
commitablectx: move tags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19689
diff
changeset
|
1447 def tags(self): |
25688
24cda1dd45ff
workingctx: don't report the tags for its parents
Matt Harbison <matt_harbison@yahoo.com>
parents:
25660
diff
changeset
|
1448 return [] |
19690
65ff9fd67d8d
commitablectx: move tags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19689
diff
changeset
|
1449 |
19691
33ae2052d924
commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19690
diff
changeset
|
1450 def bookmarks(self): |
33ae2052d924
commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19690
diff
changeset
|
1451 b = [] |
33ae2052d924
commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19690
diff
changeset
|
1452 for p in self.parents(): |
33ae2052d924
commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19690
diff
changeset
|
1453 b.extend(p.bookmarks()) |
33ae2052d924
commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19690
diff
changeset
|
1454 return b |
33ae2052d924
commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19690
diff
changeset
|
1455 |
19692
594f4d2b0ce9
commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19691
diff
changeset
|
1456 def phase(self): |
594f4d2b0ce9
commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19691
diff
changeset
|
1457 phase = phases.draft # default phase to draft |
594f4d2b0ce9
commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19691
diff
changeset
|
1458 for p in self.parents(): |
594f4d2b0ce9
commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19691
diff
changeset
|
1459 phase = max(phase, p.phase()) |
594f4d2b0ce9
commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19691
diff
changeset
|
1460 return phase |
594f4d2b0ce9
commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19691
diff
changeset
|
1461 |
19693
56ba14d4bc02
commitablectx: move hidden from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19692
diff
changeset
|
1462 def hidden(self): |
56ba14d4bc02
commitablectx: move hidden from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19692
diff
changeset
|
1463 return False |
56ba14d4bc02
commitablectx: move hidden from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19692
diff
changeset
|
1464 |
19694
ba4c01c34df9
commitablectx: move children from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19693
diff
changeset
|
1465 def children(self): |
ba4c01c34df9
commitablectx: move children from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19693
diff
changeset
|
1466 return [] |
ba4c01c34df9
commitablectx: move children from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19693
diff
changeset
|
1467 |
19695
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1468 def flags(self, path): |
32197
2cfdf5241096
py3: use raw strings while accessing class.__dict__
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32069
diff
changeset
|
1469 if r'_manifest' in self.__dict__: |
19695
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1470 try: |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1471 return self._manifest.flags(path) |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1472 except KeyError: |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1473 return '' |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1474 |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1475 try: |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1476 return self._flagfunc(path) |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1477 except OSError: |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1478 return '' |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1479 |
19696
210cc42a8ac2
commitablectx: move ancestor from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19695
diff
changeset
|
1480 def ancestor(self, c2): |
22389
94f77624dbb5
comments: describe ancestor consistently - avoid 'least common ancestor'
Mads Kiilerich <madski@unity3d.com>
parents:
22313
diff
changeset
|
1481 """return the "best" ancestor context of self and c2""" |
19696
210cc42a8ac2
commitablectx: move ancestor from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19695
diff
changeset
|
1482 return self._parents[0].ancestor(c2) # punt on two parents for now |
210cc42a8ac2
commitablectx: move ancestor from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19695
diff
changeset
|
1483 |
19697
8c95e74857c6
commitablectx: move walk from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19696
diff
changeset
|
1484 def walk(self, match): |
24646
5693c834bcb4
manifest: move changectx.walk() to manifests
Drew Gottlieb <drgott@google.com>
parents:
24633
diff
changeset
|
1485 '''Generates matching file names.''' |
34350
255c761a52db
dirstate: use keyword arguments to clarify walk()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents:
34146
diff
changeset
|
1486 return sorted(self._repo.dirstate.walk(match, |
255c761a52db
dirstate: use keyword arguments to clarify walk()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents:
34146
diff
changeset
|
1487 subrepos=sorted(self.substate), |
255c761a52db
dirstate: use keyword arguments to clarify walk()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents:
34146
diff
changeset
|
1488 unknown=True, ignored=False)) |
19697
8c95e74857c6
commitablectx: move walk from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19696
diff
changeset
|
1489 |
21985
7e871e771300
context: add a method to efficiently filter by match if possible
Siddharth Agarwal <sid0@fb.com>
parents:
21973
diff
changeset
|
1490 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
|
1491 return sorted(self._repo.dirstate.matches(match)) |
7e871e771300
context: add a method to efficiently filter by match if possible
Siddharth Agarwal <sid0@fb.com>
parents:
21973
diff
changeset
|
1492 |
19698
8d4a8f4eb404
commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19697
diff
changeset
|
1493 def ancestors(self): |
23616
11a160547d7f
context: return dirstate parents in workingctx.ancestors()
Durham Goode <durham@fb.com>
parents:
23603
diff
changeset
|
1494 for p in self._parents: |
11a160547d7f
context: return dirstate parents in workingctx.ancestors()
Durham Goode <durham@fb.com>
parents:
23603
diff
changeset
|
1495 yield p |
19698
8d4a8f4eb404
commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19697
diff
changeset
|
1496 for a in self._repo.changelog.ancestors( |
8d4a8f4eb404
commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19697
diff
changeset
|
1497 [p.rev() for p in self._parents]): |
8d4a8f4eb404
commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19697
diff
changeset
|
1498 yield changectx(self._repo, a) |
8d4a8f4eb404
commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19697
diff
changeset
|
1499 |
19699
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1500 def markcommitted(self, node): |
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1501 """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
|
1502 |
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1503 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
|
1504 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
|
1505 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
|
1506 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
|
1507 |
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1508 """ |
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1509 |
32388
81936f6462c1
context: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32283
diff
changeset
|
1510 with self._repo.dirstate.parentchange(): |
81936f6462c1
context: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32283
diff
changeset
|
1511 for f in self.modified() + self.added(): |
81936f6462c1
context: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32283
diff
changeset
|
1512 self._repo.dirstate.normal(f) |
81936f6462c1
context: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32283
diff
changeset
|
1513 for f in self.removed(): |
81936f6462c1
context: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32283
diff
changeset
|
1514 self._repo.dirstate.drop(f) |
81936f6462c1
context: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32283
diff
changeset
|
1515 self._repo.dirstate.setparents(node) |
19699
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1516 |
25757
4d1382fd96ff
context: write dirstate out explicitly at the end of markcommitted
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25753
diff
changeset
|
1517 # write changes out explicitly, because nesting wlock at |
4d1382fd96ff
context: write dirstate out explicitly at the end of markcommitted
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25753
diff
changeset
|
1518 # runtime may prevent 'wlock.release()' in 'repo.commit()' |
4d1382fd96ff
context: write dirstate out explicitly at the end of markcommitted
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25753
diff
changeset
|
1519 # from immediately doing so for subsequent changing files |
26748
5ba0a99ff27f
dirstate: make dirstate.write() callers pass transaction object to it
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26604
diff
changeset
|
1520 self._repo.dirstate.write(self._repo.currenttransaction()) |
25757
4d1382fd96ff
context: write dirstate out explicitly at the end of markcommitted
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25753
diff
changeset
|
1521 |
32633
bf728e72a219
context: move dirty() to committablectx
Sean Farley <sean@farley.io>
parents:
32632
diff
changeset
|
1522 def dirty(self, missing=False, merge=True, branch=True): |
bf728e72a219
context: move dirty() to committablectx
Sean Farley <sean@farley.io>
parents:
32632
diff
changeset
|
1523 return False |
bf728e72a219
context: move dirty() to committablectx
Sean Farley <sean@farley.io>
parents:
32632
diff
changeset
|
1524 |
19733
51988f008df3
context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents:
19705
diff
changeset
|
1525 class workingctx(committablectx): |
19671
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1526 """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
|
1527 the current working directory convenient. |
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1528 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
|
1529 user - username string, or None. |
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1530 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
|
1531 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
|
1532 or None to use the repository status. |
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1533 """ |
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1534 def __init__(self, repo, text="", user=None, date=None, extra=None, |
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1535 changes=None): |
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1536 super(workingctx, self).__init__(repo, text, user, date, extra, changes) |
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1537 |
14129
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
1538 def __iter__(self): |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
1539 d = self._repo.dirstate |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
1540 for f in d: |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
1541 if d[f] != 'r': |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
1542 yield f |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
1543 |
21845
04f5b5e3792e
committablectx: move __contains__ into workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21844
diff
changeset
|
1544 def __contains__(self, key): |
04f5b5e3792e
committablectx: move __contains__ into workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21844
diff
changeset
|
1545 return self._repo.dirstate[key] not in "?r" |
04f5b5e3792e
committablectx: move __contains__ into workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21844
diff
changeset
|
1546 |
25590
183965a00c76
context: override workingctx.hex() to avoid a crash
Matt Harbison <matt_harbison@yahoo.com>
parents:
25465
diff
changeset
|
1547 def hex(self): |
25738
04d26a3c96fd
workingctx: use node.wdirid constant
Yuya Nishihara <yuya@tcha.org>
parents:
25688
diff
changeset
|
1548 return hex(wdirid) |
25590
183965a00c76
context: override workingctx.hex() to avoid a crash
Matt Harbison <matt_harbison@yahoo.com>
parents:
25465
diff
changeset
|
1549 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
1550 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1551 def _parents(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1552 p = self._repo.dirstate.parents() |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1553 if p[1] == nullid: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1554 p = p[:-1] |
17330
32e9d63d9ba6
context: simplify workingctx._parents
Patrick Mezard <patrick@mezard.eu>
parents:
17207
diff
changeset
|
1555 return [changectx(self._repo, x) for x in p] |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1556 |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
1557 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
|
1558 """get a file context from the working directory""" |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
1559 return workingfilectx(self._repo, path, workingctx=self, |
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
1560 filelog=filelog) |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1561 |
16491
bfe89d65d651
update: make --check abort with dirty subrepos
Patrick Mezard <patrick@mezard.eu>
parents:
16410
diff
changeset
|
1562 def dirty(self, missing=False, merge=True, branch=True): |
8717
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
1563 "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
|
1564 # check subrepos first |
18364
6252b4f1c4b4
subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
18252
diff
changeset
|
1565 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
|
1566 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
|
1567 return True |
22f5ad0b5857
subrepo: dirtiness checks should iterate over subrepos
Edouard Gomez <ed.gomez@free.fr>
parents:
11106
diff
changeset
|
1568 # check current working dir |
16491
bfe89d65d651
update: make --check abort with dirty subrepos
Patrick Mezard <patrick@mezard.eu>
parents:
16410
diff
changeset
|
1569 return ((merge and self.p2()) or |
bfe89d65d651
update: make --check abort with dirty subrepos
Patrick Mezard <patrick@mezard.eu>
parents:
16410
diff
changeset
|
1570 (branch and self.branch() != self.p1().branch()) or |
8717
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
1571 self.modified() or self.added() or self.removed() or |
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
1572 (missing and self.deleted())) |
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
1573 |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1574 def add(self, list, prefix=""): |
27809
37a75d69eb43
with: use context manager for wlock in workingctx.add
Bryan O'Sullivan <bryano@fb.com>
parents:
27749
diff
changeset
|
1575 with self._repo.wlock(): |
37a75d69eb43
with: use context manager for wlock in workingctx.add
Bryan O'Sullivan <bryano@fb.com>
parents:
27749
diff
changeset
|
1576 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
|
1577 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
|
1578 rejected = [] |
19900
7c21e3398931
context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19734
diff
changeset
|
1579 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
|
1580 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
|
1581 # 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
|
1582 # 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
|
1583 # 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
|
1584 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
|
1585 try: |
19900
7c21e3398931
context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19734
diff
changeset
|
1586 st = lstat(f) |
14004
97ed99d1f419
eliminate various naked except clauses
Idan Kamara <idankk86@gmail.com>
parents:
13962
diff
changeset
|
1587 except OSError: |
33501
7008f6819002
context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
33499
diff
changeset
|
1588 ui.warn(_("%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
|
1589 rejected.append(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1590 continue |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1591 if st.st_size > 10000000: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1592 ui.warn(_("%s: up to %d MB of RAM may be required " |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1593 "to manage this file\n" |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1594 "(use 'hg revert %s' to cancel the " |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1595 "pending addition)\n") |
33501
7008f6819002
context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
33499
diff
changeset
|
1596 % (f, 3 * st.st_size // 1000000, uipath(f))) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1597 if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)): |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1598 ui.warn(_("%s not added: only files and symlinks " |
33501
7008f6819002
context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
33499
diff
changeset
|
1599 "supported currently\n") % uipath(f)) |
19900
7c21e3398931
context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19734
diff
changeset
|
1600 rejected.append(f) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1601 elif ds[f] in 'amn': |
33501
7008f6819002
context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
33499
diff
changeset
|
1602 ui.warn(_("%s already tracked!\n") % uipath(f)) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1603 elif ds[f] == 'r': |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1604 ds.normallookup(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1605 else: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1606 ds.add(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1607 return rejected |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1608 |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1609 def forget(self, files, prefix=""): |
27810
8c81975fe145
with: use context manager for wlock in workingctx.forget
Bryan O'Sullivan <bryano@fb.com>
parents:
27809
diff
changeset
|
1610 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
|
1611 ds = self._repo.dirstate |
7008f6819002
context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
33499
diff
changeset
|
1612 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
|
1613 rejected = [] |
14435
5f6090e559fa
context: make forget work like commands.forget
Matt Mackall <mpm@selenic.com>
parents:
14434
diff
changeset
|
1614 for f in files: |
16111
131d1a09108a
context: make workingctx.forget() really warn about untracked files
Patrick Mezard <patrick@mezard.eu>
parents:
15912
diff
changeset
|
1615 if f not in self._repo.dirstate: |
33501
7008f6819002
context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
33499
diff
changeset
|
1616 self._repo.ui.warn(_("%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
|
1617 rejected.append(f) |
16111
131d1a09108a
context: make workingctx.forget() really warn about untracked files
Patrick Mezard <patrick@mezard.eu>
parents:
15912
diff
changeset
|
1618 elif self._repo.dirstate[f] != 'a': |
131d1a09108a
context: make workingctx.forget() really warn about untracked files
Patrick Mezard <patrick@mezard.eu>
parents:
15912
diff
changeset
|
1619 self._repo.dirstate.remove(f) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1620 else: |
14434
cc8c09855d19
dirstate: rename forget to drop
Matt Mackall <mpm@selenic.com>
parents:
14429
diff
changeset
|
1621 self._repo.dirstate.drop(f) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1622 return rejected |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1623 |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1624 def undelete(self, list): |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1625 pctxs = self.parents() |
27811
09820fb88e14
with: use context manager for wlock in workingctx.undelete
Bryan O'Sullivan <bryano@fb.com>
parents:
27810
diff
changeset
|
1626 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
|
1627 ds = self._repo.dirstate |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1628 for f in list: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1629 if self._repo.dirstate[f] != 'r': |
33501
7008f6819002
context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
33499
diff
changeset
|
1630 self._repo.ui.warn(_("%s not removed!\n") % ds.pathto(f)) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1631 else: |
12360
4ae3e5dffa60
context: fix filectx.undelete() (issue2388)
Patrick Mezard <pmezard@gmail.com>
parents:
12344
diff
changeset
|
1632 fctx = f in pctxs[0] and pctxs[0][f] or pctxs[1][f] |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1633 t = fctx.data() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1634 self._repo.wwrite(f, t, fctx.flags()) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1635 self._repo.dirstate.normal(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1636 |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1637 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
|
1638 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
|
1639 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
|
1640 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
|
1641 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
|
1642 raise |
33501
7008f6819002
context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
33499
diff
changeset
|
1643 self._repo.ui.warn(_("%s does not exist!\n") |
7008f6819002
context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
33499
diff
changeset
|
1644 % self._repo.dirstate.pathto(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
|
1645 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
|
1646 if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)): |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1647 self._repo.ui.warn(_("copy failed: %s is not a file or a " |
33501
7008f6819002
context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
33499
diff
changeset
|
1648 "symbolic link\n") |
7008f6819002
context: name files relative to cwd in warning messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
33499
diff
changeset
|
1649 % self._repo.dirstate.pathto(dest)) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1650 else: |
27812
28d0c0ef327b
with: use context manager for wlock in copy
Bryan O'Sullivan <bryano@fb.com>
parents:
27811
diff
changeset
|
1651 with self._repo.wlock(): |
23402
2963d5c9d90b
rename: properly report removed and added file as modified (issue4458)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23401
diff
changeset
|
1652 if self._repo.dirstate[dest] in '?': |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1653 self._repo.dirstate.add(dest) |
23402
2963d5c9d90b
rename: properly report removed and added file as modified (issue4458)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23401
diff
changeset
|
1654 elif self._repo.dirstate[dest] in 'r': |
2963d5c9d90b
rename: properly report removed and added file as modified (issue4458)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23401
diff
changeset
|
1655 self._repo.dirstate.normallookup(dest) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1656 self._repo.dirstate.copy(source, dest) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1657 |
31397
9e57033fec0c
context: don't use mutable default argument value
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31360
diff
changeset
|
1658 def match(self, pats=None, include=None, exclude=None, default='glob', |
25465
f472228a9e5e
context: add an optional constructor parameter for a match.bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25435
diff
changeset
|
1659 listsubrepos=False, badfn=None): |
24790
baa11dde8c0e
match: add a subclass for dirstate normalizing of the matched patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24776
diff
changeset
|
1660 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
|
1661 |
baa11dde8c0e
match: add a subclass for dirstate normalizing of the matched patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24776
diff
changeset
|
1662 # 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
|
1663 # 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
|
1664 icasefs = not util.fscasesensitive(r.root) |
284b18303f61
match: replace icasefsmatch() function by flag to regular match()
Martin von Zweigbergk <martinvonz@google.com>
parents:
32433
diff
changeset
|
1665 return matchmod.match(r.root, r.getcwd(), pats, include, exclude, |
284b18303f61
match: replace icasefsmatch() function by flag to regular match()
Martin von Zweigbergk <martinvonz@google.com>
parents:
32433
diff
changeset
|
1666 default, auditor=r.auditor, ctx=self, |
284b18303f61
match: replace icasefsmatch() function by flag to regular match()
Martin von Zweigbergk <martinvonz@google.com>
parents:
32433
diff
changeset
|
1667 listsubrepos=listsubrepos, badfn=badfn, |
284b18303f61
match: replace icasefsmatch() function by flag to regular match()
Martin von Zweigbergk <martinvonz@google.com>
parents:
32433
diff
changeset
|
1668 icasefs=icasefs) |
24790
baa11dde8c0e
match: add a subclass for dirstate normalizing of the matched patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
24776
diff
changeset
|
1669 |
21393
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1670 def _filtersuspectsymlink(self, files): |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1671 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
|
1672 return files |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1673 |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1674 # 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
|
1675 # 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
|
1676 # 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
|
1677 # symlink |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1678 sane = [] |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1679 for f in files: |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1680 if self.flags(f) == 'l': |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1681 d = self[f].data() |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1682 if d == '' or len(d) >= 1024 or '\n' in d or util.binary(d): |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1683 self._repo.ui.debug('ignoring suspect symlink placeholder' |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1684 ' "%s"\n' % f) |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1685 continue |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1686 sane.append(f) |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1687 return sane |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1688 |
21395
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1689 def _checklookup(self, files): |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1690 # 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
|
1691 if not files: |
32141
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1692 return [], [], [] |
21395
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1693 |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1694 modified = [] |
32141
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1695 deleted = [] |
21395
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1696 fixup = [] |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1697 pctx = self._parents[0] |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1698 # 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
|
1699 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
|
1700 try: |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1701 # 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
|
1702 # directory in the interim, but fixing that is pretty hard. |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1703 if (f not in pctx or self.flags(f) != pctx.flags(f) |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1704 or pctx[f].cmp(self[f])): |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1705 modified.append(f) |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1706 else: |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1707 fixup.append(f) |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1708 except (IOError, OSError): |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1709 # 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
|
1710 # matching dirstate behavior (issue5584). |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1711 # 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
|
1712 # 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
|
1713 # 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
|
1714 # it's in the dirstate. |
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1715 deleted.append(f) |
21395
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1716 |
32831
add613cddcb6
workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents:
32801
diff
changeset
|
1717 return modified, deleted, fixup |
add613cddcb6
workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents:
32801
diff
changeset
|
1718 |
32832
6d73b7ff8f92
workingctx: also pass status tuple into poststatusfixup
Siddharth Agarwal <sid0@fb.com>
parents:
32831
diff
changeset
|
1719 def _poststatusfixup(self, status, fixup): |
32831
add613cddcb6
workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents:
32801
diff
changeset
|
1720 """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
|
1721 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
|
1722 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
|
1723 try: |
32772
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32748
diff
changeset
|
1724 oldid = self._repo.dirstate.identity() |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32748
diff
changeset
|
1725 |
21395
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1726 # 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
|
1727 # 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
|
1728 # 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
|
1729 # taking the lock |
27813
ff20fe74e5c6
with: use context manager for wlock in checklookup
Bryan O'Sullivan <bryano@fb.com>
parents:
27812
diff
changeset
|
1730 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
|
1731 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
|
1732 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
|
1733 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
|
1734 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
|
1735 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
|
1736 # 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
|
1737 # 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
|
1738 # 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
|
1739 # 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
|
1740 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
|
1741 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
|
1742 |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32832
diff
changeset
|
1743 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
|
1744 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
|
1745 ps(self, status) |
32772
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32748
diff
changeset
|
1746 else: |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32748
diff
changeset
|
1747 # 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
|
1748 # consistency, because .hg/dirstate was |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32748
diff
changeset
|
1749 # already changed simultaneously after last |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32748
diff
changeset
|
1750 # caching (see also issue5584 for detail) |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32748
diff
changeset
|
1751 self._repo.ui.debug('skip updating dirstate: ' |
dc7efa2826e4
context: avoid writing outdated dirstate out (issue5584)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32748
diff
changeset
|
1752 'identity mismatch\n') |
21395
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1753 except error.LockError: |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1754 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
|
1755 finally: |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32832
diff
changeset
|
1756 # 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
|
1757 self._repo.clearpostdsstatus() |
21395
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1758 |
33955
e43264525ce5
context: remove unnecessary default values for matchers (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33954
diff
changeset
|
1759 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
|
1760 '''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
|
1761 subrepos = [] |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1762 if '.hgsub' in self: |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1763 subrepos = sorted(self.substate) |
34351
ac0cd81e2f83
dirstate: use keyword arguments to clarify status()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents:
34350
diff
changeset
|
1764 cmp, s = self._repo.dirstate.status(match, subrepos, ignored=ignored, |
ac0cd81e2f83
dirstate: use keyword arguments to clarify status()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents:
34350
diff
changeset
|
1765 clean=clean, unknown=unknown) |
21397
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1766 |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1767 # check for any possibly clean files |
32831
add613cddcb6
workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents:
32801
diff
changeset
|
1768 fixup = [] |
21397
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1769 if cmp: |
32141
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1770 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
|
1771 s.modified.extend(modified2) |
32141
c850f0ed54c1
status: don't crash if a lookup file disappears
Siddharth Agarwal <sid0@fb.com>
parents:
32069
diff
changeset
|
1772 s.deleted.extend(deleted2) |
21397
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1773 |
34351
ac0cd81e2f83
dirstate: use keyword arguments to clarify status()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents:
34350
diff
changeset
|
1774 if fixup and clean: |
23303
3f269bd4826c
context.status: avoid de- and reconstructing status tuple
Martin von Zweigbergk <martinvonz@google.com>
parents:
23302
diff
changeset
|
1775 s.clean.extend(fixup) |
21397
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1776 |
32832
6d73b7ff8f92
workingctx: also pass status tuple into poststatusfixup
Siddharth Agarwal <sid0@fb.com>
parents:
32831
diff
changeset
|
1777 self._poststatusfixup(s, fixup) |
32831
add613cddcb6
workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents:
32801
diff
changeset
|
1778 |
23776
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1779 if match.always(): |
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1780 # cache for performance |
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1781 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
|
1782 # "_status" is cached with list*=False in the normal route |
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1783 self._status = scmutil.status(s.modified, s.added, s.removed, |
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1784 s.deleted, [], [], []) |
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1785 else: |
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1786 self._status = s |
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1787 |
23303
3f269bd4826c
context.status: avoid de- and reconstructing status tuple
Martin von Zweigbergk <martinvonz@google.com>
parents:
23302
diff
changeset
|
1788 return s |
21397
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1789 |
31269
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1790 @propertycache |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1791 def _manifest(self): |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1792 """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
|
1793 |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1794 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
|
1795 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
|
1796 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
|
1797 deleting newly added files. |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1798 """ |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1799 return self._buildstatusmanifest(self._status) |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1800 |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1801 def _buildstatusmanifest(self, status): |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1802 """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
|
1803 parents = self.parents() |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1804 |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1805 man = parents[0].manifest().copy() |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1806 |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1807 ff = self._flagfunc |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1808 for i, l in ((addednodeid, status.added), |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1809 (modifiednodeid, status.modified)): |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1810 for f in l: |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1811 man[f] = i |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1812 try: |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1813 man.setflag(f, ff(f)) |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1814 except OSError: |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1815 pass |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1816 |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1817 for f in status.deleted + status.removed: |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1818 if f in man: |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1819 del man[f] |
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 man |
6a9d0d24fdb4
context: move _manifest from committablectx to workingctx
Durham Goode <durham@fb.com>
parents:
31268
diff
changeset
|
1822 |
21480
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1823 def _buildstatus(self, other, s, match, listignored, listclean, |
21663
8d9449eaaeff
context: fix wrong indentation from renaming method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21616
diff
changeset
|
1824 listunknown): |
21480
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1825 """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
|
1826 |
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1827 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
|
1828 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
|
1829 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
|
1830 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
|
1831 """ |
23239
9fbb50444d55
context.status: call _dirstatestatus() from within _buildstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
23238
diff
changeset
|
1832 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
|
1833 # 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
|
1834 # 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
|
1835 # 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
|
1836 s.modified[:] = self._filtersuspectsymlink(s.modified) |
21480
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1837 if other != self._repo['.']: |
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1838 s = super(workingctx, self)._buildstatus(other, s, match, |
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1839 listignored, listclean, |
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1840 listunknown) |
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1841 return s |
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1842 |
23237
98f41a2f8fba
context.status: remove unused arguments from _matchstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
23236
diff
changeset
|
1843 def _matchstatus(self, other, match): |
21482
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1844 """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
|
1845 |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1846 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
|
1847 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
|
1848 comparing against the parent changeset. |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1849 |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1850 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
|
1851 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
|
1852 """ |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1853 if other != self._repo['.']: |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1854 def bad(f, msg): |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1855 # '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
|
1856 # 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
|
1857 if f not in other and not other.hasdir(f): |
21482
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1858 self._repo.ui.warn('%s: %s\n' % |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1859 (self._repo.dirstate.pathto(f), msg)) |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1860 match.bad = bad |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1861 return match |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1862 |
33353
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33283
diff
changeset
|
1863 def markcommitted(self, node): |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33283
diff
changeset
|
1864 super(workingctx, self).markcommitted(node) |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33283
diff
changeset
|
1865 |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33283
diff
changeset
|
1866 sparse.aftercommit(self._repo, node) |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33283
diff
changeset
|
1867 |
19733
51988f008df3
context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents:
19705
diff
changeset
|
1868 class committablefilectx(basefilectx): |
51988f008df3
context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents:
19705
diff
changeset
|
1869 """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
|
1870 that wants the ability to commit, e.g. workingfilectx or memfilectx.""" |
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
|
1871 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
|
1872 self._repo = repo |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1873 self._path = path |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1874 self._changeid = None |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1875 self._filerev = self._filenode = None |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1876 |
19149
921b64e1f7b9
filecontext: use 'is not None' to check for filelog existence
Durham Goode <durham@fb.com>
parents:
19061
diff
changeset
|
1877 if filelog is not None: |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1878 self._filelog = filelog |
19702
d25fdd4c2fd1
commitablefilectx: move __init__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19701
diff
changeset
|
1879 if ctx: |
d25fdd4c2fd1
commitablefilectx: move __init__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19701
diff
changeset
|
1880 self._changectx = ctx |
d25fdd4c2fd1
commitablefilectx: move __init__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19701
diff
changeset
|
1881 |
19703
d2936bec530b
commitablefilectx: move __nonzero__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19702
diff
changeset
|
1882 def __nonzero__(self): |
d2936bec530b
commitablefilectx: move __nonzero__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19702
diff
changeset
|
1883 return True |
d2936bec530b
commitablefilectx: move __nonzero__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19702
diff
changeset
|
1884 |
31483
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31473
diff
changeset
|
1885 __bool__ = __nonzero__ |
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31473
diff
changeset
|
1886 |
24420
065b886f61c6
committablefilectx: override linkrev() to point to the associated changectx
Yuya Nishihara <yuya@tcha.org>
parents:
24415
diff
changeset
|
1887 def linkrev(self): |
065b886f61c6
committablefilectx: override linkrev() to point to the associated changectx
Yuya Nishihara <yuya@tcha.org>
parents:
24415
diff
changeset
|
1888 # 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
|
1889 return self.rev() |
065b886f61c6
committablefilectx: override linkrev() to point to the associated changectx
Yuya Nishihara <yuya@tcha.org>
parents:
24415
diff
changeset
|
1890 |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1891 def parents(self): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1892 '''return parent filectxs, following copies if necessary''' |
8528
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1893 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
|
1894 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
|
1895 |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1896 path = self._path |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1897 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
|
1898 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
|
1899 renamed = self.renamed() |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1900 |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1901 if renamed: |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1902 pl = [renamed + (None,)] |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1903 else: |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1904 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
|
1905 |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1906 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
|
1907 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
|
1908 |
24817
0bb98eee531d
committablefilectx: propagate ancestry info to parent to fix annotation
Yuya Nishihara <yuya@tcha.org>
parents:
24816
diff
changeset
|
1909 return [self._parentfilectx(p, fileid=n, filelog=l) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1910 for p, n, l in pl if n != nullid] |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1911 |
19705
79792c8ea6da
commitablefilectx: move children from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19704
diff
changeset
|
1912 def children(self): |
79792c8ea6da
commitablefilectx: move children from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19704
diff
changeset
|
1913 return [] |
79792c8ea6da
commitablefilectx: move children from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19704
diff
changeset
|
1914 |
19733
51988f008df3
context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents:
19705
diff
changeset
|
1915 class workingfilectx(committablefilectx): |
19704
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1916 """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
|
1917 file in the working directory convenient.""" |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1918 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
|
1919 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
|
1920 |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1921 @propertycache |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1922 def _changectx(self): |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1923 return workingctx(self._repo) |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1924 |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1925 def data(self): |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1926 return self._repo.wread(self._path) |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1927 def renamed(self): |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1928 rp = self._repo.dirstate.copied(self._path) |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1929 if not rp: |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1930 return None |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1931 return rp, self._changectx._parents[0]._manifest.get(rp, nullid) |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1932 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1933 def size(self): |
19901
4d3ce1646dfc
context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19900
diff
changeset
|
1934 return self._repo.wvfs.lstat(self._path).st_size |
3962
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
1935 def date(self): |
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
1936 t, tz = self._changectx.date() |
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
1937 try: |
27016 | 1938 return (self._repo.wvfs.lstat(self._path).st_mtime, tz) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25600
diff
changeset
|
1939 except OSError as err: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1940 if err.errno != errno.ENOENT: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1941 raise |
3962
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
1942 return (t, tz) |
3310
0e370798eebf
context: add cmp for filectxs
Matt Mackall <mpm@selenic.com>
parents:
3302
diff
changeset
|
1943 |
33283
634b259079c5
workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents:
33098
diff
changeset
|
1944 def exists(self): |
634b259079c5
workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents:
33098
diff
changeset
|
1945 return self._repo.wvfs.exists(self._path) |
634b259079c5
workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents:
33098
diff
changeset
|
1946 |
634b259079c5
workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents:
33098
diff
changeset
|
1947 def lexists(self): |
634b259079c5
workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents:
33098
diff
changeset
|
1948 return self._repo.wvfs.lexists(self._path) |
634b259079c5
workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents:
33098
diff
changeset
|
1949 |
33098
eb4c49f55f1f
workingfilectx: add audit() as a wrapper for wvfs.audit()
Phil Cohen <phillco@fb.com>
parents:
33097
diff
changeset
|
1950 def audit(self): |
eb4c49f55f1f
workingfilectx: add audit() as a wrapper for wvfs.audit()
Phil Cohen <phillco@fb.com>
parents:
33097
diff
changeset
|
1951 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
|
1952 |
11702
eb07fbc21e9c
filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11605
diff
changeset
|
1953 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
|
1954 """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
|
1955 |
11702
eb07fbc21e9c
filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11605
diff
changeset
|
1956 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
|
1957 """ |
17425
e95ec38f86b0
fix wording and not-completely-trivial spelling errors and bad docstrings
Mads Kiilerich <mads@kiilerich.com>
parents:
17424
diff
changeset
|
1958 # 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
|
1959 # 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
|
1960 return fctx.cmp(self) |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1961 |
22073
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1962 def remove(self, ignoremissing=False): |
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1963 """wraps unlink for a repo's working directory""" |
31318
8908f985570c
vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents:
31271
diff
changeset
|
1964 self._repo.wvfs.unlinkpath(self._path, ignoremissing=ignoremissing) |
22073
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1965 |
33097
1e79c66d6b07
workingfilectx: add backgroundclose as a kwarg to write()
Phil Cohen <phillco@fb.com>
parents:
33096
diff
changeset
|
1966 def write(self, data, flags, backgroundclose=False): |
22073
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1967 """wraps repo.wwrite""" |
33097
1e79c66d6b07
workingfilectx: add backgroundclose as a kwarg to write()
Phil Cohen <phillco@fb.com>
parents:
33096
diff
changeset
|
1968 self._repo.wwrite(self._path, data, flags, |
1e79c66d6b07
workingfilectx: add backgroundclose as a kwarg to write()
Phil Cohen <phillco@fb.com>
parents:
33096
diff
changeset
|
1969 backgroundclose=backgroundclose) |
22073
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1970 |
34787
754b5117622f
context: add workingfilectx.markcopied
Phil Cohen <phillco@fb.com>
parents:
34783
diff
changeset
|
1971 def markcopied(self, src): |
754b5117622f
context: add workingfilectx.markcopied
Phil Cohen <phillco@fb.com>
parents:
34783
diff
changeset
|
1972 """marks this file a copy of `src`""" |
754b5117622f
context: add workingfilectx.markcopied
Phil Cohen <phillco@fb.com>
parents:
34783
diff
changeset
|
1973 if self._repo.dirstate[self._path] in "nma": |
754b5117622f
context: add workingfilectx.markcopied
Phil Cohen <phillco@fb.com>
parents:
34783
diff
changeset
|
1974 self._repo.dirstate.copy(src, self._path) |
754b5117622f
context: add workingfilectx.markcopied
Phil Cohen <phillco@fb.com>
parents:
34783
diff
changeset
|
1975 |
34054
65ae54582713
merge: move some of the logic in batchget() to workingfilectx
Phil Cohen <phillco@fb.com>
parents:
34017
diff
changeset
|
1976 def clearunknown(self): |
65ae54582713
merge: move some of the logic in batchget() to workingfilectx
Phil Cohen <phillco@fb.com>
parents:
34017
diff
changeset
|
1977 """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
|
1978 ``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
|
1979 """ |
65ae54582713
merge: move some of the logic in batchget() to workingfilectx
Phil Cohen <phillco@fb.com>
parents:
34017
diff
changeset
|
1980 wvfs = self._repo.wvfs |
34556
7a8a16f8ea22
context: also consider path conflicts when clearing unknown files
Mark Thomas <mbthomas@fb.com>
parents:
34480
diff
changeset
|
1981 f = self._path |
34833
07bbb208a924
context: audit paths before clearing unknown files and dirs
Mark Thomas <mbthomas@fb.com>
parents:
34787
diff
changeset
|
1982 wvfs.audit(f) |
34556
7a8a16f8ea22
context: also consider path conflicts when clearing unknown files
Mark Thomas <mbthomas@fb.com>
parents:
34480
diff
changeset
|
1983 if wvfs.isdir(f) and not wvfs.islink(f): |
7a8a16f8ea22
context: also consider path conflicts when clearing unknown files
Mark Thomas <mbthomas@fb.com>
parents:
34480
diff
changeset
|
1984 wvfs.rmtree(f, forcibly=True) |
7a8a16f8ea22
context: also consider path conflicts when clearing unknown files
Mark Thomas <mbthomas@fb.com>
parents:
34480
diff
changeset
|
1985 for p in reversed(list(util.finddirs(f))): |
7a8a16f8ea22
context: also consider path conflicts when clearing unknown files
Mark Thomas <mbthomas@fb.com>
parents:
34480
diff
changeset
|
1986 if wvfs.isfileorlink(p): |
7a8a16f8ea22
context: also consider path conflicts when clearing unknown files
Mark Thomas <mbthomas@fb.com>
parents:
34480
diff
changeset
|
1987 wvfs.unlink(p) |
7a8a16f8ea22
context: also consider path conflicts when clearing unknown files
Mark Thomas <mbthomas@fb.com>
parents:
34480
diff
changeset
|
1988 break |
34054
65ae54582713
merge: move some of the logic in batchget() to workingfilectx
Phil Cohen <phillco@fb.com>
parents:
34017
diff
changeset
|
1989 |
33096
873f638fd7db
merge: change repo.wvfs.setflags calls to a new wctx[f].setflags function
Phil Cohen <phillco@fb.com>
parents:
33038
diff
changeset
|
1990 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
|
1991 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
|
1992 |
35332
8e1386b342f7
overlayworkingctx: inherit from committablectx instead of workingctx
Phil Cohen <phillco@fb.com>
parents:
35331
diff
changeset
|
1993 class overlayworkingctx(committablectx): |
8e1386b342f7
overlayworkingctx: inherit from committablectx instead of workingctx
Phil Cohen <phillco@fb.com>
parents:
35331
diff
changeset
|
1994 """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
|
1995 converted into a commit context. |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
1996 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
1997 self._cache[path] maps to a dict with keys: { |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
1998 'exists': bool? |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
1999 'date': date? |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2000 'data': str? |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2001 'flags': str? |
35302
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2002 'copied': str? (path or None) |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2003 } |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2004 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
|
2005 is `False`, the file was deleted. |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2006 """ |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2007 |
35298
2f8c476c49fe
overlayworkingctx: move _wrappedctx out of the constructor
Phil Cohen <phillco@fb.com>
parents:
35295
diff
changeset
|
2008 def __init__(self, repo): |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2009 super(overlayworkingctx, self).__init__(repo) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2010 self._repo = repo |
35295
307b1689e3f8
overlayworkingctx: make clean() public
Phil Cohen <phillco@fb.com>
parents:
35294
diff
changeset
|
2011 self.clean() |
35298
2f8c476c49fe
overlayworkingctx: move _wrappedctx out of the constructor
Phil Cohen <phillco@fb.com>
parents:
35295
diff
changeset
|
2012 |
2f8c476c49fe
overlayworkingctx: move _wrappedctx out of the constructor
Phil Cohen <phillco@fb.com>
parents:
35295
diff
changeset
|
2013 def setbase(self, wrappedctx): |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2014 self._wrappedctx = wrappedctx |
35298
2f8c476c49fe
overlayworkingctx: move _wrappedctx out of the constructor
Phil Cohen <phillco@fb.com>
parents:
35295
diff
changeset
|
2015 self._parents = [wrappedctx] |
35336
777cb4497d8d
overlayworkingctx: invalidate the manifest cache when changing parents
Phil Cohen <phillco@fb.com>
parents:
35335
diff
changeset
|
2016 # 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
|
2017 # 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
|
2018 # ``overlayworkingctx`` (e.g. with --collapse). |
777cb4497d8d
overlayworkingctx: invalidate the manifest cache when changing parents
Phil Cohen <phillco@fb.com>
parents:
35335
diff
changeset
|
2019 util.clearcachedproperty(self, '_manifest') |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2020 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2021 def data(self, path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2022 if self.isdirty(path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2023 if self._cache[path]['exists']: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2024 if self._cache[path]['data']: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2025 return self._cache[path]['data'] |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2026 else: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2027 # Must fallback here, too, because we only set flags. |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2028 return self._wrappedctx[path].data() |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2029 else: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2030 raise error.ProgrammingError("No such file or directory: %s" % |
35303
d4f65050f3c5
overlayworkingctx: fix a bad reference to `self._path`
Phil Cohen <phillco@fb.com>
parents:
35302
diff
changeset
|
2031 path) |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2032 else: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2033 return self._wrappedctx[path].data() |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2034 |
35330
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2035 @propertycache |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2036 def _manifest(self): |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2037 parents = self.parents() |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2038 man = parents[0].manifest().copy() |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2039 |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2040 flag = self._flagfunc |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2041 for path in self.added(): |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2042 man[path] = addednodeid |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2043 man.setflag(path, flag(path)) |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2044 for path in self.modified(): |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2045 man[path] = modifiednodeid |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2046 man.setflag(path, flag(path)) |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2047 for path in self.removed(): |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2048 del man[path] |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2049 return man |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2050 |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2051 @propertycache |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2052 def _flagfunc(self): |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2053 def f(path): |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2054 return self._cache[path]['flags'] |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2055 return f |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2056 |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2057 def files(self): |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2058 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
|
2059 |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2060 def modified(self): |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2061 return [f for f in self._cache.keys() if self._cache[f]['exists'] and |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2062 self._existsinparent(f)] |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2063 |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2064 def added(self): |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2065 return [f for f in self._cache.keys() if self._cache[f]['exists'] and |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2066 not self._existsinparent(f)] |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2067 |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2068 def removed(self): |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2069 return [f for f in self._cache.keys() if |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2070 not self._cache[f]['exists'] and self._existsinparent(f)] |
2e1c32a9c97b
overlayworkingctx: add _manifest, files(), added(), removed(), modified()
Phil Cohen <phillco@fb.com>
parents:
35328
diff
changeset
|
2071 |
34681
4dc8a2ee0f4f
context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents:
34556
diff
changeset
|
2072 def isinmemory(self): |
4dc8a2ee0f4f
context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents:
34556
diff
changeset
|
2073 return True |
4dc8a2ee0f4f
context: add is `isinmemory()` to filectx
Phil Cohen <phillco@fb.com>
parents:
34556
diff
changeset
|
2074 |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2075 def filedate(self, path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2076 if self.isdirty(path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2077 return self._cache[path]['date'] |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2078 else: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2079 return self._wrappedctx[path].date() |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2080 |
35302
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2081 def markcopied(self, path, origin): |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2082 if self.isdirty(path): |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2083 self._cache[path]['copied'] = origin |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2084 else: |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2085 raise error.ProgrammingError('markcopied() called on clean context') |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2086 |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2087 def copydata(self, path): |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2088 if self.isdirty(path): |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2089 return self._cache[path]['copied'] |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2090 else: |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2091 raise error.ProgrammingError('copydata() called on clean context') |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2092 |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2093 def flags(self, path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2094 if self.isdirty(path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2095 if self._cache[path]['exists']: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2096 return self._cache[path]['flags'] |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2097 else: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2098 raise error.ProgrammingError("No such file or directory: %s" % |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2099 self._path) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2100 else: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2101 return self._wrappedctx[path].flags() |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2102 |
35304
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2103 def _existsinparent(self, path): |
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2104 try: |
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2105 # ``commitctx` raises a ``ManifestLookupError`` if a path does not |
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2106 # exist, unlike ``workingctx``, which returns a ``workingfilectx`` |
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2107 # with an ``exists()`` function. |
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2108 self._wrappedctx[path] |
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2109 return True |
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2110 except error.ManifestLookupError: |
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2111 return False |
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2112 |
35333
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2113 def _auditconflicts(self, path): |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2114 """Replicates conflict checks done by wvfs.write(). |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2115 |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2116 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
|
2117 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
|
2118 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
|
2119 """ |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2120 def fail(path, component): |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2121 # 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
|
2122 # files. |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2123 if 'l' in self.p1()[component].flags(): |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2124 raise error.Abort("error: %s conflicts with symlink %s " |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2125 "in %s." % (path, component, |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2126 self.p1().rev())) |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2127 else: |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2128 raise error.Abort("error: '%s' conflicts with file '%s' in " |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2129 "%s." % (path, component, |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2130 self.p1().rev())) |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2131 |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2132 # 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
|
2133 # is not a file in p1. |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2134 components = path.split('/') |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2135 for i in xrange(len(components)): |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2136 component = "/".join(components[0:i]) |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2137 if component in self.p1(): |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2138 fail(path, component) |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2139 |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2140 # Test the other direction -- that this path from p2 isn't a directory |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2141 # in p1 (test that p1 doesn't any paths matching `path/*`). |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2142 match = matchmod.match('/', '', [path + '/'], default=b'relpath') |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2143 matches = self.p1().manifest().matches(match) |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2144 if len(matches) > 0: |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2145 if len(matches) == 1 and matches.keys()[0] == path: |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2146 return |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2147 raise error.Abort("error: file '%s' cannot be written because " |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2148 " '%s/' is a folder in %s (containing %d " |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2149 "entries: %s)" |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2150 % (path, path, self.p1(), len(matches), |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2151 ', '.join(matches.keys()))) |
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2152 |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2153 def write(self, path, data, flags=''): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2154 if data is None: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2155 raise error.ProgrammingError("data must be non-None") |
35333
72fbdd373de8
overlayworkingctx: add _auditconflicts to write()
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
2156 self._auditconflicts(path) |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2157 self._markdirty(path, exists=True, data=data, date=util.makedate(), |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2158 flags=flags) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2159 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2160 def setflags(self, path, l, x): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2161 self._markdirty(path, exists=True, date=util.makedate(), |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2162 flags=(l and 'l' or '') + (x and 'x' or '')) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2163 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2164 def remove(self, path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2165 self._markdirty(path, exists=False) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2166 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2167 def exists(self, path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2168 """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
|
2169 return False if they are broken. |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2170 """ |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2171 if self.isdirty(path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2172 # 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
|
2173 # exists on the destination path. |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2174 if (self._cache[path]['exists'] and |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2175 'l' in self._cache[path]['flags']): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2176 return self.exists(self._cache[path]['data'].strip()) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2177 else: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2178 return self._cache[path]['exists'] |
35304
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2179 |
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2180 return self._existsinparent(path) |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2181 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2182 def lexists(self, path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2183 """lexists returns True if the path exists""" |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2184 if self.isdirty(path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2185 return self._cache[path]['exists'] |
35304
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2186 |
bea46aed1e1b
overlayworkingctx: add `_checkexist(path)`
Phil Cohen <phillco@fb.com>
parents:
35303
diff
changeset
|
2187 return self._existsinparent(path) |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2188 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2189 def size(self, path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2190 if self.isdirty(path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2191 if self._cache[path]['exists']: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2192 return len(self._cache[path]['data']) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2193 else: |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2194 raise error.ProgrammingError("No such file or directory: %s" % |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2195 self._path) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2196 return self._wrappedctx[path].size() |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2197 |
35334
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2198 def tomemctx(self, text, branch=None, extra=None, date=None, parents=None, |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2199 user=None, editor=None): |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2200 """Converts this ``overlayworkingctx`` into a ``memctx`` ready to be |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2201 committed. |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2202 |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2203 ``text`` is the commit message. |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2204 ``parents`` (optional) are rev numbers. |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2205 """ |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2206 # Default parents to the wrapped contexts' if not passed. |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2207 if parents is None: |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2208 parents = self._wrappedctx.parents() |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2209 if len(parents) == 1: |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2210 parents = (parents[0], None) |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2211 |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2212 # ``parents`` is passed as rev numbers; convert to ``commitctxs``. |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2213 if parents[1] is None: |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2214 parents = (self._repo[parents[0]], None) |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2215 else: |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2216 parents = (self._repo[parents[0]], self._repo[parents[1]]) |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2217 |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2218 files = self._cache.keys() |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2219 def getfile(repo, memctx, path): |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2220 if self._cache[path]['exists']: |
35407
8a0cac20a1ad
memfilectx: make changectx argument mandatory in constructor (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
35362
diff
changeset
|
2221 return memfilectx(repo, memctx, path, |
35334
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2222 self._cache[path]['data'], |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2223 'l' in self._cache[path]['flags'], |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2224 'x' in self._cache[path]['flags'], |
35407
8a0cac20a1ad
memfilectx: make changectx argument mandatory in constructor (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
35362
diff
changeset
|
2225 self._cache[path]['copied']) |
35334
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2226 else: |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2227 # Returning None, but including the path in `files`, is |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2228 # necessary for memctx to register a deletion. |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2229 return None |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2230 return memctx(self._repo, parents, text, files, getfile, date=date, |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2231 extra=extra, user=user, branch=branch, editor=editor) |
71edd38c4bb4
overlayworkingctx: add ``tomemctx()``
Phil Cohen <phillco@fb.com>
parents:
35333
diff
changeset
|
2232 |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2233 def isdirty(self, path): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2234 return path in self._cache |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2235 |
35328
228916ca12b5
rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents:
35304
diff
changeset
|
2236 def isempty(self): |
228916ca12b5
rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents:
35304
diff
changeset
|
2237 # 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
|
2238 # commit check. |
228916ca12b5
rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents:
35304
diff
changeset
|
2239 self._compact() |
228916ca12b5
rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents:
35304
diff
changeset
|
2240 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
|
2241 |
35295
307b1689e3f8
overlayworkingctx: make clean() public
Phil Cohen <phillco@fb.com>
parents:
35294
diff
changeset
|
2242 def clean(self): |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2243 self._cache = {} |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2244 |
35335
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2245 def _compact(self): |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2246 """Removes keys from the cache that are actually clean, by comparing |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2247 them with the underlying context. |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2248 |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2249 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
|
2250 to resolve a conflict. |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2251 """ |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2252 keys = [] |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2253 for path in self._cache.keys(): |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2254 cache = self._cache[path] |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2255 try: |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2256 underlying = self._wrappedctx[path] |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2257 if (underlying.data() == cache['data'] and |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2258 underlying.flags() == cache['flags']): |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2259 keys.append(path) |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2260 except error.ManifestLookupError: |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2261 # Path not in the underlying manifest (created). |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2262 continue |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2263 |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2264 for path in keys: |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2265 del self._cache[path] |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2266 return keys |
dc9da4f4f363
overlayworkingctx: add `_compact()`
Phil Cohen <phillco@fb.com>
parents:
35334
diff
changeset
|
2267 |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2268 def _markdirty(self, path, exists, data=None, date=None, flags=''): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2269 self._cache[path] = { |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2270 'exists': exists, |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2271 'data': data, |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2272 'date': date, |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2273 'flags': flags, |
35302
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2274 'copied': None, |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2275 } |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2276 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2277 def filectx(self, path, filelog=None): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2278 return overlayworkingfilectx(self._repo, path, parent=self, |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2279 filelog=filelog) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2280 |
35332
8e1386b342f7
overlayworkingctx: inherit from committablectx instead of workingctx
Phil Cohen <phillco@fb.com>
parents:
35331
diff
changeset
|
2281 class overlayworkingfilectx(committablefilectx): |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2282 """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
|
2283 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
|
2284 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2285 def __init__(self, repo, path, filelog=None, parent=None): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2286 super(overlayworkingfilectx, self).__init__(repo, path, filelog, |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2287 parent) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2288 self._repo = repo |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2289 self._parent = parent |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2290 self._path = path |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2291 |
34783
0c812885586b
context: add overlayfilectx.cmp()
Phil Cohen <phillco@fb.com>
parents:
34685
diff
changeset
|
2292 def cmp(self, fctx): |
0c812885586b
context: add overlayfilectx.cmp()
Phil Cohen <phillco@fb.com>
parents:
34685
diff
changeset
|
2293 return self.data() != fctx.data() |
0c812885586b
context: add overlayfilectx.cmp()
Phil Cohen <phillco@fb.com>
parents:
34685
diff
changeset
|
2294 |
35290
010179e21e91
context: switch ctx() use to changectx()
Phil Cohen <phillco@fb.com>
parents:
35280
diff
changeset
|
2295 def changectx(self): |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2296 return self._parent |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2297 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2298 def data(self): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2299 return self._parent.data(self._path) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2300 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2301 def date(self): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2302 return self._parent.filedate(self._path) |
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 exists(self): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2305 return self.lexists() |
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 lexists(self): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2308 return self._parent.exists(self._path) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2309 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2310 def renamed(self): |
35302
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2311 path = self._parent.copydata(self._path) |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2312 if not path: |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2313 return None |
35302
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2314 return path, self._changectx._parents[0]._manifest.get(path, nullid) |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2315 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2316 def size(self): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2317 return self._parent.size(self._path) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2318 |
35302
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2319 def markcopied(self, origin): |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2320 self._parent.markcopied(self._path, origin) |
8b3a636bb341
overlayworkingctx: track copy information in the context
Phil Cohen <phillco@fb.com>
parents:
35298
diff
changeset
|
2321 |
34119
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2322 def audit(self): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2323 pass |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2324 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2325 def flags(self): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2326 return self._parent.flags(self._path) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2327 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2328 def setflags(self, islink, isexec): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2329 return self._parent.setflags(self._path, islink, isexec) |
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 write(self, data, flags, backgroundclose=False): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2332 return self._parent.write(self._path, data, flags) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2333 |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2334 def remove(self, ignoremissing=False): |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2335 return self._parent.remove(self._path) |
f698bb31bdfb
context: add overlayworkingcontext and overlayworkingfilectx
Phil Cohen <phillco@fb.com>
parents:
34068
diff
changeset
|
2336 |
35331
baf58e621363
overlayworkingctx: add a no-op ``clearunknown()``
Phil Cohen <phillco@fb.com>
parents:
35330
diff
changeset
|
2337 def clearunknown(self): |
baf58e621363
overlayworkingctx: add a no-op ``clearunknown()``
Phil Cohen <phillco@fb.com>
parents:
35330
diff
changeset
|
2338 pass |
baf58e621363
overlayworkingctx: add a no-op ``clearunknown()``
Phil Cohen <phillco@fb.com>
parents:
35330
diff
changeset
|
2339 |
23710
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
2340 class workingcommitctx(workingctx): |
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
2341 """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
|
2342 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
|
2343 |
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
2344 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
|
2345 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
|
2346 """ |
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
2347 def __init__(self, repo, changes, |
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
2348 text="", user=None, date=None, extra=None): |
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
2349 super(workingctx, self).__init__(repo, text, user, date, extra, |
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
2350 changes) |
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
2351 |
33955
e43264525ce5
context: remove unnecessary default values for matchers (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33954
diff
changeset
|
2352 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
|
2353 """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
|
2354 |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2355 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
|
2356 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
|
2357 """ |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2358 if clean: |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2359 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
|
2360 else: |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2361 clean = [] |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2362 return scmutil.status([f for f in self._status.modified if match(f)], |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2363 [f for f in self._status.added if match(f)], |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2364 [f for f in self._status.removed if match(f)], |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2365 [], [], [], clean) |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2366 |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2367 @propertycache |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2368 def _changedset(self): |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2369 """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
|
2370 """ |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2371 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
|
2372 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
|
2373 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
|
2374 return changed |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
2375 |
27906
c183f7b79541
context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27813
diff
changeset
|
2376 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
|
2377 """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
|
2378 |
c183f7b79541
context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27813
diff
changeset
|
2379 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
|
2380 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
|
2381 memctx. |
c183f7b79541
context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27813
diff
changeset
|
2382 """ |
c183f7b79541
context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27813
diff
changeset
|
2383 cache = {} |
c183f7b79541
context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27813
diff
changeset
|
2384 |
c183f7b79541
context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27813
diff
changeset
|
2385 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
|
2386 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
|
2387 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
|
2388 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
|
2389 |
c183f7b79541
context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27813
diff
changeset
|
2390 return getfilectx |
c183f7b79541
context: don't use util.cachefunc due to cycle creation (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27813
diff
changeset
|
2391 |
32783
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2392 def memfilefromctx(ctx): |
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2393 """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
|
2394 |
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2395 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
|
2396 context. |
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2397 """ |
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2398 def getfilectx(repo, memctx, path): |
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2399 fctx = ctx[path] |
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2400 # this is weird but apparently we only keep track of one parent |
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2401 # (why not only store that instead of a tuple?) |
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2402 copied = fctx.renamed() |
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2403 if copied: |
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2404 copied = copied[0] |
35407
8a0cac20a1ad
memfilectx: make changectx argument mandatory in constructor (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
35362
diff
changeset
|
2405 return memfilectx(repo, memctx, path, fctx.data(), |
32783
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2406 islink=fctx.islink(), isexec=fctx.isexec(), |
35407
8a0cac20a1ad
memfilectx: make changectx argument mandatory in constructor (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
35362
diff
changeset
|
2407 copied=copied) |
32783
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2408 |
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2409 return getfilectx |
34be21aa2b26
memctx: refactor inline getfilectx into convenience method
Sean Farley <sean@farley.io>
parents:
32772
diff
changeset
|
2410 |
32784
ec302748edd8
context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents:
32783
diff
changeset
|
2411 def memfilefrompatch(patchstore): |
ec302748edd8
context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents:
32783
diff
changeset
|
2412 """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
|
2413 |
ec302748edd8
context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents:
32783
diff
changeset
|
2414 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
|
2415 """ |
ec302748edd8
context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents:
32783
diff
changeset
|
2416 def getfilectx(repo, memctx, path): |
ec302748edd8
context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents:
32783
diff
changeset
|
2417 data, mode, copied = patchstore.getfile(path) |
ec302748edd8
context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents:
32783
diff
changeset
|
2418 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
|
2419 return None |
ec302748edd8
context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents:
32783
diff
changeset
|
2420 islink, isexec = mode |
35407
8a0cac20a1ad
memfilectx: make changectx argument mandatory in constructor (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
35362
diff
changeset
|
2421 return memfilectx(repo, memctx, path, data, islink=islink, |
8a0cac20a1ad
memfilectx: make changectx argument mandatory in constructor (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
35362
diff
changeset
|
2422 isexec=isexec, copied=copied) |
32784
ec302748edd8
context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents:
32783
diff
changeset
|
2423 |
ec302748edd8
context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents:
32783
diff
changeset
|
2424 return getfilectx |
ec302748edd8
context: add convenience method for returning a memfilectx from a patch
Sean Farley <sean@farley.io>
parents:
32783
diff
changeset
|
2425 |
21665
d2743be1bb06
memctx: inherit from committablectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21664
diff
changeset
|
2426 class memctx(committablectx): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2427 """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
|
2428 |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2429 Revision information is supplied at initialization time while |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2430 related files data and is made available through a callback |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2431 mechanism. 'repo' is the current localrepo, 'parents' is a |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2432 sequence of two parent revisions identifiers (pass None for every |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2433 missing parent), 'text' is the commit message and 'files' lists |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2434 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
|
2435 repository root). |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2436 |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2437 filectxfn(repo, memctx, path) is a callable receiving the |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2438 repository, the current memctx object and the normalized path of |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2439 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
|
2440 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
|
2441 undefined. If the file is available in the revision being |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2442 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
|
2443 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
|
2444 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
|
2445 removed and the new file added with copy information (see |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2446 memfilectx). |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2447 |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2448 user receives the committer name and defaults to current |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2449 repository username, date is the commit date in any format |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2450 supported by util.parsedate() and defaults to current date, extra |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2451 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
|
2452 """ |
22313
d226fe36e362
memctx: allow extensions to determine what filectxfn should do
Siddharth Agarwal <sid0@fb.com>
parents:
22296
diff
changeset
|
2453 |
d226fe36e362
memctx: allow extensions to determine what filectxfn should do
Siddharth Agarwal <sid0@fb.com>
parents:
22296
diff
changeset
|
2454 # 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
|
2455 # 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
|
2456 # 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
|
2457 _returnnoneformissingfiles = True |
d226fe36e362
memctx: allow extensions to determine what filectxfn should do
Siddharth Agarwal <sid0@fb.com>
parents:
22296
diff
changeset
|
2458 |
6721
521c6c6f3b9b
kill some trailing spaces
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6718
diff
changeset
|
2459 def __init__(self, repo, parents, text, files, filectxfn, user=None, |
32785
041d976b662a
context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents:
32784
diff
changeset
|
2460 date=None, extra=None, branch=None, editor=False): |
21666
31bdc51b0f1e
memctx: call super.__init__ instead of duplicating code
Sean Farley <sean.michael.farley@gmail.com>
parents:
21665
diff
changeset
|
2461 super(memctx, self).__init__(repo, text, user, date, extra) |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2462 self._rev = None |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2463 self._node = None |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2464 parents = [(p or nullid) for p in parents] |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2465 p1, p2 = parents |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6744
diff
changeset
|
2466 self._parents = [changectx(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
|
2467 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
|
2468 self._files = files |
32785
041d976b662a
context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents:
32784
diff
changeset
|
2469 if branch is not None: |
041d976b662a
context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents:
32784
diff
changeset
|
2470 self._extra['branch'] = encoding.fromlocal(branch) |
21938
c8411fb5dfef
memctx: substate needs to be {} instead of None
Sean Farley <sean.michael.farley@gmail.com>
parents:
21895
diff
changeset
|
2471 self.substate = {} |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2472 |
32785
041d976b662a
context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents:
32784
diff
changeset
|
2473 if isinstance(filectxfn, patch.filestore): |
32801
448fc659a430
memctx: always use cache for filectxfn
Sean Farley <sean@farley.io>
parents:
32785
diff
changeset
|
2474 filectxfn = memfilefrompatch(filectxfn) |
32785
041d976b662a
context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents:
32784
diff
changeset
|
2475 elif not callable(filectxfn): |
041d976b662a
context: inline makememctx (API)
Sean Farley <sean@farley.io>
parents:
32784
diff
changeset
|
2476 # 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
|
2477 filectxfn = memfilefromctx(filectxfn) |
448fc659a430
memctx: always use cache for filectxfn
Sean Farley <sean@farley.io>
parents:
32785
diff
changeset
|
2478 |
448fc659a430
memctx: always use cache for filectxfn
Sean Farley <sean@farley.io>
parents:
32785
diff
changeset
|
2479 # 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
|
2480 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
|
2481 |
21238
25d6fdc0294a
context: move editor invocation from "makememctx()" to "memctx.__init__()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21203
diff
changeset
|
2482 if editor: |
25d6fdc0294a
context: move editor invocation from "makememctx()" to "memctx.__init__()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21203
diff
changeset
|
2483 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
|
2484 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
|
2485 |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2486 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
|
2487 """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
|
2488 |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22207
diff
changeset
|
2489 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
|
2490 return self._filectxfn(self._repo, self, path) |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2491 |
11151
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
2492 def commit(self): |
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
2493 """commit context to the repo""" |
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
2494 return self._repo.commitctx(self) |
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
2495 |
21835
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2496 @propertycache |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2497 def _manifest(self): |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2498 """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
|
2499 |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2500 # 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
|
2501 pctx = self._parents[0] |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2502 man = pctx.manifest().copy() |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2503 |
23603
d74eb8d477d5
memctx: calculate manifest more efficiently
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23602
diff
changeset
|
2504 for f in self._status.modified: |
21835
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2505 p1node = nullid |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2506 p2node = nullid |
22075
2f0358275501
memctx: add note about p2
Sean Farley <sean.michael.farley@gmail.com>
parents:
22074
diff
changeset
|
2507 p = pctx[f].parents() # if file isn't in pctx, check p2? |
21835
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2508 if len(p) > 0: |
27983
b7af616ca675
memctx: fix memctx manifest file hashes
Durham Goode <durham@fb.com>
parents:
27941
diff
changeset
|
2509 p1node = p[0].filenode() |
21835
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2510 if len(p) > 1: |
27983
b7af616ca675
memctx: fix memctx manifest file hashes
Durham Goode <durham@fb.com>
parents:
27941
diff
changeset
|
2511 p2node = p[1].filenode() |
23603
d74eb8d477d5
memctx: calculate manifest more efficiently
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23602
diff
changeset
|
2512 man[f] = revlog.hash(self[f].data(), p1node, p2node) |
21835
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2513 |
23588
87a76cff7147
memctx: calculate manifest including newly added files correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23587
diff
changeset
|
2514 for f in self._status.added: |
87a76cff7147
memctx: calculate manifest including newly added files correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23587
diff
changeset
|
2515 man[f] = revlog.hash(self[f].data(), nullid, nullid) |
87a76cff7147
memctx: calculate manifest including newly added files correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23587
diff
changeset
|
2516 |
23589
200215cdf7aa
memctx: calculate manifest correctly with newly-removed files (issue4470)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23588
diff
changeset
|
2517 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
|
2518 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
|
2519 del man[f] |
21835
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2520 |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2521 return man |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
2522 |
23587
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2523 @propertycache |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2524 def _status(self): |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2525 """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
|
2526 """ |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2527 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
|
2528 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
|
2529 # "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
|
2530 # 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
|
2531 # 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
|
2532 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
|
2533 man2 = p2.manifest() |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2534 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
|
2535 else: |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2536 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
|
2537 |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2538 modified, added, removed = [], [], [] |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2539 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
|
2540 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
|
2541 added.append(f) |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2542 elif self[f]: |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2543 modified.append(f) |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2544 else: |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2545 removed.append(f) |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2546 |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
2547 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
|
2548 |
21688
cc677803bad4
memfilectx: inherit from committablefilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21687
diff
changeset
|
2549 class memfilectx(committablefilectx): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2550 """memfilectx represents an in-memory file to commit. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2551 |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23110
diff
changeset
|
2552 See memctx and committablefilectx for more details. |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2553 """ |
35407
8a0cac20a1ad
memfilectx: make changectx argument mandatory in constructor (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
35362
diff
changeset
|
2554 def __init__(self, repo, changectx, path, data, islink=False, |
8a0cac20a1ad
memfilectx: make changectx argument mandatory in constructor (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
35362
diff
changeset
|
2555 isexec=False, copied=None): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2556 """ |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2557 path is the normalized file path relative to repository root. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2558 data is the file content as a string. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2559 islink is True if the file is a symbolic link. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2560 isexec is True if the file is executable. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
2561 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
|
2562 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
|
2563 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
|
2564 self._data = data |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2565 self._flags = (islink and 'l' or '') + (isexec and 'x' or '') |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2566 self._copied = None |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2567 if copied: |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2568 self._copied = (copied, nullid) |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
2569 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
2570 def data(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
2571 return self._data |
22074
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
2572 |
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
2573 def remove(self, ignoremissing=False): |
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
2574 """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
|
2575 # 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
|
2576 del self._changectx[self._path] |
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
2577 |
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
2578 def write(self, data, flags): |
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
2579 """wraps repo.wwrite""" |
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
2580 self._data = data |
30572
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2581 |
32283
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2582 class overlayfilectx(committablefilectx): |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2583 """Like memfilectx but take an original filectx and optional parameters to |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2584 override parts of it. This is useful when fctx.data() is expensive (i.e. |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2585 flag processor is expensive) and raw data, flags, and filenode could be |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2586 reused (ex. rebase or mode-only amend a REVIDX_EXTSTORED file). |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2587 """ |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2588 |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2589 def __init__(self, originalfctx, datafunc=None, path=None, flags=None, |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2590 copied=None, ctx=None): |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2591 """originalfctx: filecontext to duplicate |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2592 |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2593 datafunc: None or a function to override data (file content). It is a |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2594 function to be lazy. path, flags, copied, ctx: None or overridden value |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2595 |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2596 copied could be (path, rev), or False. copied could also be just path, |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2597 and will be converted to (path, nullid). This simplifies some callers. |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2598 """ |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2599 |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2600 if path is None: |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2601 path = originalfctx.path() |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2602 if ctx is None: |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2603 ctx = originalfctx.changectx() |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2604 ctxmatch = lambda: True |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2605 else: |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2606 ctxmatch = lambda: ctx == originalfctx.changectx() |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2607 |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2608 repo = originalfctx.repo() |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2609 flog = originalfctx.filelog() |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2610 super(overlayfilectx, self).__init__(repo, path, flog, ctx) |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2611 |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2612 if copied is None: |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2613 copied = originalfctx.renamed() |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2614 copiedmatch = lambda: True |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2615 else: |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2616 if copied and not isinstance(copied, tuple): |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2617 # repo._filecommit will recalculate copyrev so nullid is okay |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2618 copied = (copied, nullid) |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2619 copiedmatch = lambda: copied == originalfctx.renamed() |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2620 |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2621 # When data, copied (could affect data), ctx (could affect filelog |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2622 # parents) are not overridden, rawdata, rawflags, and filenode may be |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2623 # reused (repo._filecommit should double check filelog parents). |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2624 # |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2625 # path, flags are not hashed in filelog (but in manifestlog) so they do |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2626 # not affect reusable here. |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2627 # |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2628 # If ctx or copied is overridden to a same value with originalfctx, |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2629 # still consider it's reusable. originalfctx.renamed() may be a bit |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2630 # expensive so it's not called unless necessary. Assuming datafunc is |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2631 # always expensive, do not call it for this "reusable" test. |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2632 reusable = datafunc is None and ctxmatch() and copiedmatch() |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2633 |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2634 if datafunc is None: |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2635 datafunc = originalfctx.data |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2636 if flags is None: |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2637 flags = originalfctx.flags() |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2638 |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2639 self._datafunc = datafunc |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2640 self._flags = flags |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2641 self._copied = copied |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2642 |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2643 if reusable: |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2644 # copy extra fields from originalfctx |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2645 attrs = ['rawdata', 'rawflags', '_filenode', '_filerev'] |
34432
52e9310626a8
context: rename local 'attr' to 'attr_'
Siddharth Agarwal <sid0@fb.com>
parents:
34431
diff
changeset
|
2646 for attr_ in attrs: |
52e9310626a8
context: rename local 'attr' to 'attr_'
Siddharth Agarwal <sid0@fb.com>
parents:
34431
diff
changeset
|
2647 if util.safehasattr(originalfctx, attr_): |
52e9310626a8
context: rename local 'attr' to 'attr_'
Siddharth Agarwal <sid0@fb.com>
parents:
34431
diff
changeset
|
2648 setattr(self, attr_, getattr(originalfctx, attr_)) |
32283
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2649 |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2650 def data(self): |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2651 return self._datafunc() |
07da778f3b58
filectx: add an overlayfilectx class
Jun Wu <quark@fb.com>
parents:
32282
diff
changeset
|
2652 |
30572
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2653 class metadataonlyctx(committablectx): |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2654 """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
|
2655 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
|
2656 metadata-only changes. |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2657 |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2658 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
|
2659 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
|
2660 '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
|
2661 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
|
2662 |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2663 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
|
2664 username, date is the commit date in any format supported by |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2665 util.parsedate() and defaults to current date, extra is a dictionary of |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2666 metadata or is left empty. |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2667 """ |
30614
9bf43a72b49d
context: correct metadataonlyctx's parameter
Jun Wu <quark@fb.com>
parents:
30572
diff
changeset
|
2668 def __new__(cls, repo, originalctx, *args, **kwargs): |
30572
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2669 return super(metadataonlyctx, cls).__new__(cls, repo) |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2670 |
34016
becce02036e1
context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents:
33955
diff
changeset
|
2671 def __init__(self, repo, originalctx, parents=None, text=None, user=None, |
becce02036e1
context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents:
33955
diff
changeset
|
2672 date=None, extra=None, editor=False): |
becce02036e1
context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents:
33955
diff
changeset
|
2673 if text is None: |
becce02036e1
context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents:
33955
diff
changeset
|
2674 text = originalctx.description() |
30572
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2675 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
|
2676 self._rev = None |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2677 self._node = None |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2678 self._originalctx = originalctx |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2679 self._manifestnode = originalctx.manifestnode() |
34016
becce02036e1
context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents:
33955
diff
changeset
|
2680 if parents is None: |
becce02036e1
context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents:
33955
diff
changeset
|
2681 parents = originalctx.parents() |
becce02036e1
context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents:
33955
diff
changeset
|
2682 else: |
becce02036e1
context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents:
33955
diff
changeset
|
2683 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
|
2684 parents = parents[:] |
becce02036e1
context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents:
33955
diff
changeset
|
2685 while len(parents) < 2: |
becce02036e1
context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents:
33955
diff
changeset
|
2686 parents.append(repo[nullid]) |
becce02036e1
context: make parents and text optional in metadataonlyctx
Jun Wu <quark@fb.com>
parents:
33955
diff
changeset
|
2687 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
|
2688 |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2689 # 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
|
2690 # manifests of our commit parents |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2691 mp1, mp2 = self.manifestctx().parents |
31840
7973e0a15bd4
metadataonlyctx: replace "changeset()[0]" to "manifestnode()"
Jun Wu <quark@fb.com>
parents:
31668
diff
changeset
|
2692 if p1 != nullid and p1.manifestnode() != mp1: |
30572
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2693 raise RuntimeError('can\'t reuse the manifest: ' |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2694 'its p1 doesn\'t match the new ctx p1') |
31840
7973e0a15bd4
metadataonlyctx: replace "changeset()[0]" to "manifestnode()"
Jun Wu <quark@fb.com>
parents:
31668
diff
changeset
|
2695 if p2 != nullid and p2.manifestnode() != mp2: |
30572
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2696 raise RuntimeError('can\'t reuse the manifest: ' |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2697 'its p2 doesn\'t match the new ctx p2') |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2698 |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2699 self._files = originalctx.files() |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2700 self.substate = {} |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2701 |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2702 if editor: |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2703 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
|
2704 self._repo.savecommitmessage(self._text) |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2705 |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2706 def manifestnode(self): |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2707 return self._manifestnode |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2708 |
32552 | 2709 @property |
30572
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2710 def _manifestctx(self): |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2711 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
|
2712 |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2713 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
|
2714 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
|
2715 |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2716 def commit(self): |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2717 """commit context to the repo""" |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2718 return self._repo.commitctx(self) |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2719 |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2720 @property |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2721 def _manifest(self): |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2722 return self._originalctx.manifest() |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2723 |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2724 @propertycache |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2725 def _status(self): |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2726 """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
|
2727 and parents manifests. |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2728 """ |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2729 man1 = self.p1().manifest() |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2730 p2 = self._parents[1] |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2731 # "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
|
2732 # 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
|
2733 # 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
|
2734 if p2.node() != nullid: |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2735 man2 = p2.manifest() |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2736 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
|
2737 else: |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2738 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
|
2739 |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2740 modified, added, removed = [], [], [] |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2741 for f in self._files: |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2742 if not managing(f): |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2743 added.append(f) |
34017
be814edf3306
metadataonlyctx: don't crash when reusing the manifest with deletions
Jun Wu <quark@fb.com>
parents:
34016
diff
changeset
|
2744 elif f in self: |
30572
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2745 modified.append(f) |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2746 else: |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2747 removed.append(f) |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2748 |
73ce055b169a
memctx: allow the metadataonlyctx thats reusing the manifest node
Mateusz Kwapich <mitrandir@fb.com>
parents:
30371
diff
changeset
|
2749 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
|
2750 |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2751 class arbitraryfilectx(object): |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2752 """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
|
2753 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
|
2754 """ |
34685
6036e6e205ca
context: add a fast-comparision for arbitraryfilectx and workingfilectx
Phil Cohen <phillco@fb.com>
parents:
34681
diff
changeset
|
2755 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
|
2756 # 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
|
2757 self._repo = repo |
34068
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2758 self._path = path |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2759 |
34685
6036e6e205ca
context: add a fast-comparision for arbitraryfilectx and workingfilectx
Phil Cohen <phillco@fb.com>
parents:
34681
diff
changeset
|
2760 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
|
2761 # 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
|
2762 # path if either side is a symlink. |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
34833
diff
changeset
|
2763 symlinks = ('l' in self.flags() or 'l' in fctx.flags()) |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
34833
diff
changeset
|
2764 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
|
2765 # 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
|
2766 # 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
|
2767 # 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
|
2768 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
|
2769 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
|
2770 |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2771 def path(self): |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2772 return self._path |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2773 |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2774 def flags(self): |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2775 return '' |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2776 |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2777 def data(self): |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2778 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
|
2779 |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2780 def decodeddata(self): |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2781 with open(self._path, "rb") as f: |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2782 return f.read() |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2783 |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2784 def remove(self): |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2785 util.unlink(self._path) |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2786 |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2787 def write(self, data, flags): |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2788 assert not flags |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2789 with open(self._path, "w") as f: |
d2fc88426d21
context: add arbitraryfilectx, which can represent files outside the workdir
Phil Cohen <phillco@fb.com>
parents:
34054
diff
changeset
|
2790 f.write(data) |