Mercurial > hg
annotate mercurial/context.py @ 24572:b83679eb5f86
manifestv2: add support for reading new manifest format
The new manifest format is designed to be smaller, in particular to
produce smaller deltas. It stores hashes in binary and puts the hash
on a new line (for smaller deltas). It also uses stem compression to
save space for long paths. The format has room for metadata, but
that's there only for future-proofing. The parser thus accepts any
metadata and throws it away. For more information, see
http://mercurial.selenic.com/wiki/ManifestV2Plan.
The current manifest format doesn't allow an empty filename, so we use
an empty filename on the first line to tell a manifest of the new
format from the old. Since we still never write manifests in the new
format, the added code is unused, but it is tested by
test-manifest.py.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Fri, 27 Mar 2015 22:26:41 -0700 |
parents | 065b886f61c6 |
children | 2f8f7cc6a53b |
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 |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
8 from node import nullid, nullrev, short, hex, bin |
3891 | 9 from i18n import _ |
20984
f4a87d1ee1aa
context: remove unused filectx.ancestor
Mads Kiilerich <madski@unity3d.com>
parents:
20400
diff
changeset
|
10 import mdiff, error, util, scmutil, subrepo, patch, encoding, phases |
14669
2d2604adfdd6
context: add a match builder method
Matt Mackall <mpm@selenic.com>
parents:
14644
diff
changeset
|
11 import match as matchmod |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
12 import os, errno, stat |
17469
fb72eec7efd8
obsolete: introduce caches for all meaningful sets
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17427
diff
changeset
|
13 import obsolete as obsmod |
18252
3f1552c6bf71
context: retrieve hidden from filteredrevs
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18211
diff
changeset
|
14 import repoview |
20400
f0137d994c83
context: add a getfileset() method so fewer things need fileset directly
Augie Fackler <raf@durin42.com>
parents:
20292
diff
changeset
|
15 import fileset |
21835
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
16 import revlog |
3122
da85145d4571
filectx: add rename traversal for parents()
Matt Mackall <mpm@selenic.com>
parents:
2859
diff
changeset
|
17 |
8207
dd8d5be57d65
util: take propertycache from context.py
Matt Mackall <mpm@selenic.com>
parents:
8157
diff
changeset
|
18 propertycache = util.propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
19 |
23593
b1179dabc6de
context: stop setting None for modified or added nodes
Augie Fackler <augie@google.com>
parents:
23402
diff
changeset
|
20 # Phony node value to stand-in for new files in some uses of |
b1179dabc6de
context: stop setting None for modified or added nodes
Augie Fackler <augie@google.com>
parents:
23402
diff
changeset
|
21 # manifests. Manifests support 21-byte hashes for nodes which are |
b1179dabc6de
context: stop setting None for modified or added nodes
Augie Fackler <augie@google.com>
parents:
23402
diff
changeset
|
22 # dirty in the working copy. |
b1179dabc6de
context: stop setting None for modified or added nodes
Augie Fackler <augie@google.com>
parents:
23402
diff
changeset
|
23 _newnode = '!' * 21 |
b1179dabc6de
context: stop setting None for modified or added nodes
Augie Fackler <augie@google.com>
parents:
23402
diff
changeset
|
24 |
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
|
25 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
|
26 """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
|
27 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
|
28 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
|
29 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
|
30 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
|
31 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
|
32 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
|
33 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
|
34 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
|
35 |
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
36 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
|
37 |
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
38 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
|
39 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
|
40 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
|
41 |
049d6b5a4a59
basectx: return a copied context if changeid is already a basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19537
diff
changeset
|
42 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
|
43 |
19540
7b864da00e21
basectx: move __str__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19539
diff
changeset
|
44 def __str__(self): |
7b864da00e21
basectx: move __str__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19539
diff
changeset
|
45 return short(self.node()) |
7b864da00e21
basectx: move __str__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19539
diff
changeset
|
46 |
19545
5af7045b0b18
basectx: move __int__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19544
diff
changeset
|
47 def __int__(self): |
5af7045b0b18
basectx: move __int__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19544
diff
changeset
|
48 return self.rev() |
5af7045b0b18
basectx: move __int__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19544
diff
changeset
|
49 |
19546
a45cf68dd9a2
basectx: move __repr__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19545
diff
changeset
|
50 def __repr__(self): |
a45cf68dd9a2
basectx: move __repr__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19545
diff
changeset
|
51 return "<%s %s>" % (type(self).__name__, str(self)) |
a45cf68dd9a2
basectx: move __repr__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19545
diff
changeset
|
52 |
19547
0537c0cfd87c
basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19546
diff
changeset
|
53 def __eq__(self, other): |
0537c0cfd87c
basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19546
diff
changeset
|
54 try: |
0537c0cfd87c
basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19546
diff
changeset
|
55 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
|
56 except AttributeError: |
0537c0cfd87c
basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19546
diff
changeset
|
57 return False |
0537c0cfd87c
basectx: move __eq__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19546
diff
changeset
|
58 |
19548
730fdcaa791d
basectx: move __ne__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19547
diff
changeset
|
59 def __ne__(self, other): |
730fdcaa791d
basectx: move __ne__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19547
diff
changeset
|
60 return not (self == other) |
730fdcaa791d
basectx: move __ne__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19547
diff
changeset
|
61 |
19550
0c8ad779eb36
basectx: move __contains__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19549
diff
changeset
|
62 def __contains__(self, key): |
0c8ad779eb36
basectx: move __contains__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19549
diff
changeset
|
63 return key in self._manifest |
0c8ad779eb36
basectx: move __contains__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19549
diff
changeset
|
64 |
19551
e07c69145724
basectx: move __getitem__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19550
diff
changeset
|
65 def __getitem__(self, key): |
e07c69145724
basectx: move __getitem__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19550
diff
changeset
|
66 return self.filectx(key) |
e07c69145724
basectx: move __getitem__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19550
diff
changeset
|
67 |
19552
6b76070c4b54
basectx: move __iter__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19551
diff
changeset
|
68 def __iter__(self): |
24227
8ec2df32bd39
context: don't sort manifest entries
Augie Fackler <augie@google.com>
parents:
24213
diff
changeset
|
69 return iter(self._manifest) |
19552
6b76070c4b54
basectx: move __iter__ from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19551
diff
changeset
|
70 |
21466
3b1ec3d4ece6
basectx: add _manifestmatches method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21398
diff
changeset
|
71 def _manifestmatches(self, match, s): |
3b1ec3d4ece6
basectx: add _manifestmatches method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21398
diff
changeset
|
72 """generate a new manifest filtered by the match argument |
3b1ec3d4ece6
basectx: add _manifestmatches method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21398
diff
changeset
|
73 |
3b1ec3d4ece6
basectx: add _manifestmatches method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21398
diff
changeset
|
74 This method is for internal use only and mainly exists to provide an |
3b1ec3d4ece6
basectx: add _manifestmatches method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21398
diff
changeset
|
75 object oriented way for other contexts to customize the manifest |
3b1ec3d4ece6
basectx: add _manifestmatches method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21398
diff
changeset
|
76 generation. |
3b1ec3d4ece6
basectx: add _manifestmatches method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21398
diff
changeset
|
77 """ |
23305
0cc283f44655
manifest: add matches() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
23304
diff
changeset
|
78 return self.manifest().matches(match) |
21880
e6754f5e4cf7
context: generate filtered manifest efficiently for exact matchers
Siddharth Agarwal <sid0@fb.com>
parents:
21845
diff
changeset
|
79 |
23237
98f41a2f8fba
context.status: remove unused arguments from _matchstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
23236
diff
changeset
|
80 def _matchstatus(self, other, 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
|
81 """return match.always if match is none |
2f1567ef70ba
basectx: add _matchstatus method for factoring out last of parentworking logic
Sean Farley <sean.michael.farley@gmail.com>
parents:
21480
diff
changeset
|
82 |
2f1567ef70ba
basectx: add _matchstatus method for factoring out last of parentworking logic
Sean Farley <sean.michael.farley@gmail.com>
parents:
21480
diff
changeset
|
83 This internal method provides a way for child objects to override the |
2f1567ef70ba
basectx: add _matchstatus method for factoring out last of parentworking logic
Sean Farley <sean.michael.farley@gmail.com>
parents:
21480
diff
changeset
|
84 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
|
85 """ |
2f1567ef70ba
basectx: add _matchstatus method for factoring out last of parentworking logic
Sean Farley <sean.michael.farley@gmail.com>
parents:
21480
diff
changeset
|
86 return match or matchmod.always(self._repo.root, self._repo.getcwd()) |
2f1567ef70ba
basectx: add _matchstatus method for factoring out last of parentworking logic
Sean Farley <sean.michael.farley@gmail.com>
parents:
21480
diff
changeset
|
87 |
21471
90aff492dc4a
context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21468
diff
changeset
|
88 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
|
89 listunknown): |
21471
90aff492dc4a
context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21468
diff
changeset
|
90 """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
|
91 # 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
|
92 # 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
|
93 # 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
|
94 # 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
|
95 # 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
|
96 # delta application. |
23238
39eb9f78f968
context.status: move manifest caching trick to _buildstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
23237
diff
changeset
|
97 if self.rev() is not None and self.rev() < other.rev(): |
39eb9f78f968
context.status: move manifest caching trick to _buildstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
23237
diff
changeset
|
98 self.manifest() |
21471
90aff492dc4a
context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21468
diff
changeset
|
99 mf1 = other._manifestmatches(match, s) |
90aff492dc4a
context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21468
diff
changeset
|
100 mf2 = self._manifestmatches(match, s) |
90aff492dc4a
context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21468
diff
changeset
|
101 |
23755
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
102 modified, added = [], [] |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
103 removed = [] |
23757
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
104 clean = [] |
23304
dd3f857598a0
context.status: pass status tuple into _buildstatus
Martin von Zweigbergk <martinvonz@google.com>
parents:
23303
diff
changeset
|
105 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
|
106 deletedset = set(deleted) |
23757
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
107 d = mf1.diff(mf2, clean=listclean) |
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
108 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
|
109 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
|
110 continue |
23757
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
111 if value is None: |
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
112 clean.append(fn) |
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
113 continue |
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
114 (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
|
115 if node1 is None: |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
116 added.append(fn) |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
117 elif node2 is None: |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
118 removed.append(fn) |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
119 elif node2 != _newnode: |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
120 # The file was not a new file in mf2, so an entry |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
121 # from diff is really a difference. |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
122 modified.append(fn) |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
123 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
|
124 # node2 was newnode, but the working file doesn't |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
125 # match the one in mf1. |
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
126 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
|
127 else: |
23757
b5346480a490
context: use new manifest.diff(clean=True) support
Augie Fackler <augie@google.com>
parents:
23755
diff
changeset
|
128 clean.append(fn) |
23755
d43948a910a5
context: use manifest.diff() to compute most of status
Augie Fackler <augie@google.com>
parents:
23731
diff
changeset
|
129 |
21971
412ac613fd89
status: explicitly exclude removed file from unknown and ignored
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21938
diff
changeset
|
130 if removed: |
412ac613fd89
status: explicitly exclude removed file from unknown and ignored
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21938
diff
changeset
|
131 # need to filter files if they are already reported as removed |
412ac613fd89
status: explicitly exclude removed file from unknown and ignored
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21938
diff
changeset
|
132 unknown = [fn for fn in unknown if fn not in mf1] |
412ac613fd89
status: explicitly exclude removed file from unknown and ignored
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21938
diff
changeset
|
133 ignored = [fn for fn in ignored if fn not in mf1] |
23730
4b56219a5ac2
status: don't list files as both removed and deleted
Martin von Zweigbergk <martinvonz@google.com>
parents:
23712
diff
changeset
|
134 # 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
|
135 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
|
136 |
23302
24f67ad49da7
context.status: make _dirstatestatus() return an status tuple
Martin von Zweigbergk <martinvonz@google.com>
parents:
23301
diff
changeset
|
137 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
|
138 ignored, clean) |
21471
90aff492dc4a
context: add _buildstatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21468
diff
changeset
|
139 |
19549
78155484ae34
basectx: move substate from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19548
diff
changeset
|
140 @propertycache |
78155484ae34
basectx: move substate from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19548
diff
changeset
|
141 def substate(self): |
78155484ae34
basectx: move substate from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19548
diff
changeset
|
142 return subrepo.state(self, self._repo.ui) |
78155484ae34
basectx: move substate from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19548
diff
changeset
|
143 |
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
|
144 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
|
145 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
|
146 |
19541
421d49f2f8e2
basectx: move rev from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19540
diff
changeset
|
147 def rev(self): |
421d49f2f8e2
basectx: move rev from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19540
diff
changeset
|
148 return self._rev |
19542
bd95621a2d56
basectx: move node from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19541
diff
changeset
|
149 def node(self): |
bd95621a2d56
basectx: move node from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19541
diff
changeset
|
150 return self._node |
19543
18f4951222f4
basectx: move hex from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19542
diff
changeset
|
151 def hex(self): |
19544
74924fa3236d
basectx: change _node to node() in hex
Sean Farley <sean.michael.farley@gmail.com>
parents:
19543
diff
changeset
|
152 return hex(self.node()) |
19553
64a99d972b9e
basectx: move manifest from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19552
diff
changeset
|
153 def manifest(self): |
64a99d972b9e
basectx: move manifest from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19552
diff
changeset
|
154 return self._manifest |
24300
a07314472a80
context: add a repo accessor
Matt Harbison <matt_harbison@yahoo.com>
parents:
24227
diff
changeset
|
155 def repo(self): |
a07314472a80
context: add a repo accessor
Matt Harbison <matt_harbison@yahoo.com>
parents:
24227
diff
changeset
|
156 return self._repo |
19554
98f8875f4baa
basectx: move phasestr from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19553
diff
changeset
|
157 def phasestr(self): |
98f8875f4baa
basectx: move phasestr from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19553
diff
changeset
|
158 return phases.phasenames[self.phase()] |
19555
613b70fedc4e
basectx: move mutable from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19554
diff
changeset
|
159 def mutable(self): |
613b70fedc4e
basectx: move mutable from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19554
diff
changeset
|
160 return self.phase() > phases.public |
19541
421d49f2f8e2
basectx: move rev from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19540
diff
changeset
|
161 |
20400
f0137d994c83
context: add a getfileset() method so fewer things need fileset directly
Augie Fackler <raf@durin42.com>
parents:
20292
diff
changeset
|
162 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
|
163 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
|
164 |
19734
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
165 def obsolete(self): |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
166 """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
|
167 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
|
168 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
169 def extinct(self): |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
170 """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
|
171 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
|
172 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
173 def unstable(self): |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
174 """True if the changeset is not obsolete but it's ancestor are""" |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
175 return self.rev() in obsmod.getrevs(self._repo, 'unstable') |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
176 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
177 def bumped(self): |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
178 """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
|
179 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
180 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
|
181 """ |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
182 return self.rev() in obsmod.getrevs(self._repo, 'bumped') |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
183 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
184 def divergent(self): |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
185 """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
|
186 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
187 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
|
188 """ |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
189 return self.rev() in obsmod.getrevs(self._repo, 'divergent') |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
190 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
191 def troubled(self): |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
192 """True if the changeset is either unstable, bumped or divergent""" |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
193 return self.unstable() or self.bumped() or self.divergent() |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
194 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
195 def troubles(self): |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
196 """return the list of troubles affecting this changesets. |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
197 |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
198 Troubles are returned as strings. possible values are: |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
199 - unstable, |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
200 - bumped, |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
201 - divergent. |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
202 """ |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
203 troubles = [] |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
204 if self.unstable(): |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
205 troubles.append('unstable') |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
206 if self.bumped(): |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
207 troubles.append('bumped') |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
208 if self.divergent(): |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
209 troubles.append('divergent') |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
210 return troubles |
e61c6138fa33
context: move evolution functions from changectx to basectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19733
diff
changeset
|
211 |
19556
732ee7fff35a
basectx: move parents from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19555
diff
changeset
|
212 def parents(self): |
732ee7fff35a
basectx: move parents from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19555
diff
changeset
|
213 """return contexts for each parent changeset""" |
732ee7fff35a
basectx: move parents from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19555
diff
changeset
|
214 return self._parents |
732ee7fff35a
basectx: move parents from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19555
diff
changeset
|
215 |
19557
9f57ebf0cce8
basectx: move p1 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19556
diff
changeset
|
216 def p1(self): |
9f57ebf0cce8
basectx: move p1 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19556
diff
changeset
|
217 return self._parents[0] |
9f57ebf0cce8
basectx: move p1 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19556
diff
changeset
|
218 |
19558
d0448e9d4554
basectx: move p2 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19557
diff
changeset
|
219 def p2(self): |
d0448e9d4554
basectx: move p2 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19557
diff
changeset
|
220 if len(self._parents) == 2: |
d0448e9d4554
basectx: move p2 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19557
diff
changeset
|
221 return self._parents[1] |
d0448e9d4554
basectx: move p2 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19557
diff
changeset
|
222 return changectx(self._repo, -1) |
d0448e9d4554
basectx: move p2 from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19557
diff
changeset
|
223 |
19559
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
224 def _fileinfo(self, path): |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
225 if '_manifest' in self.__dict__: |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
226 try: |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
227 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
|
228 except KeyError: |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
229 raise error.ManifestLookupError(self._node, path, |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
230 _('not found in manifest')) |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
231 if '_manifestdelta' in self.__dict__ or path in self.files(): |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
232 if path in self._manifestdelta: |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
233 return (self._manifestdelta[path], |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
234 self._manifestdelta.flags(path)) |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
235 node, flag = self._repo.manifest.find(self._changeset[0], path) |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
236 if not node: |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
237 raise error.ManifestLookupError(self._node, path, |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
238 _('not found in manifest')) |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
239 |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
240 return node, flag |
80ad9fe22e18
basectx: move _fileinfo from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19558
diff
changeset
|
241 |
19560
f256e1108053
basectx: move filenode from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19559
diff
changeset
|
242 def filenode(self, path): |
f256e1108053
basectx: move filenode from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19559
diff
changeset
|
243 return self._fileinfo(path)[0] |
f256e1108053
basectx: move filenode from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19559
diff
changeset
|
244 |
19561
7806e63598b0
basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19560
diff
changeset
|
245 def flags(self, path): |
7806e63598b0
basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19560
diff
changeset
|
246 try: |
7806e63598b0
basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19560
diff
changeset
|
247 return self._fileinfo(path)[1] |
7806e63598b0
basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19560
diff
changeset
|
248 except error.LookupError: |
7806e63598b0
basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19560
diff
changeset
|
249 return '' |
7806e63598b0
basectx: move flags from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19560
diff
changeset
|
250 |
19562
389d7767630d
basectx: move sub from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19561
diff
changeset
|
251 def sub(self, path): |
389d7767630d
basectx: move sub from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19561
diff
changeset
|
252 return subrepo.subrepo(self, path) |
389d7767630d
basectx: move sub from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19561
diff
changeset
|
253 |
19563
87503cd824fa
basectx: move match from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19562
diff
changeset
|
254 def match(self, pats=[], include=None, exclude=None, default='glob'): |
87503cd824fa
basectx: move match from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19562
diff
changeset
|
255 r = self._repo |
87503cd824fa
basectx: move match from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19562
diff
changeset
|
256 return matchmod.match(r.root, r.getcwd(), pats, |
87503cd824fa
basectx: move match from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19562
diff
changeset
|
257 include, exclude, default, |
87503cd824fa
basectx: move match from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19562
diff
changeset
|
258 auditor=r.auditor, ctx=self) |
87503cd824fa
basectx: move match from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19562
diff
changeset
|
259 |
19564
f0ed47b73d37
basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19563
diff
changeset
|
260 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
|
261 """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
|
262 if ctx2 is None: |
f0ed47b73d37
basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19563
diff
changeset
|
263 ctx2 = self.p1() |
19568
f58235d85d6b
basectx: remove unnecessary check of instance
Sean Farley <sean.michael.farley@gmail.com>
parents:
19567
diff
changeset
|
264 if ctx2 is not None: |
19564
f0ed47b73d37
basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19563
diff
changeset
|
265 ctx2 = self._repo[ctx2] |
f0ed47b73d37
basectx: move diff from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19563
diff
changeset
|
266 diffopts = patch.diffopts(self._repo.ui, opts) |
21834
e4d35aa9056c
basectx: pass raw context objects to patch.diff
Sean Farley <sean.michael.farley@gmail.com>
parents:
21722
diff
changeset
|
267 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
|
268 |
24323
4c7c6beade1a
manifest: have context's dirs() call its manifest's dirs()
Drew Gottlieb <drgott@google.com>
parents:
24306
diff
changeset
|
269 def dirs(self): |
4c7c6beade1a
manifest: have context's dirs() call its manifest's dirs()
Drew Gottlieb <drgott@google.com>
parents:
24306
diff
changeset
|
270 return self._manifest.dirs() |
19565
bd1580a9c133
basectx: move _dirs from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19564
diff
changeset
|
271 |
24325
79d9c51488ca
manifest: add hasdir() to context
Drew Gottlieb <drgott@google.com>
parents:
24323
diff
changeset
|
272 def hasdir(self, dir): |
79d9c51488ca
manifest: add hasdir() to context
Drew Gottlieb <drgott@google.com>
parents:
24323
diff
changeset
|
273 return self._manifest.hasdir(dir) |
19566
54817c774d38
basectx: move dirs from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19565
diff
changeset
|
274 |
22055
ba5fc3f81f15
basectx: add missing, merge, and branch args to dirty method
Sean Farley <sean.michael.farley@gmail.com>
parents:
22054
diff
changeset
|
275 def dirty(self, missing=False, merge=True, branch=True): |
19567
49b128e50e84
basectx: move dirty from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19566
diff
changeset
|
276 return False |
49b128e50e84
basectx: move dirty from changectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19566
diff
changeset
|
277 |
21594
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
278 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
|
279 listclean=False, listunknown=False, listsubrepos=False): |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
280 """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
|
281 directory. |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
282 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
283 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
|
284 |
ee29b0bb1619
status: document the content of the returned tuple in the docstring
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21718
diff
changeset
|
285 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
|
286 """ |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
287 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
288 ctx1 = self |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
289 ctx2 = self._repo[other] |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
290 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
291 # 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
|
292 # 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
|
293 # 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
|
294 # with its first parent. |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
295 # |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
296 # 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
|
297 # |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
298 # workingctx.status(parentctx) |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
299 # |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
300 # 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
|
301 # 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
|
302 # just copy the manifest of the parent. |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
303 reversed = False |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
304 if (not isinstance(ctx1, changectx) |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
305 and isinstance(ctx2, changectx)): |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
306 reversed = True |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
307 ctx1, ctx2 = ctx2, ctx1 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
308 |
23237
98f41a2f8fba
context.status: remove unused arguments from _matchstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
23236
diff
changeset
|
309 match = ctx2._matchstatus(ctx1, match) |
23304
dd3f857598a0
context.status: pass status tuple into _buildstatus
Martin von Zweigbergk <martinvonz@google.com>
parents:
23303
diff
changeset
|
310 r = scmutil.status([], [], [], [], [], [], []) |
21594
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
311 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
|
312 listunknown) |
21594
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
313 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
314 if reversed: |
23301
c10dc5568069
context.status: wipe deleted/unknown/ignored fields when reversed
Martin von Zweigbergk <martinvonz@google.com>
parents:
23257
diff
changeset
|
315 # 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
|
316 # 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
|
317 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
|
318 r.clean) |
21594
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
319 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
320 if listsubrepos: |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
321 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
|
322 rev2 = ctx2.subrev(subpath) |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
323 try: |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
324 submatch = matchmod.narrowmatcher(subpath, match) |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
325 s = sub.status(rev2, match=submatch, ignored=listignored, |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
326 clean=listclean, unknown=listunknown, |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
327 listsubrepos=True) |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
328 for rfiles, sfiles in zip(r, s): |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
329 rfiles.extend("%s/%s" % (subpath, f) for f in sfiles) |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
330 except error.LookupError: |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
331 self._repo.ui.status(_("skipping missing " |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
332 "subrepository: %s\n") % subpath) |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
333 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
334 for l in r: |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
335 l.sort() |
21616
0a8e7f81e8ae
context: explicitly return a tuple
Sean Farley <sean.michael.farley@gmail.com>
parents:
21595
diff
changeset
|
336 |
23301
c10dc5568069
context.status: wipe deleted/unknown/ignored fields when reversed
Martin von Zweigbergk <martinvonz@google.com>
parents:
23257
diff
changeset
|
337 return r |
21594
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
338 |
9e4567829129
basectx: copy localrepo.status method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21593
diff
changeset
|
339 |
20035
cd79d9ab5e42
makememctx: move from patch to context to break import cycle
Augie Fackler <raf@durin42.com>
parents:
19951
diff
changeset
|
340 def makememctx(repo, parents, text, user, date, branch, files, store, |
cd79d9ab5e42
makememctx: move from patch to context to break import cycle
Augie Fackler <raf@durin42.com>
parents:
19951
diff
changeset
|
341 editor=None): |
cd79d9ab5e42
makememctx: move from patch to context to break import cycle
Augie Fackler <raf@durin42.com>
parents:
19951
diff
changeset
|
342 def getfilectx(repo, memctx, path): |
22296
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22207
diff
changeset
|
343 data, mode, copied = store.getfile(path) |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22207
diff
changeset
|
344 if data is None: |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22207
diff
changeset
|
345 return None |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22207
diff
changeset
|
346 islink, isexec = mode |
21689
503bb3af70fe
memfilectx: call super.__init__ instead of duplicating code
Sean Farley <sean.michael.farley@gmail.com>
parents:
21688
diff
changeset
|
347 return memfilectx(repo, path, data, islink=islink, isexec=isexec, |
503bb3af70fe
memfilectx: call super.__init__ instead of duplicating code
Sean Farley <sean.michael.farley@gmail.com>
parents:
21688
diff
changeset
|
348 copied=copied, memctx=memctx) |
20035
cd79d9ab5e42
makememctx: move from patch to context to break import cycle
Augie Fackler <raf@durin42.com>
parents:
19951
diff
changeset
|
349 extra = {} |
cd79d9ab5e42
makememctx: move from patch to context to break import cycle
Augie Fackler <raf@durin42.com>
parents:
19951
diff
changeset
|
350 if branch: |
cd79d9ab5e42
makememctx: move from patch to context to break import cycle
Augie Fackler <raf@durin42.com>
parents:
19951
diff
changeset
|
351 extra['branch'] = encoding.fromlocal(branch) |
cd79d9ab5e42
makememctx: move from patch to context to break import cycle
Augie Fackler <raf@durin42.com>
parents:
19951
diff
changeset
|
352 ctx = memctx(repo, parents, text, files, getfilectx, user, |
21238
25d6fdc0294a
context: move editor invocation from "makememctx()" to "memctx.__init__()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21203
diff
changeset
|
353 date, extra, editor) |
20035
cd79d9ab5e42
makememctx: move from patch to context to break import cycle
Augie Fackler <raf@durin42.com>
parents:
19951
diff
changeset
|
354 return ctx |
cd79d9ab5e42
makememctx: move from patch to context to break import cycle
Augie Fackler <raf@durin42.com>
parents:
19951
diff
changeset
|
355 |
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
|
356 class changectx(basectx): |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
357 """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
|
358 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
|
359 the repo.""" |
6741
5918e2b79859
context: simplify changeid logic
Matt Mackall <mpm@selenic.com>
parents:
6737
diff
changeset
|
360 def __init__(self, repo, changeid=''): |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
361 """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
|
362 |
79671c46bb46
changectx: if passing a basectx then exit __init__ immediately
Sean Farley <sean.michael.farley@gmail.com>
parents:
19538
diff
changeset
|
363 # 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
|
364 # 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
|
365 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
|
366 return |
79671c46bb46
changectx: if passing a basectx then exit __init__ immediately
Sean Farley <sean.michael.farley@gmail.com>
parents:
19538
diff
changeset
|
367 |
6741
5918e2b79859
context: simplify changeid logic
Matt Mackall <mpm@selenic.com>
parents:
6737
diff
changeset
|
368 if changeid == '': |
5918e2b79859
context: simplify changeid logic
Matt Mackall <mpm@selenic.com>
parents:
6737
diff
changeset
|
369 changeid = '.' |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
370 self._repo = repo |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
371 |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
372 try: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
373 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
|
374 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
|
375 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
|
376 return |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
377 if isinstance(changeid, long): |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
378 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
|
379 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
|
380 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
|
381 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
|
382 return |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
383 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
|
384 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
|
385 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
|
386 return |
24050
a9b61dbdb827
context: use unfiltered repo for '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23984
diff
changeset
|
387 if changeid == '.' or changeid == repo.dirstate.p1(): |
a9b61dbdb827
context: use unfiltered repo for '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23984
diff
changeset
|
388 # 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
|
389 # when we know that '.' won't be hidden |
a9b61dbdb827
context: use unfiltered repo for '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23984
diff
changeset
|
390 self._node = repo.dirstate.p1() |
a9b61dbdb827
context: use unfiltered repo for '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23984
diff
changeset
|
391 self._rev = repo.unfiltered().changelog.rev(self._node) |
a9b61dbdb827
context: use unfiltered repo for '.'
Martin von Zweigbergk <martinvonz@google.com>
parents:
23984
diff
changeset
|
392 return |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
393 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
|
394 try: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
395 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
|
396 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
|
397 return |
23017
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
398 except error.FilteredRepoLookupError: |
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
399 raise |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
400 except LookupError: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
401 pass |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
402 |
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
|
403 try: |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
404 r = int(changeid) |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
405 if str(r) != changeid: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
406 raise ValueError |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
407 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
|
408 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
|
409 r += l |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
410 if r < 0 or r >= l: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
411 raise ValueError |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
412 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
|
413 self._node = repo.changelog.node(r) |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
414 return |
23017
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
415 except error.FilteredIndexError: |
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
416 raise |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
417 except (ValueError, OverflowError, IndexError): |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
418 pass |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
419 |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
420 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
|
421 try: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
422 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
|
423 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
|
424 return |
23017
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
425 except error.FilteredLookupError: |
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
426 raise |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
427 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
|
428 pass |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
429 |
23560
aead63705504
changectx: use names api to simplify and extend node lookup
Sean Farley <sean.michael.farley@gmail.com>
parents:
23543
diff
changeset
|
430 # 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
|
431 try: |
23561
3c2419e07df5
namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents:
23560
diff
changeset
|
432 self._node = repo.names.singlenode(repo, changeid) |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
433 self._rev = repo.changelog.rev(self._node) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
434 return |
23560
aead63705504
changectx: use names api to simplify and extend node lookup
Sean Farley <sean.michael.farley@gmail.com>
parents:
23543
diff
changeset
|
435 except KeyError: |
aead63705504
changectx: use names api to simplify and extend node lookup
Sean Farley <sean.michael.farley@gmail.com>
parents:
23543
diff
changeset
|
436 pass |
23017
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
437 except error.FilteredRepoLookupError: |
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
438 raise |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
439 except error.RepoLookupError: |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
440 pass |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
441 |
23017
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
442 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
|
443 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
|
444 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
|
445 return |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
446 |
23012
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
447 # lookup failed |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
448 # 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
|
449 # |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
450 # 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
|
451 # exception for filtered changeset access |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
452 if changeid in repo.unfiltered().dirstate.parents(): |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
453 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
|
454 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
|
455 try: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
456 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
|
457 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
|
458 except TypeError: |
bdb3349cf7ab
changectx: wrap the `changeid` processing in a try/except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22942
diff
changeset
|
459 pass |
23017
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
460 except (error.FilteredIndexError, error.FilteredLookupError, |
dc25ed84bee8
changectx: issue a FilteredRepoLookupError when applicable
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23013
diff
changeset
|
461 error.FilteredRepoLookupError): |
23046
c1aede895072
repoview: issue a special message when filtering hidden changesets
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23045
diff
changeset
|
462 if repo.filtername == 'visible': |
c1aede895072
repoview: issue a special message when filtering hidden changesets
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23045
diff
changeset
|
463 msg = _("hidden revision '%s'") % changeid |
c1aede895072
repoview: issue a special message when filtering hidden changesets
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23045
diff
changeset
|
464 hint = _('use --hidden to access hidden revisions') |
c1aede895072
repoview: issue a special message when filtering hidden changesets
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23045
diff
changeset
|
465 raise error.FilteredRepoLookupError(msg, hint=hint) |
23045
a4dd270a419c
repoview: include the filter name in filtered revision error messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23017
diff
changeset
|
466 msg = _("filtered revision '%s' (not in '%s' subset)") |
a4dd270a419c
repoview: include the filter name in filtered revision error messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23017
diff
changeset
|
467 msg %= (changeid, repo.filtername) |
a4dd270a419c
repoview: include the filter name in filtered revision error messages
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23017
diff
changeset
|
468 raise error.FilteredRepoLookupError(msg) |
23013
b50ed6b9b513
changectx: move `IndexError` handling in the top level try except
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23012
diff
changeset
|
469 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
|
470 pass |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
471 raise error.RepoLookupError( |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
472 _("unknown revision '%s'") % changeid) |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
473 |
6469
fb502719c75c
python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents:
6286
diff
changeset
|
474 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
|
475 try: |
fb502719c75c
python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents:
6286
diff
changeset
|
476 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
|
477 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
|
478 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
|
479 |
3168
05c588e1803d
context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents:
3166
diff
changeset
|
480 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
|
481 return self._rev != nullrev |
3168
05c588e1803d
context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents:
3166
diff
changeset
|
482 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
483 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
484 def _changeset(self): |
16377
f8ce254e514f
context: use rev for changelog lookup
Matt Mackall <mpm@selenic.com>
parents:
16376
diff
changeset
|
485 return self._repo.changelog.read(self.rev()) |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
486 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
487 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
488 def _manifest(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
489 return self._repo.manifest.read(self._changeset[0]) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
490 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
491 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
492 def _manifestdelta(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
493 return self._repo.manifest.readdelta(self._changeset[0]) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
494 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
495 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
496 def _parents(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
497 p = self._repo.changelog.parentrevs(self._rev) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
498 if p[1] == nullrev: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
499 p = p[:-1] |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
500 return [changectx(self._repo, x) for x in p] |
3215
931288cf58a7
contexts: use __getattr__ rather than try/except in changectx
Matt Mackall <mpm@selenic.com>
parents:
3214
diff
changeset
|
501 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
502 def changeset(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
503 return self._changeset |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
504 def manifestnode(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
505 return self._changeset[0] |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
506 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
507 def user(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
508 return self._changeset[1] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
509 def date(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
510 return self._changeset[2] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
511 def files(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
512 return self._changeset[3] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
513 def description(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
514 return self._changeset[4] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
515 def branch(self): |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
13031
diff
changeset
|
516 return encoding.tolocal(self._changeset[5].get("branch")) |
16720
e825a89de5d7
context: add changectx.closesbranch() method
Brodie Rao <brodie@sf.io>
parents:
16719
diff
changeset
|
517 def closesbranch(self): |
e825a89de5d7
context: add changectx.closesbranch() method
Brodie Rao <brodie@sf.io>
parents:
16719
diff
changeset
|
518 return 'close' in self._changeset[5] |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
519 def extra(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
520 return self._changeset[5] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
521 def tags(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
522 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
|
523 def bookmarks(self): |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13235
diff
changeset
|
524 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
|
525 def phase(self): |
16657
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16610
diff
changeset
|
526 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
|
527 def hidden(self): |
18382
f3b21beb9802
filtering: rename filters to their antonyms
Kevin Bullock <kbullock@ringworld.org>
parents:
18364
diff
changeset
|
528 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
|
529 |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
530 def children(self): |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
531 """return contexts for each child changeset""" |
2627
b779319a532b
context.py: self.repo is not defined, change to self._repo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2566
diff
changeset
|
532 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
|
533 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
|
534 |
6876 | 535 def ancestors(self): |
16866
91f3ac205816
revlog: ancestors(*revs) becomes ancestors(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents:
16761
diff
changeset
|
536 for a in self._repo.changelog.ancestors([self._rev]): |
6876 | 537 yield changectx(self._repo, a) |
538 | |
539 def descendants(self): | |
16867
1093ad1e8903
revlog: descendants(*revs) becomes descendants(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents:
16866
diff
changeset
|
540 for d in self._repo.changelog.descendants([self._rev]): |
6876 | 541 yield changectx(self._repo, d) |
542 | |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
543 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
|
544 """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
|
545 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
|
546 fileid = self.filenode(path) |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
547 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
|
548 changectx=self, filelog=filelog) |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
549 |
21203
9f12d8665c7b
ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents:
21126
diff
changeset
|
550 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
|
551 """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
|
552 |
94f77624dbb5
comments: describe ancestor consistently - avoid 'least common ancestor'
Mads Kiilerich <madski@unity3d.com>
parents:
22313
diff
changeset
|
553 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
|
554 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
|
555 revlog ancestor.""" |
9843
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
556 # deal with workingctxs |
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
557 n2 = c2._node |
13031
3da456d0c885
code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents:
13001
diff
changeset
|
558 if n2 is None: |
9843
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
559 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
|
560 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
|
561 if not cahs: |
e94e90a4526e
context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents:
21114
diff
changeset
|
562 anc = nullid |
e94e90a4526e
context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents:
21114
diff
changeset
|
563 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
|
564 anc = cahs[0] |
e94e90a4526e
context: tell when .ancestor picks one of multiple common ancestors heads
Mads Kiilerich <madski@unity3d.com>
parents:
21114
diff
changeset
|
565 else: |
21126
99b5eaf372a7
context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents:
21125
diff
changeset
|
566 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
|
567 try: |
5220c12c43fd
changectx: skip all invalid merge.preferancestor values
Mads Kiilerich <madski@unity3d.com>
parents:
22405
diff
changeset
|
568 ctx = changectx(self._repo, r) |
5220c12c43fd
changectx: skip all invalid merge.preferancestor values
Mads Kiilerich <madski@unity3d.com>
parents:
22405
diff
changeset
|
569 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
|
570 continue |
21126
99b5eaf372a7
context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents:
21125
diff
changeset
|
571 anc = ctx.node() |
99b5eaf372a7
context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents:
21125
diff
changeset
|
572 if anc in cahs: |
99b5eaf372a7
context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents:
21125
diff
changeset
|
573 break |
99b5eaf372a7
context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents:
21125
diff
changeset
|
574 else: |
99b5eaf372a7
context: introduce merge.preferancestor for controlling which ancestor to pick
Mads Kiilerich <madski@unity3d.com>
parents:
21125
diff
changeset
|
575 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
|
576 if warn: |
9f12d8665c7b
ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents:
21126
diff
changeset
|
577 self._repo.ui.status( |
9f12d8665c7b
ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents:
21126
diff
changeset
|
578 (_("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
|
579 (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
|
580 ''.join(_(" alternatively, use --config " |
9f12d8665c7b
ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents:
21126
diff
changeset
|
581 "merge.preferancestor=%s\n") % |
9f12d8665c7b
ancestor: silence multiple ancestor warning outside of merge (issue4234)
Matt Mackall <mpm@selenic.com>
parents:
21126
diff
changeset
|
582 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
|
583 return changectx(self._repo, anc) |
3125
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
584 |
17626
3a524b647897
context: add "descendant()" to changectx for efficient descendant examination
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17469
diff
changeset
|
585 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
|
586 """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
|
587 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
|
588 |
6764 | 589 def walk(self, match): |
8380
a00a4db76a15
context: replace pseudo-set by real set
Simon Heimberg <simohe@besonet.ch>
parents:
8312
diff
changeset
|
590 fset = set(match.files()) |
20292
8dc254198a8f
changectx: increase perf of walk function
Durham Goode <durham@fb.com>
parents:
20236
diff
changeset
|
591 # avoid the entire walk if we're only looking for specific files |
8dc254198a8f
changectx: increase perf of walk function
Durham Goode <durham@fb.com>
parents:
20236
diff
changeset
|
592 if fset and not match.anypats(): |
24380
dd3bccb4b820
context.walk: call with util.all() a generator, not a list
Martin von Zweigbergk <martinvonz@google.com>
parents:
24333
diff
changeset
|
593 if util.all(fn in self for fn in fset): |
20292
8dc254198a8f
changectx: increase perf of walk function
Durham Goode <durham@fb.com>
parents:
20236
diff
changeset
|
594 for fn in sorted(fset): |
8dc254198a8f
changectx: increase perf of walk function
Durham Goode <durham@fb.com>
parents:
20236
diff
changeset
|
595 if match(fn): |
8dc254198a8f
changectx: increase perf of walk function
Durham Goode <durham@fb.com>
parents:
20236
diff
changeset
|
596 yield fn |
8dc254198a8f
changectx: increase perf of walk function
Durham Goode <durham@fb.com>
parents:
20236
diff
changeset
|
597 raise StopIteration |
8dc254198a8f
changectx: increase perf of walk function
Durham Goode <durham@fb.com>
parents:
20236
diff
changeset
|
598 |
6764 | 599 for fn in self: |
16145
616c2e278f18
context: use 'changectx.dirs()' in 'walk()' for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16143
diff
changeset
|
600 if fn in fset: |
616c2e278f18
context: use 'changectx.dirs()' in 'walk()' for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16143
diff
changeset
|
601 # specified pattern is the exact name |
616c2e278f18
context: use 'changectx.dirs()' in 'walk()' for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16143
diff
changeset
|
602 fset.remove(fn) |
6764 | 603 if match(fn): |
604 yield fn | |
24381
82b82168d045
context.walk: walk all files when file and '.' given
Martin von Zweigbergk <martinvonz@google.com>
parents:
24380
diff
changeset
|
605 # for dirstate.walk, files=['.'] means "walk the whole tree". |
82b82168d045
context.walk: walk all files when file and '.' given
Martin von Zweigbergk <martinvonz@google.com>
parents:
24380
diff
changeset
|
606 # follow that here, too |
82b82168d045
context.walk: walk all files when file and '.' given
Martin von Zweigbergk <martinvonz@google.com>
parents:
24380
diff
changeset
|
607 fset.discard('.') |
8380
a00a4db76a15
context: replace pseudo-set by real set
Simon Heimberg <simohe@besonet.ch>
parents:
8312
diff
changeset
|
608 for fn in sorted(fset): |
24326
637da5711122
manifest: have context use self.hasdir()
Drew Gottlieb <drgott@google.com>
parents:
24325
diff
changeset
|
609 if not self.hasdir(fn): |
637da5711122
manifest: have context use self.hasdir()
Drew Gottlieb <drgott@google.com>
parents:
24325
diff
changeset
|
610 match.bad(fn, _('no such file in rev %s') % self) |
6764 | 611 |
21985
7e871e771300
context: add a method to efficiently filter by match if possible
Siddharth Agarwal <sid0@fb.com>
parents:
21973
diff
changeset
|
612 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
|
613 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
|
614 |
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
|
615 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
|
616 """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
|
617 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
|
618 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
|
619 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
|
620 directory, |
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
|
621 memfilectx: a filecontext that represents files in-memory.""" |
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
|
622 def __new__(cls, repo, path, *args, **kwargs): |
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
|
623 return super(basefilectx, cls).__new__(cls) |
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
|
624 |
19573
dffad92ab709
basefilectx: move _filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19572
diff
changeset
|
625 @propertycache |
dffad92ab709
basefilectx: move _filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19572
diff
changeset
|
626 def _filelog(self): |
dffad92ab709
basefilectx: move _filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19572
diff
changeset
|
627 return self._repo.file(self._path) |
dffad92ab709
basefilectx: move _filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19572
diff
changeset
|
628 |
19574
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
629 @propertycache |
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
630 def _changeid(self): |
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
631 if '_changeid' in self.__dict__: |
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
632 return self._changeid |
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
633 elif '_changectx' in self.__dict__: |
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
634 return self._changectx.rev() |
23983
ff070a53ee74
filectx: if we have a _descendantrev, use it to adjust linkrev
Matt Mackall <mpm@selenic.com>
parents:
23981
diff
changeset
|
635 elif '_descendantrev' in self.__dict__: |
ff070a53ee74
filectx: if we have a _descendantrev, use it to adjust linkrev
Matt Mackall <mpm@selenic.com>
parents:
23981
diff
changeset
|
636 # 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
|
637 # descendant, we can (lazily) correct for linkrev aliases |
ff070a53ee74
filectx: if we have a _descendantrev, use it to adjust linkrev
Matt Mackall <mpm@selenic.com>
parents:
23981
diff
changeset
|
638 return self._adjustlinkrev(self._path, self._filelog, |
ff070a53ee74
filectx: if we have a _descendantrev, use it to adjust linkrev
Matt Mackall <mpm@selenic.com>
parents:
23981
diff
changeset
|
639 self._filenode, self._descendantrev) |
19574
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
640 else: |
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
641 return self._filelog.linkrev(self._filerev) |
a01436798988
basefilectx: move _changeid from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19573
diff
changeset
|
642 |
19575
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
643 @propertycache |
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
644 def _filenode(self): |
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
645 if '_fileid' in self.__dict__: |
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
646 return self._filelog.lookup(self._fileid) |
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
647 else: |
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
648 return self._changectx.filenode(self._path) |
5a868137b830
basefilectx: move _filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19574
diff
changeset
|
649 |
19576
18bbd8a3abf3
basefilectx: move _filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19575
diff
changeset
|
650 @propertycache |
18bbd8a3abf3
basefilectx: move _filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19575
diff
changeset
|
651 def _filerev(self): |
18bbd8a3abf3
basefilectx: move _filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19575
diff
changeset
|
652 return self._filelog.rev(self._filenode) |
18bbd8a3abf3
basefilectx: move _filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19575
diff
changeset
|
653 |
19577
b52d572a2177
basefilectx: move _repopath from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19576
diff
changeset
|
654 @propertycache |
b52d572a2177
basefilectx: move _repopath from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19576
diff
changeset
|
655 def _repopath(self): |
b52d572a2177
basefilectx: move _repopath from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19576
diff
changeset
|
656 return self._path |
b52d572a2177
basefilectx: move _repopath from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19576
diff
changeset
|
657 |
19578
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
658 def __nonzero__(self): |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
659 try: |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
660 self._filenode |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
661 return True |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
662 except error.LookupError: |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
663 # file is missing |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
664 return False |
2c149635c2c5
basefilectx: move __nonzero__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19577
diff
changeset
|
665 |
19579
964844d64ef8
basefilectx: move __str__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19578
diff
changeset
|
666 def __str__(self): |
19660
86ce68c1ccb8
basefilectx: use basectx __str__ instead of duplicating logic
Sean Farley <sean.michael.farley@gmail.com>
parents:
19659
diff
changeset
|
667 return "%s@%s" % (self.path(), self._changectx) |
19579
964844d64ef8
basefilectx: move __str__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19578
diff
changeset
|
668 |
19580
e86a594ab11f
basefilectx: move __repr__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19579
diff
changeset
|
669 def __repr__(self): |
e86a594ab11f
basefilectx: move __repr__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19579
diff
changeset
|
670 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
|
671 |
19581
fe50d21be01a
basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19580
diff
changeset
|
672 def __hash__(self): |
fe50d21be01a
basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19580
diff
changeset
|
673 try: |
fe50d21be01a
basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19580
diff
changeset
|
674 return hash((self._path, self._filenode)) |
fe50d21be01a
basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19580
diff
changeset
|
675 except AttributeError: |
fe50d21be01a
basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19580
diff
changeset
|
676 return id(self) |
fe50d21be01a
basefilectx: move __hash__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19580
diff
changeset
|
677 |
19582
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
678 def __eq__(self, other): |
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
679 try: |
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
680 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
|
681 and self._filenode == other._filenode) |
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
682 except AttributeError: |
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
683 return False |
bda1d48bb07f
basefilectx: move __eq__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19581
diff
changeset
|
684 |
19583
e5074d82afc9
basefilectx: move __ne__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19582
diff
changeset
|
685 def __ne__(self, other): |
e5074d82afc9
basefilectx: move __ne__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19582
diff
changeset
|
686 return not (self == other) |
e5074d82afc9
basefilectx: move __ne__ from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19582
diff
changeset
|
687 |
19584
fe300e63c28c
basefilectx: move filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19583
diff
changeset
|
688 def filerev(self): |
fe300e63c28c
basefilectx: move filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19583
diff
changeset
|
689 return self._filerev |
19585
8e553cd6071e
basefilectx: move filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19584
diff
changeset
|
690 def filenode(self): |
8e553cd6071e
basefilectx: move filenode from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19584
diff
changeset
|
691 return self._filenode |
19586
43f9ed2f64b1
basefilectx: move flags from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19585
diff
changeset
|
692 def flags(self): |
43f9ed2f64b1
basefilectx: move flags from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19585
diff
changeset
|
693 return self._changectx.flags(self._path) |
19587
b1c344ebd8e4
basefilectx: move filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19586
diff
changeset
|
694 def filelog(self): |
b1c344ebd8e4
basefilectx: move filelog from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19586
diff
changeset
|
695 return self._filelog |
19588
a192fff6c97d
basefilectx: move rev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19587
diff
changeset
|
696 def rev(self): |
a192fff6c97d
basefilectx: move rev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19587
diff
changeset
|
697 return self._changeid |
19589
6a9043fa06d0
basefilectx: move linkrev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19588
diff
changeset
|
698 def linkrev(self): |
6a9043fa06d0
basefilectx: move linkrev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19588
diff
changeset
|
699 return self._filelog.linkrev(self._filerev) |
19590
90994b176bc1
basefilectx: move node from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19589
diff
changeset
|
700 def node(self): |
90994b176bc1
basefilectx: move node from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19589
diff
changeset
|
701 return self._changectx.node() |
19591
04fbc85f870a
basefilectx: move hex from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19590
diff
changeset
|
702 def hex(self): |
04fbc85f870a
basefilectx: move hex from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19590
diff
changeset
|
703 return self._changectx.hex() |
19592
1cdb3b3df4df
basefilectx: move user from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19591
diff
changeset
|
704 def user(self): |
1cdb3b3df4df
basefilectx: move user from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19591
diff
changeset
|
705 return self._changectx.user() |
19593
e3c241c89350
basefilectx: move date from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19592
diff
changeset
|
706 def date(self): |
e3c241c89350
basefilectx: move date from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19592
diff
changeset
|
707 return self._changectx.date() |
19594
1c030c24e196
basefilectx: move files from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19593
diff
changeset
|
708 def files(self): |
1c030c24e196
basefilectx: move files from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19593
diff
changeset
|
709 return self._changectx.files() |
19595
bb6fd06975a6
basefilectx: move description from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19594
diff
changeset
|
710 def description(self): |
bb6fd06975a6
basefilectx: move description from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19594
diff
changeset
|
711 return self._changectx.description() |
19596
9bc3d0dea371
basefilectx: move branch from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19595
diff
changeset
|
712 def branch(self): |
9bc3d0dea371
basefilectx: move branch from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19595
diff
changeset
|
713 return self._changectx.branch() |
19597
837bc86370f0
basefilectx: move extra from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19596
diff
changeset
|
714 def extra(self): |
837bc86370f0
basefilectx: move extra from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19596
diff
changeset
|
715 return self._changectx.extra() |
19598
e8ef893a3150
basefilectx: move phase from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19597
diff
changeset
|
716 def phase(self): |
e8ef893a3150
basefilectx: move phase from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19597
diff
changeset
|
717 return self._changectx.phase() |
19599
66d83efac20a
basefilectx: move phasestr from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19598
diff
changeset
|
718 def phasestr(self): |
66d83efac20a
basefilectx: move phasestr from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19598
diff
changeset
|
719 return self._changectx.phasestr() |
19600
12cdff44fdc4
basefilectx: move manifest from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19599
diff
changeset
|
720 def manifest(self): |
12cdff44fdc4
basefilectx: move manifest from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19599
diff
changeset
|
721 return self._changectx.manifest() |
19601
f284907631f5
basefilectx: move changectx from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19600
diff
changeset
|
722 def changectx(self): |
f284907631f5
basefilectx: move changectx from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19600
diff
changeset
|
723 return self._changectx |
24333
5da0eb641881
filectx: add a repo accessor
Matt Harbison <matt_harbison@yahoo.com>
parents:
24326
diff
changeset
|
724 def repo(self): |
5da0eb641881
filectx: add a repo accessor
Matt Harbison <matt_harbison@yahoo.com>
parents:
24326
diff
changeset
|
725 return self._repo |
19584
fe300e63c28c
basefilectx: move filerev from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19583
diff
changeset
|
726 |
19602
018ee491a6be
basefilectx: move path from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19601
diff
changeset
|
727 def path(self): |
018ee491a6be
basefilectx: move path from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19601
diff
changeset
|
728 return self._path |
018ee491a6be
basefilectx: move path from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19601
diff
changeset
|
729 |
19603
a92302f48a56
basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19602
diff
changeset
|
730 def isbinary(self): |
a92302f48a56
basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19602
diff
changeset
|
731 try: |
a92302f48a56
basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19602
diff
changeset
|
732 return util.binary(self.data()) |
a92302f48a56
basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19602
diff
changeset
|
733 except IOError: |
a92302f48a56
basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19602
diff
changeset
|
734 return False |
22054
ef0ee0c001bf
basefilectx: move isexec and islink from memfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21992
diff
changeset
|
735 def isexec(self): |
ef0ee0c001bf
basefilectx: move isexec and islink from memfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21992
diff
changeset
|
736 return 'x' in self.flags() |
ef0ee0c001bf
basefilectx: move isexec and islink from memfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21992
diff
changeset
|
737 def islink(self): |
ef0ee0c001bf
basefilectx: move isexec and islink from memfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21992
diff
changeset
|
738 return 'l' in self.flags() |
19603
a92302f48a56
basefilectx: move isbinary from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19602
diff
changeset
|
739 |
19604
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
740 def cmp(self, fctx): |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
741 """compare with other file context |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
742 |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
743 returns True if different than fctx. |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
744 """ |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
745 if (fctx._filerev is None |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
746 and (self._repo._encodefilterpats |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
747 # 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
|
748 # 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
|
749 or self.size() - 4 == fctx.size()) |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
750 or self.size() == fctx.size()): |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
751 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
|
752 |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
753 return True |
ef7c47e4002f
basefilectx: move cmp from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19603
diff
changeset
|
754 |
23979
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
755 def _adjustlinkrev(self, path, filelog, fnode, srcrev, inclusive=False): |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24050
diff
changeset
|
756 """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
|
757 |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
758 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
|
759 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
|
760 this file revision. |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
761 |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
762 :repo: a localrepository object (used to access changelog and manifest) |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
763 :path: the file path |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
764 :fnode: the nodeid of the file revision |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
765 :filelog: the filelog of this path |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
766 :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
|
767 :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
|
768 """ |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
769 repo = self._repo |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
770 cl = repo.unfiltered().changelog |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
771 ma = repo.manifest |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
772 # fetch the linkrev |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
773 fr = filelog.rev(fnode) |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
774 lkr = filelog.linkrev(fr) |
23980
c1ce5442453f
_adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23979
diff
changeset
|
775 # 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
|
776 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
|
777 iteranc = None |
24411
5a12ef618c03
adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24410
diff
changeset
|
778 if srcrev is None: |
5a12ef618c03
adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24410
diff
changeset
|
779 # 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
|
780 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
|
781 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
|
782 else: |
5a12ef618c03
adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24410
diff
changeset
|
783 revs = [srcrev] |
23980
c1ce5442453f
_adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23979
diff
changeset
|
784 if memberanc is None: |
24411
5a12ef618c03
adjustlinkrev: handle 'None' value as source
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24410
diff
changeset
|
785 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
|
786 inclusive=inclusive) |
23979
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
787 # 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
|
788 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
|
789 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
|
790 iteranc = cl.ancestors(revs, lkr, inclusive=inclusive) |
23980
c1ce5442453f
_adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23979
diff
changeset
|
791 for a in iteranc: |
23979
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
792 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
|
793 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
|
794 # 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
|
795 # similar to the one we search for. |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
796 if fnode == ma.readfast(ac[0]).get(path): |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
797 return a |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
798 # 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
|
799 # 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
|
800 # 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
|
801 # 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
|
802 return lkr |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
803 |
23703
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
804 def introrev(self): |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
805 """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
|
806 |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
807 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
|
808 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
|
809 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
|
810 '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
|
811 changesets. |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
812 """ |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
813 lkr = self.linkrev() |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
814 attrs = vars(self) |
aaa76612b3c0
linkrev: introduce an 'introrev' method on filectx
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23702
diff
changeset
|
815 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
|
816 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
|
817 return self.linkrev() |
23979
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
818 return self._adjustlinkrev(self._path, self._filelog, self._filenode, |
087603b50889
filectx: move _adjustlinkrev to a method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23865
diff
changeset
|
819 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
|
820 |
19605
cf7322cb1c13
basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19604
diff
changeset
|
821 def parents(self): |
22201
269688a398c4
cleanup: fix some list comprehension redefinitions of existing vars
Mads Kiilerich <madski@unity3d.com>
parents:
22192
diff
changeset
|
822 _path = self._path |
19605
cf7322cb1c13
basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19604
diff
changeset
|
823 fl = self._filelog |
23688
20932983d520
filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23687
diff
changeset
|
824 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
|
825 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
|
826 |
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
|
827 r = fl.renamed(self._filenode) |
19605
cf7322cb1c13
basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19604
diff
changeset
|
828 if r: |
23688
20932983d520
filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23687
diff
changeset
|
829 # - 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
|
830 # - 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
|
831 # 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
|
832 # the first one. |
20932983d520
filectx.parents: filter nullrev parent sooner
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23687
diff
changeset
|
833 # |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24050
diff
changeset
|
834 # 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
|
835 # 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
|
836 # 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
|
837 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
|
838 |
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
|
839 ret = [] |
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
|
840 for path, fnode, l in pl: |
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
|
841 if '_changeid' in vars(self) or '_changectx' in vars(self): |
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
|
842 # If self is associated with a changeset (probably explicitly |
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
|
843 # fed), ensure the created filectx is associated with a |
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
|
844 # changeset that is an ancestor of self.changectx. |
23984
2896f53509a7
filectx: use _descendantrev in parents()
Matt Mackall <mpm@selenic.com>
parents:
23983
diff
changeset
|
845 # This lets us later use _adjustlinkrev to get a correct link. |
2896f53509a7
filectx: use _descendantrev in parents()
Matt Mackall <mpm@selenic.com>
parents:
23983
diff
changeset
|
846 fctx = filectx(self._repo, path, fileid=fnode, filelog=l) |
2896f53509a7
filectx: use _descendantrev in parents()
Matt Mackall <mpm@selenic.com>
parents:
23983
diff
changeset
|
847 fctx._descendantrev = self.rev() |
23980
c1ce5442453f
_adjustlinkrev: reuse ancestors set during rename detection (issue4514)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23979
diff
changeset
|
848 fctx._ancestrycontext = getattr(self, '_ancestrycontext', None) |
23984
2896f53509a7
filectx: use _descendantrev in parents()
Matt Mackall <mpm@selenic.com>
parents:
23983
diff
changeset
|
849 elif '_descendantrev' in vars(self): |
2896f53509a7
filectx: use _descendantrev in parents()
Matt Mackall <mpm@selenic.com>
parents:
23983
diff
changeset
|
850 # Otherwise propagate _descendantrev if we have one associated. |
2896f53509a7
filectx: use _descendantrev in parents()
Matt Mackall <mpm@selenic.com>
parents:
23983
diff
changeset
|
851 fctx = filectx(self._repo, path, fileid=fnode, filelog=l) |
2896f53509a7
filectx: use _descendantrev in parents()
Matt Mackall <mpm@selenic.com>
parents:
23983
diff
changeset
|
852 fctx._descendantrev = self._descendantrev |
2896f53509a7
filectx: use _descendantrev in parents()
Matt Mackall <mpm@selenic.com>
parents:
23983
diff
changeset
|
853 fctx._ancestrycontext = getattr(self, '_ancestrycontext', None) |
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
|
854 else: |
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
|
855 fctx = filectx(self._repo, path, fileid=fnode, filelog=l) |
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
|
856 ret.append(fctx) |
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
|
857 return ret |
19605
cf7322cb1c13
basefilectx: move parents from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19604
diff
changeset
|
858 |
19606
284f91230c07
basefilectx: move p1 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19605
diff
changeset
|
859 def p1(self): |
284f91230c07
basefilectx: move p1 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19605
diff
changeset
|
860 return self.parents()[0] |
284f91230c07
basefilectx: move p1 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19605
diff
changeset
|
861 |
19607
056a949799ac
basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19606
diff
changeset
|
862 def p2(self): |
056a949799ac
basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19606
diff
changeset
|
863 p = self.parents() |
056a949799ac
basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19606
diff
changeset
|
864 if len(p) == 2: |
056a949799ac
basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19606
diff
changeset
|
865 return p[1] |
056a949799ac
basefilectx: move p2 from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19606
diff
changeset
|
866 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
|
867 |
15528
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
868 def annotate(self, follow=False, linenumber=None, diffopts=None): |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
869 '''returns a list of tuples of (ctx, line) for each line |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
870 in the file, where ctx is the filectx of the node where |
4856
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
871 that line was last changed. |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
872 This returns tuples of ((ctx, linenumber), line) for each line, |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
873 if "linenumber" parameter is NOT "None". |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
874 In such tuples, linenumber means one at the first appearance |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
875 in the managed file. |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
876 To reduce annotation cost, |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
877 this returns fixed value(False is used) as linenumber, |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
878 if "linenumber" parameter is "False".''' |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
879 |
22191
9f9a2b79dcd7
annotate: rewrite long short-circuit statement by if-elif-else
Yuya Nishihara <yuya@tcha.org>
parents:
22075
diff
changeset
|
880 if linenumber is None: |
22192
d1823cdf8554
annotate: inline definition of decorate() functions
Yuya Nishihara <yuya@tcha.org>
parents:
22191
diff
changeset
|
881 def decorate(text, rev): |
d1823cdf8554
annotate: inline definition of decorate() functions
Yuya Nishihara <yuya@tcha.org>
parents:
22191
diff
changeset
|
882 return ([rev] * len(text.splitlines()), text) |
22191
9f9a2b79dcd7
annotate: rewrite long short-circuit statement by if-elif-else
Yuya Nishihara <yuya@tcha.org>
parents:
22075
diff
changeset
|
883 elif linenumber: |
22192
d1823cdf8554
annotate: inline definition of decorate() functions
Yuya Nishihara <yuya@tcha.org>
parents:
22191
diff
changeset
|
884 def decorate(text, rev): |
d1823cdf8554
annotate: inline definition of decorate() functions
Yuya Nishihara <yuya@tcha.org>
parents:
22191
diff
changeset
|
885 size = len(text.splitlines()) |
d1823cdf8554
annotate: inline definition of decorate() functions
Yuya Nishihara <yuya@tcha.org>
parents:
22191
diff
changeset
|
886 return ([(rev, i) for i in xrange(1, size + 1)], text) |
22191
9f9a2b79dcd7
annotate: rewrite long short-circuit statement by if-elif-else
Yuya Nishihara <yuya@tcha.org>
parents:
22075
diff
changeset
|
887 else: |
22192
d1823cdf8554
annotate: inline definition of decorate() functions
Yuya Nishihara <yuya@tcha.org>
parents:
22191
diff
changeset
|
888 def decorate(text, rev): |
d1823cdf8554
annotate: inline definition of decorate() functions
Yuya Nishihara <yuya@tcha.org>
parents:
22191
diff
changeset
|
889 return ([(rev, False)] * len(text.splitlines()), 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
|
890 |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
891 def pair(parent, child): |
15528
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
892 blocks = mdiff.allblocks(parent[1], child[1], opts=diffopts, |
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
893 refine=True) |
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
894 for (a1, a2, b1, b2), t in blocks: |
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
895 # Changed blocks ('!') or blocks made only of blank lines ('~') |
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
896 # belong to the child. |
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
897 if t == '=': |
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
898 child[0][b1:b2] = parent[0][a1:a2] |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
899 return child |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
900 |
9097
431462bd8478
fix memory usage of revlog caches by limiting cache size [issue1639]
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
901 getlog = util.lrucachefunc(lambda x: self._repo.file(x)) |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
902 |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
903 def parents(f): |
19292
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
904 pl = f.parents() |
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
905 |
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
906 # 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
|
907 if not follow: |
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
908 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
|
909 |
19292
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
910 # 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
|
911 # from the cache to save time |
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
912 for p in pl: |
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
913 if not '_filelog' in p.__dict__: |
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
914 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
|
915 |
19292
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
19288
diff
changeset
|
916 return pl |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
917 |
3404
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
918 # use linkrev to find the first changeset where self appeared |
23705
28a302e9225d
linkrev: also adjust linkrev when bootstrapping annotate (issue4305)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23703
diff
changeset
|
919 base = self |
28a302e9225d
linkrev: also adjust linkrev when bootstrapping annotate (issue4305)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23703
diff
changeset
|
920 introrev = self.introrev() |
28a302e9225d
linkrev: also adjust linkrev when bootstrapping annotate (issue4305)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23703
diff
changeset
|
921 if self.rev() != introrev: |
23770
50f0096a7346
filectx: fix annotate to not directly instantiate filectx
Durham Goode <durham@fb.com>
parents:
23757
diff
changeset
|
922 base = self.filectx(self.filenode(), changeid=introrev) |
24407
dd01834a696f
annotate: reuse ancestry context when adjusting linkrev (issue4532)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23984
diff
changeset
|
923 ac = self._repo.changelog.ancestors([introrev], inclusive=True) |
dd01834a696f
annotate: reuse ancestry context when adjusting linkrev (issue4532)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23984
diff
changeset
|
924 base._ancestrycontext = ac |
3404
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
925 |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
926 # 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
|
927 # 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
|
928 # depth-first search. |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
929 |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
930 visit = [base] |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
931 hist = {} |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
932 pcache = {} |
3404
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
933 needed = {base: 1} |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
934 while visit: |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
935 f = visit[-1] |
18993
0fd0612dc855
annotate: increase refcount of each revisions correctly (issue3841)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18992
diff
changeset
|
936 pcached = f in pcache |
0fd0612dc855
annotate: increase refcount of each revisions correctly (issue3841)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18992
diff
changeset
|
937 if not pcached: |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
938 pcache[f] = parents(f) |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
939 |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
940 ready = True |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
941 pl = pcache[f] |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
942 for p in pl: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
943 if p not in hist: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
944 ready = False |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
945 visit.append(p) |
18993
0fd0612dc855
annotate: increase refcount of each revisions correctly (issue3841)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18992
diff
changeset
|
946 if not pcached: |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
947 needed[p] = needed.get(p, 0) + 1 |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
948 if ready: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
949 visit.pop() |
18992
a54ddfae8907
annotate: reuse already calculated annotation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18986
diff
changeset
|
950 reusable = f in hist |
a54ddfae8907
annotate: reuse already calculated annotation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18986
diff
changeset
|
951 if reusable: |
a54ddfae8907
annotate: reuse already calculated annotation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18986
diff
changeset
|
952 curr = hist[f] |
a54ddfae8907
annotate: reuse already calculated annotation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18986
diff
changeset
|
953 else: |
a54ddfae8907
annotate: reuse already calculated annotation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18986
diff
changeset
|
954 curr = decorate(f.data(), f) |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
955 for p in pl: |
18992
a54ddfae8907
annotate: reuse already calculated annotation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18986
diff
changeset
|
956 if not reusable: |
a54ddfae8907
annotate: reuse already calculated annotation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18986
diff
changeset
|
957 curr = pair(hist[p], curr) |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
958 if needed[p] == 1: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
959 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
|
960 del needed[p] |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
961 else: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
962 needed[p] -= 1 |
6762 | 963 |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
964 hist[f] = curr |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
965 pcache[f] = [] |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
966 |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
967 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
|
968 |
19610
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
969 def ancestors(self, followfirst=False): |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
970 visit = {} |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
971 c = self |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
972 if followfirst: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
973 cut = 1 |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
974 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
975 cut = None |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
976 |
19610
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
977 while True: |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
978 for parent in c.parents()[:cut]: |
23981
24b57c3899f8
filectx: use linkrev to sort ancestors
Matt Mackall <mpm@selenic.com>
parents:
23980
diff
changeset
|
979 visit[(parent.linkrev(), parent.filenode())] = parent |
19610
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
980 if not visit: |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
981 break |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
982 c = visit.pop(max(visit)) |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
983 yield c |
0670422d58c6
basefilectx: move ancestors from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19609
diff
changeset
|
984 |
19608
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
985 class filectx(basefilectx): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
986 """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
|
987 filerevision convenient.""" |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
988 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
|
989 filelog=None, changectx=None): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
990 """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
|
991 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
|
992 self._repo = repo |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
993 self._path = path |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
994 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
995 assert (changeid is not None |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
996 or fileid is not None |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
997 or changectx is not None), \ |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
998 ("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
|
999 % (changeid, fileid, changectx)) |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1000 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1001 if filelog is not None: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1002 self._filelog = filelog |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1003 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1004 if changeid is not None: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1005 self._changeid = changeid |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1006 if changectx is not None: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1007 self._changectx = changectx |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1008 if fileid is not None: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1009 self._fileid = fileid |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1010 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1011 @propertycache |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1012 def _changectx(self): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1013 try: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1014 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
|
1015 except error.FilteredRepoLookupError: |
19608
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1016 # 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
|
1017 # 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
|
1018 # `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
|
1019 # 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
|
1020 # 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
|
1021 # `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
|
1022 # filtering. |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1023 # |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1024 # 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
|
1025 # 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
|
1026 # 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
|
1027 # behavior" is seen as better as "crash" |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1028 # |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1029 # 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
|
1030 # 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
|
1031 # 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
|
1032 return changectx(self._repo.unfiltered(), self._changeid) |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1033 |
23770
50f0096a7346
filectx: fix annotate to not directly instantiate filectx
Durham Goode <durham@fb.com>
parents:
23757
diff
changeset
|
1034 def filectx(self, fileid, changeid=None): |
19608
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1035 '''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
|
1036 opening a new filelog''' |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1037 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
|
1038 filelog=self._filelog, changeid=changeid) |
19608
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1039 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1040 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
|
1041 try: |
d81792872984
context: handle censored data in an on-disk file context based on config
Mike Edgar <adgar@google.com>
parents:
22916
diff
changeset
|
1042 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
|
1043 except error.CensoredNodeError: |
d81792872984
context: handle censored data in an on-disk file context based on config
Mike Edgar <adgar@google.com>
parents:
22916
diff
changeset
|
1044 if self._repo.ui.config("censor", "policy", "abort") == "ignore": |
d81792872984
context: handle censored data in an on-disk file context based on config
Mike Edgar <adgar@google.com>
parents:
22916
diff
changeset
|
1045 return "" |
d81792872984
context: handle censored data in an on-disk file context based on config
Mike Edgar <adgar@google.com>
parents:
22916
diff
changeset
|
1046 raise util.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
|
1047 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
|
1048 |
19608
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1049 def size(self): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1050 return self._filelog.size(self._filerev) |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1051 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1052 def renamed(self): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1053 """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
|
1054 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1055 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
|
1056 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
|
1057 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
|
1058 """ |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1059 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1060 renamed = self._filelog.renamed(self._filenode) |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1061 if not renamed: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1062 return renamed |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1063 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1064 if self.rev() == self.linkrev(): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1065 return renamed |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1066 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1067 name = self.path() |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1068 fnode = self._filenode |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1069 for p in self._changectx.parents(): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1070 try: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1071 if fnode == p.filenode(name): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1072 return None |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1073 except error.LookupError: |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1074 pass |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1075 return renamed |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1076 |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1077 def children(self): |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1078 # hard for renames |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1079 c = self._filelog.children(self._filenode) |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1080 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
|
1081 filelog=self._filelog) for x in c] |
896193a9cab4
basefilectx: move annotate from filectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19607
diff
changeset
|
1082 |
19733
51988f008df3
context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents:
19705
diff
changeset
|
1083 class committablectx(basectx): |
51988f008df3
context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents:
19705
diff
changeset
|
1084 """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
|
1085 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
|
1086 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
|
1087 changes=None): |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1088 self._repo = repo |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1089 self._rev = None |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1090 self._node = None |
6709
f84f507c53d3
context: let workingctx.date(), .user() and description() be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6708
diff
changeset
|
1091 self._text = text |
6718
4386a7706828
Fix commit date (issue1193)
Christian Ebert <blacktrash@gmx.net>
parents:
6715
diff
changeset
|
1092 if date: |
6709
f84f507c53d3
context: let workingctx.date(), .user() and description() be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6708
diff
changeset
|
1093 self._date = util.parsedate(date) |
6817 | 1094 if user: |
1095 self._user = user | |
6707
02bad34230a2
localrepo: hide commit() file selection behind workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6705
diff
changeset
|
1096 if changes: |
21592
16f62b4203b1
committablectx: simplify caching the status
Sean Farley <sean.michael.farley@gmail.com>
parents:
21590
diff
changeset
|
1097 self._status = changes |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1098 |
6708
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1099 self._extra = {} |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1100 if extra: |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1101 self._extra = extra.copy() |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1102 if 'branch' not in self._extra: |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1103 try: |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
13031
diff
changeset
|
1104 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
|
1105 except UnicodeDecodeError: |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1106 raise util.Abort(_('branch name not in UTF-8!')) |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1107 self._extra['branch'] = branch |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1108 if self._extra['branch'] == '': |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1109 self._extra['branch'] = 'default' |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
1110 |
19666
09459edfb48b
commitablectx: move __str__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19665
diff
changeset
|
1111 def __str__(self): |
09459edfb48b
commitablectx: move __str__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19665
diff
changeset
|
1112 return str(self._parents[0]) + "+" |
09459edfb48b
commitablectx: move __str__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19665
diff
changeset
|
1113 |
19667
40040e4015f9
commitablectx: move __nonzero__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19666
diff
changeset
|
1114 def __nonzero__(self): |
40040e4015f9
commitablectx: move __nonzero__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19666
diff
changeset
|
1115 return True |
40040e4015f9
commitablectx: move __nonzero__ from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19666
diff
changeset
|
1116 |
15337
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1117 def _buildflagfunc(self): |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1118 # 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
|
1119 # filesystem doesn't support them |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1120 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1121 copiesget = self._repo.dirstate.copies().get |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1122 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1123 if len(self._parents) < 2: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1124 # when we have one parent, it's easy: copy from parent |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1125 man = self._parents[0].manifest() |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1126 def func(f): |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1127 f = copiesget(f, f) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1128 return man.flags(f) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1129 else: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1130 # 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
|
1131 # result from the merge (issue1802) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1132 p1, p2 = self._parents |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1133 pa = p1.ancestor(p2) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1134 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
|
1135 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1136 def func(f): |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1137 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
|
1138 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
|
1139 if fl1 == fl2: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1140 return fl1 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1141 if fl1 == fla: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1142 return fl2 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1143 if fl2 == fla: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1144 return fl1 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1145 return '' # punt for conflicts |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1146 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1147 return func |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1148 |
19670
6ac735fbea50
commitablectx: move _flagfunc from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19669
diff
changeset
|
1149 @propertycache |
6ac735fbea50
commitablectx: move _flagfunc from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19669
diff
changeset
|
1150 def _flagfunc(self): |
6ac735fbea50
commitablectx: move _flagfunc from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19669
diff
changeset
|
1151 return self._repo.dirstate.flagfunc(self._buildflagfunc) |
6ac735fbea50
commitablectx: move _flagfunc from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19669
diff
changeset
|
1152 |
15337
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1153 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1154 def _manifest(self): |
23410
cd9e5e57064d
manifest: document the extra letter in working copy manifest node
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23404
diff
changeset
|
1155 """generate a manifest corresponding to the values in self._status |
cd9e5e57064d
manifest: document the extra letter in working copy manifest node
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23404
diff
changeset
|
1156 |
cd9e5e57064d
manifest: document the extra letter in working copy manifest node
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23404
diff
changeset
|
1157 This reuse the file nodeid from parent, but we append an extra letter |
23543
4dd8a6a1240d
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23410
diff
changeset
|
1158 when modified. Modified files get an extra 'm' while added files get |
4dd8a6a1240d
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23410
diff
changeset
|
1159 an extra 'a'. This is used by manifests merge to see that files |
23410
cd9e5e57064d
manifest: document the extra letter in working copy manifest node
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23404
diff
changeset
|
1160 are different and by update logic to avoid deleting newly added files. |
cd9e5e57064d
manifest: document the extra letter in working copy manifest node
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23404
diff
changeset
|
1161 """ |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1162 |
23401
fd1bab28a8cc
manifest: fix a bug where working copy file 'add' mark was buggy
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23110
diff
changeset
|
1163 man1 = self._parents[0].manifest() |
fd1bab28a8cc
manifest: fix a bug where working copy file 'add' mark was buggy
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23110
diff
changeset
|
1164 man = man1.copy() |
10921
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
1165 if len(self._parents) > 1: |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
1166 man2 = self.p2().manifest() |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
1167 def getman(f): |
23401
fd1bab28a8cc
manifest: fix a bug where working copy file 'add' mark was buggy
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23110
diff
changeset
|
1168 if f in man1: |
fd1bab28a8cc
manifest: fix a bug where working copy file 'add' mark was buggy
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23110
diff
changeset
|
1169 return man1 |
10921
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
1170 return man2 |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
1171 else: |
23401
fd1bab28a8cc
manifest: fix a bug where working copy file 'add' mark was buggy
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23110
diff
changeset
|
1172 getman = lambda f: man1 |
15337
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1173 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1174 copied = self._repo.dirstate.copies() |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
1175 ff = self._flagfunc |
22916
cfa8d7561938
context: store status class instead of plain tuple in self._status
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1176 for i, l in (("a", self._status.added), ("m", self._status.modified)): |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1177 for f in l: |
10921
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
1178 orig = copied.get(f, f) |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
1179 man[f] = getman(orig).get(orig, nullid) + i |
3823
676b75547d13
context: don't spuriously raise abort when a file goes missing.
Matt Mackall <mpm@selenic.com>
parents:
3715
diff
changeset
|
1180 try: |
22942
03602f76deee
manifest: rename ambiguously-named set to setflag
Augie Fackler <raf@durin42.com>
parents:
22932
diff
changeset
|
1181 man.setflag(f, ff(f)) |
3823
676b75547d13
context: don't spuriously raise abort when a file goes missing.
Matt Mackall <mpm@selenic.com>
parents:
3715
diff
changeset
|
1182 except OSError: |
676b75547d13
context: don't spuriously raise abort when a file goes missing.
Matt Mackall <mpm@selenic.com>
parents:
3715
diff
changeset
|
1183 pass |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1184 |
22916
cfa8d7561938
context: store status class instead of plain tuple in self._status
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1185 for f in self._status.deleted + self._status.removed: |
3325
50a18815e3f0
Revert changeset c67920d78248.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents:
3313
diff
changeset
|
1186 if f in man: |
50a18815e3f0
Revert changeset c67920d78248.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents:
3313
diff
changeset
|
1187 del man[f] |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1188 |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1189 return man |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1190 |
19672
375986c02539
commitablectx: move _status from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19671
diff
changeset
|
1191 @propertycache |
375986c02539
commitablectx: move _status from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19671
diff
changeset
|
1192 def _status(self): |
21592
16f62b4203b1
committablectx: simplify caching the status
Sean Farley <sean.michael.farley@gmail.com>
parents:
21590
diff
changeset
|
1193 return self._repo.status() |
19672
375986c02539
commitablectx: move _status from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19671
diff
changeset
|
1194 |
19674
ec5b2e2b947f
commitablectx: move _user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19673
diff
changeset
|
1195 @propertycache |
ec5b2e2b947f
commitablectx: move _user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19673
diff
changeset
|
1196 def _user(self): |
ec5b2e2b947f
commitablectx: move _user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19673
diff
changeset
|
1197 return self._repo.ui.username() |
ec5b2e2b947f
commitablectx: move _user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19673
diff
changeset
|
1198 |
19676
103525f36337
commitablectx: move _date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19675
diff
changeset
|
1199 @propertycache |
103525f36337
commitablectx: move _date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19675
diff
changeset
|
1200 def _date(self): |
103525f36337
commitablectx: move _date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19675
diff
changeset
|
1201 return util.makedate() |
103525f36337
commitablectx: move _date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19675
diff
changeset
|
1202 |
21587
02a8612ddec2
committablectx: add subrev method to return None
Sean Farley <sean.michael.farley@gmail.com>
parents:
21586
diff
changeset
|
1203 def subrev(self, subpath): |
02a8612ddec2
committablectx: add subrev method to return None
Sean Farley <sean.michael.farley@gmail.com>
parents:
21586
diff
changeset
|
1204 return None |
02a8612ddec2
committablectx: add subrev method to return None
Sean Farley <sean.michael.farley@gmail.com>
parents:
21586
diff
changeset
|
1205 |
19675
84249d49f37c
commitablectx: move user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19674
diff
changeset
|
1206 def user(self): |
84249d49f37c
commitablectx: move user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19674
diff
changeset
|
1207 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
|
1208 def date(self): |
e11415510352
commitablectx: move date from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19676
diff
changeset
|
1209 return self._date |
19678
897c2dbc0256
commitablectx: move description from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19677
diff
changeset
|
1210 def description(self): |
897c2dbc0256
commitablectx: move description from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19677
diff
changeset
|
1211 return self._text |
19679
f21804f1582e
commitablectx: move files from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19678
diff
changeset
|
1212 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
|
1213 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
|
1214 self._status.removed) |
19675
84249d49f37c
commitablectx: move user from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19674
diff
changeset
|
1215 |
19680
fc33fcfa08f2
commitablectx: move modified from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19679
diff
changeset
|
1216 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
|
1217 return self._status.modified |
19681
cfc4ae65023f
commitablectx: move added from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19680
diff
changeset
|
1218 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
|
1219 return self._status.added |
19682
42ffc7f31acf
commitablectx: move removed from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19681
diff
changeset
|
1220 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
|
1221 return self._status.removed |
19683
6336f35ed77d
commitablectx: move deleted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19682
diff
changeset
|
1222 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
|
1223 return self._status.deleted |
19687
54b3b4821bfb
commitablectx: move branch from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19686
diff
changeset
|
1224 def branch(self): |
54b3b4821bfb
commitablectx: move branch from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19686
diff
changeset
|
1225 return encoding.tolocal(self._extra['branch']) |
19688
21e1068109a7
commitablectx: move closesbranch from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19687
diff
changeset
|
1226 def closesbranch(self): |
21e1068109a7
commitablectx: move closesbranch from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19687
diff
changeset
|
1227 return 'close' in self._extra |
19689
8dbb66f339f3
commitablectx: move extra from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19688
diff
changeset
|
1228 def extra(self): |
8dbb66f339f3
commitablectx: move extra from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19688
diff
changeset
|
1229 return self._extra |
19680
fc33fcfa08f2
commitablectx: move modified from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19679
diff
changeset
|
1230 |
19690
65ff9fd67d8d
commitablectx: move tags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19689
diff
changeset
|
1231 def tags(self): |
65ff9fd67d8d
commitablectx: move tags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19689
diff
changeset
|
1232 t = [] |
65ff9fd67d8d
commitablectx: move tags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19689
diff
changeset
|
1233 for p in self.parents(): |
65ff9fd67d8d
commitablectx: move tags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19689
diff
changeset
|
1234 t.extend(p.tags()) |
65ff9fd67d8d
commitablectx: move tags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19689
diff
changeset
|
1235 return t |
65ff9fd67d8d
commitablectx: move tags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19689
diff
changeset
|
1236 |
19691
33ae2052d924
commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19690
diff
changeset
|
1237 def bookmarks(self): |
33ae2052d924
commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19690
diff
changeset
|
1238 b = [] |
33ae2052d924
commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19690
diff
changeset
|
1239 for p in self.parents(): |
33ae2052d924
commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19690
diff
changeset
|
1240 b.extend(p.bookmarks()) |
33ae2052d924
commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19690
diff
changeset
|
1241 return b |
33ae2052d924
commitablectx: move bookmarks from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19690
diff
changeset
|
1242 |
19692
594f4d2b0ce9
commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19691
diff
changeset
|
1243 def phase(self): |
594f4d2b0ce9
commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19691
diff
changeset
|
1244 phase = phases.draft # default phase to draft |
594f4d2b0ce9
commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19691
diff
changeset
|
1245 for p in self.parents(): |
594f4d2b0ce9
commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19691
diff
changeset
|
1246 phase = max(phase, p.phase()) |
594f4d2b0ce9
commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19691
diff
changeset
|
1247 return phase |
594f4d2b0ce9
commitablectx: move phase from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19691
diff
changeset
|
1248 |
19693
56ba14d4bc02
commitablectx: move hidden from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19692
diff
changeset
|
1249 def hidden(self): |
56ba14d4bc02
commitablectx: move hidden from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19692
diff
changeset
|
1250 return False |
56ba14d4bc02
commitablectx: move hidden from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19692
diff
changeset
|
1251 |
19694
ba4c01c34df9
commitablectx: move children from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19693
diff
changeset
|
1252 def children(self): |
ba4c01c34df9
commitablectx: move children from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19693
diff
changeset
|
1253 return [] |
ba4c01c34df9
commitablectx: move children from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19693
diff
changeset
|
1254 |
19695
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1255 def flags(self, path): |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1256 if '_manifest' in self.__dict__: |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1257 try: |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1258 return self._manifest.flags(path) |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1259 except KeyError: |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1260 return '' |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1261 |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1262 try: |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1263 return self._flagfunc(path) |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1264 except OSError: |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1265 return '' |
6c52adcaba0e
commitablectx: move flags from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19694
diff
changeset
|
1266 |
19696
210cc42a8ac2
commitablectx: move ancestor from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19695
diff
changeset
|
1267 def ancestor(self, c2): |
22389
94f77624dbb5
comments: describe ancestor consistently - avoid 'least common ancestor'
Mads Kiilerich <madski@unity3d.com>
parents:
22313
diff
changeset
|
1268 """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
|
1269 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
|
1270 |
19697
8c95e74857c6
commitablectx: move walk from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19696
diff
changeset
|
1271 def walk(self, match): |
8c95e74857c6
commitablectx: move walk from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19696
diff
changeset
|
1272 return sorted(self._repo.dirstate.walk(match, sorted(self.substate), |
8c95e74857c6
commitablectx: move walk from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19696
diff
changeset
|
1273 True, False)) |
8c95e74857c6
commitablectx: move walk from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19696
diff
changeset
|
1274 |
21985
7e871e771300
context: add a method to efficiently filter by match if possible
Siddharth Agarwal <sid0@fb.com>
parents:
21973
diff
changeset
|
1275 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
|
1276 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
|
1277 |
19698
8d4a8f4eb404
commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19697
diff
changeset
|
1278 def ancestors(self): |
23616
11a160547d7f
context: return dirstate parents in workingctx.ancestors()
Durham Goode <durham@fb.com>
parents:
23603
diff
changeset
|
1279 for p in self._parents: |
11a160547d7f
context: return dirstate parents in workingctx.ancestors()
Durham Goode <durham@fb.com>
parents:
23603
diff
changeset
|
1280 yield p |
19698
8d4a8f4eb404
commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19697
diff
changeset
|
1281 for a in self._repo.changelog.ancestors( |
8d4a8f4eb404
commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19697
diff
changeset
|
1282 [p.rev() for p in self._parents]): |
8d4a8f4eb404
commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19697
diff
changeset
|
1283 yield changectx(self._repo, a) |
8d4a8f4eb404
commitablectx: move ancestors from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19697
diff
changeset
|
1284 |
19699
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1285 def markcommitted(self, node): |
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1286 """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
|
1287 |
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1288 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
|
1289 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
|
1290 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
|
1291 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
|
1292 |
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1293 """ |
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1294 |
22405
6f63c47cbb86
dirstate: wrap setparent calls with begin/endparentchange (issue4353)
Durham Goode <durham@fb.com>
parents:
22389
diff
changeset
|
1295 self._repo.dirstate.beginparentchange() |
19699
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1296 for f in self.modified() + self.added(): |
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1297 self._repo.dirstate.normal(f) |
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1298 for f in self.removed(): |
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1299 self._repo.dirstate.drop(f) |
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1300 self._repo.dirstate.setparents(node) |
22405
6f63c47cbb86
dirstate: wrap setparent calls with begin/endparentchange (issue4353)
Durham Goode <durham@fb.com>
parents:
22389
diff
changeset
|
1301 self._repo.dirstate.endparentchange() |
19699
9fbc193b2358
commitablectx: move markcommitted from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19698
diff
changeset
|
1302 |
19733
51988f008df3
context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents:
19705
diff
changeset
|
1303 class workingctx(committablectx): |
19671
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1304 """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
|
1305 the current working directory convenient. |
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1306 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
|
1307 user - username string, or None. |
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1308 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
|
1309 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
|
1310 or None to use the repository status. |
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1311 """ |
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1312 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
|
1313 changes=None): |
367e95bba6e8
commitablectx: move _manifest from workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19670
diff
changeset
|
1314 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
|
1315 |
14129
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
1316 def __iter__(self): |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
1317 d = self._repo.dirstate |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
1318 for f in d: |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
1319 if d[f] != 'r': |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
1320 yield f |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
1321 |
21845
04f5b5e3792e
committablectx: move __contains__ into workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21844
diff
changeset
|
1322 def __contains__(self, key): |
04f5b5e3792e
committablectx: move __contains__ into workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21844
diff
changeset
|
1323 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
|
1324 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
1325 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1326 def _parents(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1327 p = self._repo.dirstate.parents() |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1328 if p[1] == nullid: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1329 p = p[:-1] |
17330
32e9d63d9ba6
context: simplify workingctx._parents
Patrick Mezard <patrick@mezard.eu>
parents:
17207
diff
changeset
|
1330 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
|
1331 |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
1332 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
|
1333 """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
|
1334 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
|
1335 filelog=filelog) |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1336 |
16491
bfe89d65d651
update: make --check abort with dirty subrepos
Patrick Mezard <patrick@mezard.eu>
parents:
16410
diff
changeset
|
1337 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
|
1338 "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
|
1339 # check subrepos first |
18364
6252b4f1c4b4
subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
18252
diff
changeset
|
1340 for s in sorted(self.substate): |
11110
22f5ad0b5857
subrepo: dirtiness checks should iterate over subrepos
Edouard Gomez <ed.gomez@free.fr>
parents:
11106
diff
changeset
|
1341 if self.sub(s).dirty(): |
22f5ad0b5857
subrepo: dirtiness checks should iterate over subrepos
Edouard Gomez <ed.gomez@free.fr>
parents:
11106
diff
changeset
|
1342 return True |
22f5ad0b5857
subrepo: dirtiness checks should iterate over subrepos
Edouard Gomez <ed.gomez@free.fr>
parents:
11106
diff
changeset
|
1343 # check current working dir |
16491
bfe89d65d651
update: make --check abort with dirty subrepos
Patrick Mezard <patrick@mezard.eu>
parents:
16410
diff
changeset
|
1344 return ((merge and self.p2()) or |
bfe89d65d651
update: make --check abort with dirty subrepos
Patrick Mezard <patrick@mezard.eu>
parents:
16410
diff
changeset
|
1345 (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
|
1346 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
|
1347 (missing and self.deleted())) |
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
1348 |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1349 def add(self, list, prefix=""): |
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1350 join = lambda f: 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
|
1351 wlock = self._repo.wlock() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1352 ui, ds = self._repo.ui, self._repo.dirstate |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1353 try: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1354 rejected = [] |
19900
7c21e3398931
context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19734
diff
changeset
|
1355 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
|
1356 for f in list: |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
13877
diff
changeset
|
1357 scmutil.checkportable(ui, join(f)) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1358 try: |
19900
7c21e3398931
context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19734
diff
changeset
|
1359 st = lstat(f) |
14004
97ed99d1f419
eliminate various naked except clauses
Idan Kamara <idankk86@gmail.com>
parents:
13962
diff
changeset
|
1360 except OSError: |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1361 ui.warn(_("%s does not exist!\n") % join(f)) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1362 rejected.append(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1363 continue |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1364 if st.st_size > 10000000: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1365 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
|
1366 "to manage this file\n" |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1367 "(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
|
1368 "pending addition)\n") |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1369 % (f, 3 * st.st_size // 1000000, join(f))) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1370 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
|
1371 ui.warn(_("%s not added: only files and symlinks " |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1372 "supported currently\n") % join(f)) |
19900
7c21e3398931
context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19734
diff
changeset
|
1373 rejected.append(f) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1374 elif ds[f] in 'amn': |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1375 ui.warn(_("%s already tracked!\n") % join(f)) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1376 elif ds[f] == 'r': |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1377 ds.normallookup(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1378 else: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1379 ds.add(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1380 return rejected |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1381 finally: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1382 wlock.release() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1383 |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1384 def forget(self, files, prefix=""): |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1385 join = lambda f: 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
|
1386 wlock = self._repo.wlock() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1387 try: |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1388 rejected = [] |
14435
5f6090e559fa
context: make forget work like commands.forget
Matt Mackall <mpm@selenic.com>
parents:
14434
diff
changeset
|
1389 for f in files: |
16111
131d1a09108a
context: make workingctx.forget() really warn about untracked files
Patrick Mezard <patrick@mezard.eu>
parents:
15912
diff
changeset
|
1390 if f not in self._repo.dirstate: |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1391 self._repo.ui.warn(_("%s not tracked!\n") % join(f)) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1392 rejected.append(f) |
16111
131d1a09108a
context: make workingctx.forget() really warn about untracked files
Patrick Mezard <patrick@mezard.eu>
parents:
15912
diff
changeset
|
1393 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
|
1394 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
|
1395 else: |
14434
cc8c09855d19
dirstate: rename forget to drop
Matt Mackall <mpm@selenic.com>
parents:
14429
diff
changeset
|
1396 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
|
1397 return rejected |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1398 finally: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1399 wlock.release() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1400 |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1401 def undelete(self, list): |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1402 pctxs = self.parents() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1403 wlock = self._repo.wlock() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1404 try: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1405 for f in list: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1406 if self._repo.dirstate[f] != 'r': |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1407 self._repo.ui.warn(_("%s not removed!\n") % f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1408 else: |
12360
4ae3e5dffa60
context: fix filectx.undelete() (issue2388)
Patrick Mezard <pmezard@gmail.com>
parents:
12344
diff
changeset
|
1409 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
|
1410 t = fctx.data() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1411 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
|
1412 self._repo.dirstate.normal(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1413 finally: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1414 wlock.release() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1415 |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1416 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
|
1417 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
|
1418 st = self._repo.wvfs.lstat(dest) |
12a8bdd97b4f
context: use "vfs.lstat()" to examine target path instead of "os.path.*"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19901
diff
changeset
|
1419 except OSError, err: |
12a8bdd97b4f
context: use "vfs.lstat()" to examine target path instead of "os.path.*"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19901
diff
changeset
|
1420 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
|
1421 raise |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1422 self._repo.ui.warn(_("%s does not exist!\n") % 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
|
1423 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
|
1424 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
|
1425 self._repo.ui.warn(_("copy failed: %s is not a file or a " |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1426 "symbolic link\n") % dest) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1427 else: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1428 wlock = self._repo.wlock() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1429 try: |
23402
2963d5c9d90b
rename: properly report removed and added file as modified (issue4458)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23401
diff
changeset
|
1430 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
|
1431 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
|
1432 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
|
1433 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
|
1434 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
|
1435 finally: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1436 wlock.release() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1437 |
21393
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1438 def _filtersuspectsymlink(self, files): |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1439 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
|
1440 return files |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1441 |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1442 # 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
|
1443 # 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
|
1444 # 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
|
1445 # symlink |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1446 sane = [] |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1447 for f in files: |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1448 if self.flags(f) == 'l': |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1449 d = self[f].data() |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1450 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
|
1451 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
|
1452 ' "%s"\n' % f) |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1453 continue |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1454 sane.append(f) |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1455 return sane |
a45af4da0421
localrepo: move symlink logic to workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21238
diff
changeset
|
1456 |
21395
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1457 def _checklookup(self, files): |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1458 # 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
|
1459 if not files: |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1460 return [], [] |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1461 |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1462 modified = [] |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1463 fixup = [] |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1464 pctx = self._parents[0] |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1465 # 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
|
1466 for f in sorted(files): |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1467 if (f not in pctx or self.flags(f) != pctx.flags(f) |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1468 or pctx[f].cmp(self[f])): |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1469 modified.append(f) |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1470 else: |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1471 fixup.append(f) |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1472 |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1473 # update dirstate for files that are actually clean |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1474 if fixup: |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1475 try: |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1476 # 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
|
1477 # 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
|
1478 # 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
|
1479 # taking the lock |
48e32c2c499b
context: call normal on the right object
Siddharth Agarwal <sid0@fb.com>
parents:
21973
diff
changeset
|
1480 wlock = self._repo.wlock(False) |
21395
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1481 normal = self._repo.dirstate.normal |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1482 try: |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1483 for f in fixup: |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1484 normal(f) |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1485 finally: |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1486 wlock.release() |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1487 except error.LockError: |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1488 pass |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1489 return modified, fixup |
f251b92d9ed9
localrepo: factor out parentworking logic for comparing files
Sean Farley <sean.michael.farley@gmail.com>
parents:
21393
diff
changeset
|
1490 |
21468
870ddcf24291
localrepo: factor out _manifestmatch logic for workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21466
diff
changeset
|
1491 def _manifestmatches(self, match, s): |
870ddcf24291
localrepo: factor out _manifestmatch logic for workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21466
diff
changeset
|
1492 """Slow path for workingctx |
870ddcf24291
localrepo: factor out _manifestmatch logic for workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21466
diff
changeset
|
1493 |
870ddcf24291
localrepo: factor out _manifestmatch logic for workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21466
diff
changeset
|
1494 The fast path is when we compare the working directory to its parent |
870ddcf24291
localrepo: factor out _manifestmatch logic for workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21466
diff
changeset
|
1495 which means this function is comparing with a non-parent; therefore we |
870ddcf24291
localrepo: factor out _manifestmatch logic for workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21466
diff
changeset
|
1496 need to build a manifest and return what matches. |
870ddcf24291
localrepo: factor out _manifestmatch logic for workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21466
diff
changeset
|
1497 """ |
870ddcf24291
localrepo: factor out _manifestmatch logic for workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21466
diff
changeset
|
1498 mf = self._repo['.']._manifestmatches(match, s) |
23304
dd3f857598a0
context.status: pass status tuple into _buildstatus
Martin von Zweigbergk <martinvonz@google.com>
parents:
23303
diff
changeset
|
1499 for f in s.modified + s.added: |
23593
b1179dabc6de
context: stop setting None for modified or added nodes
Augie Fackler <augie@google.com>
parents:
23402
diff
changeset
|
1500 mf[f] = _newnode |
22942
03602f76deee
manifest: rename ambiguously-named set to setflag
Augie Fackler <raf@durin42.com>
parents:
22932
diff
changeset
|
1501 mf.setflag(f, self.flags(f)) |
23304
dd3f857598a0
context.status: pass status tuple into _buildstatus
Martin von Zweigbergk <martinvonz@google.com>
parents:
23303
diff
changeset
|
1502 for f in s.removed: |
21468
870ddcf24291
localrepo: factor out _manifestmatch logic for workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21466
diff
changeset
|
1503 if f in mf: |
870ddcf24291
localrepo: factor out _manifestmatch logic for workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21466
diff
changeset
|
1504 del mf[f] |
870ddcf24291
localrepo: factor out _manifestmatch logic for workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21466
diff
changeset
|
1505 return mf |
870ddcf24291
localrepo: factor out _manifestmatch logic for workingctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21466
diff
changeset
|
1506 |
21397
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1507 def _dirstatestatus(self, match=None, ignored=False, clean=False, |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1508 unknown=False): |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1509 '''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
|
1510 listignored, listclean, listunknown = ignored, clean, unknown |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1511 match = match or matchmod.always(self._repo.root, self._repo.getcwd()) |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1512 subrepos = [] |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1513 if '.hgsub' in self: |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1514 subrepos = sorted(self.substate) |
22911
509e2cbee679
dirstate: separate 'lookup' status field from others
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22671
diff
changeset
|
1515 cmp, s = self._repo.dirstate.status(match, subrepos, listignored, |
509e2cbee679
dirstate: separate 'lookup' status field from others
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22671
diff
changeset
|
1516 listclean, listunknown) |
21397
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1517 |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1518 # check for any possibly clean files |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1519 if cmp: |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1520 modified2, fixup = self._checklookup(cmp) |
23303
3f269bd4826c
context.status: avoid de- and reconstructing status tuple
Martin von Zweigbergk <martinvonz@google.com>
parents:
23302
diff
changeset
|
1521 s.modified.extend(modified2) |
21397
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1522 |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1523 # update dirstate for files that are actually clean |
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1524 if fixup and listclean: |
23303
3f269bd4826c
context.status: avoid de- and reconstructing status tuple
Martin von Zweigbergk <martinvonz@google.com>
parents:
23302
diff
changeset
|
1525 s.clean.extend(fixup) |
21397
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1526 |
23776
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1527 if match.always(): |
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1528 # cache for performance |
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1529 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
|
1530 # "_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
|
1531 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
|
1532 s.deleted, [], [], []) |
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1533 else: |
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1534 self._status = s |
70bf92b87410
status: cache dirstate status in _dirstatestatus()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23770
diff
changeset
|
1535 |
23303
3f269bd4826c
context.status: avoid de- and reconstructing status tuple
Martin von Zweigbergk <martinvonz@google.com>
parents:
23302
diff
changeset
|
1536 return s |
21397
38743c59f3f8
context: add private _dirstatestatus method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21396
diff
changeset
|
1537 |
21480
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1538 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
|
1539 listunknown): |
21480
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1540 """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
|
1541 |
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1542 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
|
1543 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
|
1544 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
|
1545 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
|
1546 """ |
23239
9fbb50444d55
context.status: call _dirstatestatus() from within _buildstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
23238
diff
changeset
|
1547 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
|
1548 # 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
|
1549 # 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
|
1550 # 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
|
1551 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
|
1552 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
|
1553 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
|
1554 listignored, listclean, |
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1555 listunknown) |
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1556 return s |
d19f491e5d5b
workingctx: use inheritance for _buildstatus while keeping the fastpath
Sean Farley <sean.michael.farley@gmail.com>
parents:
21477
diff
changeset
|
1557 |
23237
98f41a2f8fba
context.status: remove unused arguments from _matchstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
23236
diff
changeset
|
1558 def _matchstatus(self, other, match): |
21482
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1559 """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
|
1560 |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1561 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
|
1562 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
|
1563 comparing against the parent changeset. |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1564 |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1565 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
|
1566 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
|
1567 """ |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1568 superself = super(workingctx, self) |
23237
98f41a2f8fba
context.status: remove unused arguments from _matchstatus()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
23236
diff
changeset
|
1569 match = superself._matchstatus(other, match) |
21482
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1570 if other != self._repo['.']: |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1571 def bad(f, msg): |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1572 # '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
|
1573 # 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
|
1574 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
|
1575 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
|
1576 (self._repo.dirstate.pathto(f), msg)) |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1577 match.bad = bad |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1578 return match |
869a28d016e9
workingctx: override _matchstatus for parentworking case
Sean Farley <sean.michael.farley@gmail.com>
parents:
21481
diff
changeset
|
1579 |
19733
51988f008df3
context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents:
19705
diff
changeset
|
1580 class committablefilectx(basefilectx): |
51988f008df3
context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents:
19705
diff
changeset
|
1581 """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
|
1582 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
|
1583 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
|
1584 self._repo = repo |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1585 self._path = path |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1586 self._changeid = None |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1587 self._filerev = self._filenode = None |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1588 |
19149
921b64e1f7b9
filecontext: use 'is not None' to check for filelog existence
Durham Goode <durham@fb.com>
parents:
19061
diff
changeset
|
1589 if filelog is not None: |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1590 self._filelog = filelog |
19702
d25fdd4c2fd1
commitablefilectx: move __init__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19701
diff
changeset
|
1591 if ctx: |
d25fdd4c2fd1
commitablefilectx: move __init__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19701
diff
changeset
|
1592 self._changectx = ctx |
d25fdd4c2fd1
commitablefilectx: move __init__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19701
diff
changeset
|
1593 |
19703
d2936bec530b
commitablefilectx: move __nonzero__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19702
diff
changeset
|
1594 def __nonzero__(self): |
d2936bec530b
commitablefilectx: move __nonzero__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19702
diff
changeset
|
1595 return True |
d2936bec530b
commitablefilectx: move __nonzero__ from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19702
diff
changeset
|
1596 |
24420
065b886f61c6
committablefilectx: override linkrev() to point to the associated changectx
Yuya Nishihara <yuya@tcha.org>
parents:
24415
diff
changeset
|
1597 def linkrev(self): |
065b886f61c6
committablefilectx: override linkrev() to point to the associated changectx
Yuya Nishihara <yuya@tcha.org>
parents:
24415
diff
changeset
|
1598 # 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
|
1599 return self.rev() |
065b886f61c6
committablefilectx: override linkrev() to point to the associated changectx
Yuya Nishihara <yuya@tcha.org>
parents:
24415
diff
changeset
|
1600 |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1601 def parents(self): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1602 '''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
|
1603 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
|
1604 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
|
1605 |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1606 path = self._path |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1607 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
|
1608 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
|
1609 renamed = self.renamed() |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1610 |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1611 if renamed: |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1612 pl = [renamed + (None,)] |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1613 else: |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1614 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
|
1615 |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1616 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
|
1617 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
|
1618 |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
1619 return [filectx(self._repo, p, fileid=n, filelog=l) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1620 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
|
1621 |
19705
79792c8ea6da
commitablefilectx: move children from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19704
diff
changeset
|
1622 def children(self): |
79792c8ea6da
commitablefilectx: move children from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19704
diff
changeset
|
1623 return [] |
79792c8ea6da
commitablefilectx: move children from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19704
diff
changeset
|
1624 |
19733
51988f008df3
context: use correct spelling of committable
Sean Farley <sean.michael.farley@gmail.com>
parents:
19705
diff
changeset
|
1625 class workingfilectx(committablefilectx): |
19704
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1626 """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
|
1627 file in the working directory convenient.""" |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1628 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
|
1629 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
|
1630 |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1631 @propertycache |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1632 def _changectx(self): |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1633 return workingctx(self._repo) |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1634 |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1635 def data(self): |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1636 return self._repo.wread(self._path) |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1637 def renamed(self): |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1638 rp = self._repo.dirstate.copied(self._path) |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1639 if not rp: |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1640 return None |
bad0bd99ac96
commitablefilectx: move parents from workingfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
19703
diff
changeset
|
1641 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
|
1642 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1643 def size(self): |
19901
4d3ce1646dfc
context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19900
diff
changeset
|
1644 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
|
1645 def date(self): |
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
1646 t, tz = self._changectx.date() |
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
1647 try: |
19901
4d3ce1646dfc
context: use "vfs.lstat()" instead of "os.lstat()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19900
diff
changeset
|
1648 return (int(self._repo.wvfs.lstat(self._path).st_mtime), tz) |
3962
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
1649 except OSError, err: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1650 if err.errno != errno.ENOENT: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1651 raise |
3962
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
1652 return (t, tz) |
3310
0e370798eebf
context: add cmp for filectxs
Matt Mackall <mpm@selenic.com>
parents:
3302
diff
changeset
|
1653 |
11702
eb07fbc21e9c
filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11605
diff
changeset
|
1654 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
|
1655 """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
|
1656 |
11702
eb07fbc21e9c
filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11605
diff
changeset
|
1657 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
|
1658 """ |
17425
e95ec38f86b0
fix wording and not-completely-trivial spelling errors and bad docstrings
Mads Kiilerich <mads@kiilerich.com>
parents:
17424
diff
changeset
|
1659 # 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
|
1660 # 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
|
1661 return fctx.cmp(self) |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1662 |
22073
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1663 def remove(self, ignoremissing=False): |
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1664 """wraps unlink for a repo's working directory""" |
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1665 util.unlinkpath(self._repo.wjoin(self._path), ignoremissing) |
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1666 |
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1667 def write(self, data, flags): |
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1668 """wraps repo.wwrite""" |
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1669 self._repo.wwrite(self._path, data, flags) |
0c48bc3d0eb2
workingfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22072
diff
changeset
|
1670 |
23710
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
1671 class workingcommitctx(workingctx): |
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
1672 """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
|
1673 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
|
1674 |
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
1675 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
|
1676 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
|
1677 """ |
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
1678 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
|
1679 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
|
1680 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
|
1681 changes) |
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
1682 |
23712
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1683 def _dirstatestatus(self, match=None, ignored=False, clean=False, |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1684 unknown=False): |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1685 """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
|
1686 |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1687 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
|
1688 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
|
1689 """ |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1690 match = match or matchmod.always(self._repo.root, self._repo.getcwd()) |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1691 if clean: |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1692 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
|
1693 else: |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1694 clean = [] |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1695 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
|
1696 [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
|
1697 [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
|
1698 [], [], [], clean) |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1699 |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1700 @propertycache |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1701 def _changedset(self): |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1702 """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
|
1703 """ |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1704 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
|
1705 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
|
1706 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
|
1707 return changed |
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
1708 |
21665
d2743be1bb06
memctx: inherit from committablectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21664
diff
changeset
|
1709 class memctx(committablectx): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1710 """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
|
1711 |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1712 Revision information is supplied at initialization time while |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1713 related files data and is made available through a callback |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1714 mechanism. 'repo' is the current localrepo, 'parents' is a |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1715 sequence of two parent revisions identifiers (pass None for every |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1716 missing parent), 'text' is the commit message and 'files' lists |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1717 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
|
1718 repository root). |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1719 |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1720 filectxfn(repo, memctx, path) is a callable receiving the |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1721 repository, the current memctx object and the normalized path of |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1722 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
|
1723 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
|
1724 undefined. If the file is available in the revision being |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1725 committed (updated or added), filectxfn returns a memfilectx |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1726 object. If the file was removed, filectxfn raises an |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1727 IOError. Moved files are represented by marking the source file |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1728 removed and the new file added with copy information (see |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1729 memfilectx). |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1730 |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1731 user receives the committer name and defaults to current |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1732 repository username, date is the commit date in any format |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1733 supported by util.parsedate() and defaults to current date, extra |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1734 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
|
1735 """ |
22313
d226fe36e362
memctx: allow extensions to determine what filectxfn should do
Siddharth Agarwal <sid0@fb.com>
parents:
22296
diff
changeset
|
1736 |
d226fe36e362
memctx: allow extensions to determine what filectxfn should do
Siddharth Agarwal <sid0@fb.com>
parents:
22296
diff
changeset
|
1737 # 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
|
1738 # 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
|
1739 # 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
|
1740 _returnnoneformissingfiles = True |
d226fe36e362
memctx: allow extensions to determine what filectxfn should do
Siddharth Agarwal <sid0@fb.com>
parents:
22296
diff
changeset
|
1741 |
6721
521c6c6f3b9b
kill some trailing spaces
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6718
diff
changeset
|
1742 def __init__(self, repo, parents, text, files, filectxfn, user=None, |
21238
25d6fdc0294a
context: move editor invocation from "makememctx()" to "memctx.__init__()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21203
diff
changeset
|
1743 date=None, extra=None, editor=False): |
21666
31bdc51b0f1e
memctx: call super.__init__ instead of duplicating code
Sean Farley <sean.michael.farley@gmail.com>
parents:
21665
diff
changeset
|
1744 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
|
1745 self._rev = None |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1746 self._node = None |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1747 parents = [(p or nullid) for p in parents] |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1748 p1, p2 = parents |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6744
diff
changeset
|
1749 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
|
1750 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
|
1751 self._files = files |
21938
c8411fb5dfef
memctx: substate needs to be {} instead of None
Sean Farley <sean.michael.farley@gmail.com>
parents:
21895
diff
changeset
|
1752 self.substate = {} |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1753 |
22072
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1754 # if store is not callable, wrap it in a function |
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1755 if not callable(filectxfn): |
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1756 def getfilectx(repo, memctx, path): |
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1757 fctx = filectxfn[path] |
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1758 # this is weird but apparently we only keep track of one parent |
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1759 # (why not only store that instead of a tuple?) |
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1760 copied = fctx.renamed() |
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1761 if copied: |
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1762 copied = copied[0] |
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1763 return memfilectx(repo, path, fctx.data(), |
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1764 islink=fctx.islink(), isexec=fctx.isexec(), |
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1765 copied=copied, memctx=memctx) |
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1766 self._filectxfn = getfilectx |
23587
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1767 else: |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1768 # "util.cachefunc" reduces invocation of possibly expensive |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1769 # "filectxfn" for performance (e.g. converting from another VCS) |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1770 self._filectxfn = util.cachefunc(filectxfn) |
22072
443ef664fb55
memctx: create a filectxfn if it is not callable
Sean Farley <sean.michael.farley@gmail.com>
parents:
22055
diff
changeset
|
1771 |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
1772 if extra: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
1773 self._extra = extra.copy() |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
1774 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
1775 self._extra = {} |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24300
diff
changeset
|
1776 |
14528
0bd69e37fd20
memctx: simplify constructor
Patrick Mezard <pmezard@gmail.com>
parents:
14518
diff
changeset
|
1777 if self._extra.get('branch', '') == '': |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1778 self._extra['branch'] = 'default' |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1779 |
21238
25d6fdc0294a
context: move editor invocation from "makememctx()" to "memctx.__init__()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21203
diff
changeset
|
1780 if editor: |
25d6fdc0294a
context: move editor invocation from "makememctx()" to "memctx.__init__()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21203
diff
changeset
|
1781 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
|
1782 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
|
1783 |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1784 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
|
1785 """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
|
1786 |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22207
diff
changeset
|
1787 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
|
1788 return self._filectxfn(self._repo, self, path) |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1789 |
11151
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
1790 def commit(self): |
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
1791 """commit context to the repo""" |
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
1792 return self._repo.commitctx(self) |
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
1793 |
21835
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1794 @propertycache |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1795 def _manifest(self): |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1796 """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
|
1797 |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1798 # 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
|
1799 pctx = self._parents[0] |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1800 man = pctx.manifest().copy() |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1801 |
23603
d74eb8d477d5
memctx: calculate manifest more efficiently
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23602
diff
changeset
|
1802 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
|
1803 p1node = nullid |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1804 p2node = nullid |
22075
2f0358275501
memctx: add note about p2
Sean Farley <sean.michael.farley@gmail.com>
parents:
22074
diff
changeset
|
1805 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
|
1806 if len(p) > 0: |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1807 p1node = p[0].node() |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1808 if len(p) > 1: |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1809 p2node = p[1].node() |
23603
d74eb8d477d5
memctx: calculate manifest more efficiently
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23602
diff
changeset
|
1810 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
|
1811 |
23588
87a76cff7147
memctx: calculate manifest including newly added files correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23587
diff
changeset
|
1812 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
|
1813 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
|
1814 |
23589
200215cdf7aa
memctx: calculate manifest correctly with newly-removed files (issue4470)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23588
diff
changeset
|
1815 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
|
1816 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
|
1817 del man[f] |
21835
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1818 |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1819 return man |
b342c3e2518a
memctx: add _manifest implementation that computes the filenode
Sean Farley <sean.michael.farley@gmail.com>
parents:
21834
diff
changeset
|
1820 |
23587
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1821 @propertycache |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1822 def _status(self): |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1823 """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
|
1824 """ |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1825 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
|
1826 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
|
1827 # "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
|
1828 # 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
|
1829 # 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
|
1830 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
|
1831 man2 = p2.manifest() |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1832 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
|
1833 else: |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1834 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
|
1835 |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1836 modified, added, removed = [], [], [] |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1837 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
|
1838 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
|
1839 added.append(f) |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1840 elif self[f]: |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1841 modified.append(f) |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1842 else: |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1843 removed.append(f) |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1844 |
8063901e56cd
memctx: calculate exact status being committed from specified files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23584
diff
changeset
|
1845 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
|
1846 |
21688
cc677803bad4
memfilectx: inherit from committablefilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21687
diff
changeset
|
1847 class memfilectx(committablefilectx): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1848 """memfilectx represents an in-memory file to commit. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1849 |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23110
diff
changeset
|
1850 See memctx and committablefilectx for more details. |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1851 """ |
21689
503bb3af70fe
memfilectx: call super.__init__ instead of duplicating code
Sean Farley <sean.michael.farley@gmail.com>
parents:
21688
diff
changeset
|
1852 def __init__(self, repo, path, data, islink=False, |
503bb3af70fe
memfilectx: call super.__init__ instead of duplicating code
Sean Farley <sean.michael.farley@gmail.com>
parents:
21688
diff
changeset
|
1853 isexec=False, copied=None, memctx=None): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1854 """ |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1855 path is the normalized file path relative to repository root. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1856 data is the file content as a string. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1857 islink is True if the file is a symbolic link. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1858 isexec is True if the file is executable. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1859 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
|
1860 revision being committed, or None.""" |
21689
503bb3af70fe
memfilectx: call super.__init__ instead of duplicating code
Sean Farley <sean.michael.farley@gmail.com>
parents:
21688
diff
changeset
|
1861 super(memfilectx, self).__init__(repo, path, None, memctx) |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1862 self._data = data |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1863 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
|
1864 self._copied = None |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1865 if copied: |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1866 self._copied = (copied, nullid) |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1867 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1868 def data(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1869 return self._data |
21710
14514dd542aa
memfilectx: add a size method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21692
diff
changeset
|
1870 def size(self): |
14514dd542aa
memfilectx: add a size method
Sean Farley <sean.michael.farley@gmail.com>
parents:
21692
diff
changeset
|
1871 return len(self.data()) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1872 def flags(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1873 return self._flags |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1874 def renamed(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1875 return self._copied |
22074
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
1876 |
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
1877 def remove(self, ignoremissing=False): |
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
1878 """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
|
1879 # 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
|
1880 del self._changectx[self._path] |
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
1881 |
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
1882 def write(self, data, flags): |
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
1883 """wraps repo.wwrite""" |
fbe967b027bd
memfilectx: add remove and write methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
22073
diff
changeset
|
1884 self._data = data |