Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/context.py @ 11099:a68bd3b7c040
workingctx: use member variables to store ignored and clean
If some code tries to query ignored or clean files without first
calling the explicit status() method to query them, it will raise
an exception (indicating a software bug).
author | Steve Borho <steve@borho.org> |
---|---|
date | Tue, 04 May 2010 15:02:55 -0500 |
parents | 380ab78dbd69 |
children | 83968ae4aaf2 |
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 |
6763
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
8 from node import nullid, nullrev, short, hex |
3891 | 9 from i18n import _ |
11097
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
10 import ancestor, bdiff, error, util, subrepo, patch |
8312
b87a50b7125c
separate import lines from mercurial and general python modules
Simon Heimberg <simohe@besonet.ch>
parents:
8225
diff
changeset
|
11 import os, errno |
3122
da85145d4571
filectx: add rename traversal for parents()
Matt Mackall <mpm@selenic.com>
parents:
2859
diff
changeset
|
12 |
8207
dd8d5be57d65
util: take propertycache from context.py
Matt Mackall <mpm@selenic.com>
parents:
8157
diff
changeset
|
13 propertycache = util.propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
14 |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
15 class changectx(object): |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
16 """A changecontext object makes access to data related to a particular |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
17 changeset convenient.""" |
6741
5918e2b79859
context: simplify changeid logic
Matt Mackall <mpm@selenic.com>
parents:
6737
diff
changeset
|
18 def __init__(self, repo, changeid=''): |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
19 """changeid is a revision number, node, or tag""" |
6741
5918e2b79859
context: simplify changeid logic
Matt Mackall <mpm@selenic.com>
parents:
6737
diff
changeset
|
20 if changeid == '': |
5918e2b79859
context: simplify changeid logic
Matt Mackall <mpm@selenic.com>
parents:
6737
diff
changeset
|
21 changeid = '.' |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
22 self._repo = repo |
7367
ad0eb8762458
context: special-case changectx setup for integer changeid
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7361
diff
changeset
|
23 if isinstance(changeid, (long, int)): |
ad0eb8762458
context: special-case changectx setup for integer changeid
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7361
diff
changeset
|
24 self._rev = changeid |
ad0eb8762458
context: special-case changectx setup for integer changeid
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7361
diff
changeset
|
25 self._node = self._repo.changelog.node(changeid) |
ad0eb8762458
context: special-case changectx setup for integer changeid
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7361
diff
changeset
|
26 else: |
ad0eb8762458
context: special-case changectx setup for integer changeid
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7361
diff
changeset
|
27 self._node = self._repo.lookup(changeid) |
ad0eb8762458
context: special-case changectx setup for integer changeid
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7361
diff
changeset
|
28 self._rev = self._repo.changelog.rev(self._node) |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
29 |
3166
ebdb3f616bc0
Add str methods to contexts
Matt Mackall <mpm@selenic.com>
parents:
3165
diff
changeset
|
30 def __str__(self): |
ebdb3f616bc0
Add str methods to contexts
Matt Mackall <mpm@selenic.com>
parents:
3165
diff
changeset
|
31 return short(self.node()) |
ebdb3f616bc0
Add str methods to contexts
Matt Mackall <mpm@selenic.com>
parents:
3165
diff
changeset
|
32 |
6763
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
33 def __int__(self): |
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
34 return self.rev() |
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
35 |
3151
6719b3dd7d50
context: add __repr__ methods
Matt Mackall <mpm@selenic.com>
parents:
3150
diff
changeset
|
36 def __repr__(self): |
3216
d865390c1781
context: simplify repr methods
Matt Mackall <mpm@selenic.com>
parents:
3215
diff
changeset
|
37 return "<changectx %s>" % str(self) |
3151
6719b3dd7d50
context: add __repr__ methods
Matt Mackall <mpm@selenic.com>
parents:
3150
diff
changeset
|
38 |
6469
fb502719c75c
python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents:
6286
diff
changeset
|
39 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
|
40 try: |
fb502719c75c
python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents:
6286
diff
changeset
|
41 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
|
42 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
|
43 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
|
44 |
3165
e78185746554
Add equality operators to changectx and filectx
Matt Mackall <mpm@selenic.com>
parents:
3152
diff
changeset
|
45 def __eq__(self, other): |
3715
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
46 try: |
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
47 return self._rev == other._rev |
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
48 except AttributeError: |
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
49 return False |
3165
e78185746554
Add equality operators to changectx and filectx
Matt Mackall <mpm@selenic.com>
parents:
3152
diff
changeset
|
50 |
4748
8808ea7da86b
merge: make test for fast-forward merge stricter (issue619)
Matt Mackall <mpm@selenic.com>
parents:
4663
diff
changeset
|
51 def __ne__(self, other): |
8808ea7da86b
merge: make test for fast-forward merge stricter (issue619)
Matt Mackall <mpm@selenic.com>
parents:
4663
diff
changeset
|
52 return not (self == other) |
8808ea7da86b
merge: make test for fast-forward merge stricter (issue619)
Matt Mackall <mpm@selenic.com>
parents:
4663
diff
changeset
|
53 |
3168
05c588e1803d
context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents:
3166
diff
changeset
|
54 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
|
55 return self._rev != nullrev |
3168
05c588e1803d
context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents:
3166
diff
changeset
|
56 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
57 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
58 def _changeset(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
59 return self._repo.changelog.read(self.node()) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
60 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
61 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
62 def _manifest(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
63 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
|
64 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
65 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
66 def _manifestdelta(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
67 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
|
68 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
69 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
70 def _parents(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
71 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
|
72 if p[1] == nullrev: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
73 p = p[:-1] |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
74 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
|
75 |
8812
859f841937d0
subrepo: introduce basic state parsing
Matt Mackall <mpm@selenic.com>
parents:
8717
diff
changeset
|
76 @propertycache |
859f841937d0
subrepo: introduce basic state parsing
Matt Mackall <mpm@selenic.com>
parents:
8717
diff
changeset
|
77 def substate(self): |
859f841937d0
subrepo: introduce basic state parsing
Matt Mackall <mpm@selenic.com>
parents:
8717
diff
changeset
|
78 return subrepo.state(self) |
859f841937d0
subrepo: introduce basic state parsing
Matt Mackall <mpm@selenic.com>
parents:
8717
diff
changeset
|
79 |
4909
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
80 def __contains__(self, key): |
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
81 return key in self._manifest |
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
82 |
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
83 def __getitem__(self, key): |
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
84 return self.filectx(key) |
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
85 |
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
86 def __iter__(self): |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8207
diff
changeset
|
87 for f in sorted(self._manifest): |
5485
8c0756f7b18b
Fix context iterator.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5439
diff
changeset
|
88 yield f |
4909
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
89 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
90 def changeset(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
91 return self._changeset |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
92 def manifest(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
93 return self._manifest |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
94 def manifestnode(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
95 return self._changeset[0] |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
96 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
97 def rev(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
98 return self._rev |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
99 def node(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
100 return self._node |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
101 def hex(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
102 return hex(self._node) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
103 def user(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
104 return self._changeset[1] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
105 def date(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
106 return self._changeset[2] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
107 def files(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
108 return self._changeset[3] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
109 def description(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
110 return self._changeset[4] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
111 def branch(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
112 return self._changeset[5].get("branch") |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
113 def extra(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
114 return self._changeset[5] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
115 def tags(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
116 return self._repo.nodetags(self._node) |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
117 |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
118 def parents(self): |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
119 """return contexts for each parent changeset""" |
6742
2d54e7c1e69d
context: clean up parents()
Matt Mackall <mpm@selenic.com>
parents:
6741
diff
changeset
|
120 return self._parents |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
121 |
8406
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
122 def p1(self): |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
123 return self._parents[0] |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
124 |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
125 def p2(self): |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
126 if len(self._parents) == 2: |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
127 return self._parents[1] |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
128 return changectx(self._repo, -1) |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
129 |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
130 def children(self): |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
131 """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
|
132 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
|
133 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
|
134 |
6876 | 135 def ancestors(self): |
136 for a in self._repo.changelog.ancestors(self._rev): | |
137 yield changectx(self._repo, a) | |
138 | |
139 def descendants(self): | |
140 for d in self._repo.changelog.descendants(self._rev): | |
141 yield changectx(self._repo, d) | |
142 | |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
143 def _fileinfo(self, path): |
3336
e44eadc92ec4
context: check self.__dict__ instead of using hasattr
Brendan Cully <brendan@kublai.com>
parents:
3313
diff
changeset
|
144 if '_manifest' in self.__dict__: |
3242
1539f788e913
Make changectx.filenode raise repo.LookupError on failure
Brendan Cully <brendan@kublai.com>
parents:
3241
diff
changeset
|
145 try: |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
146 return self._manifest[path], self._manifest.flags(path) |
3242
1539f788e913
Make changectx.filenode raise repo.LookupError on failure
Brendan Cully <brendan@kublai.com>
parents:
3241
diff
changeset
|
147 except KeyError: |
7633 | 148 raise error.LookupError(self._node, path, |
149 _('not found in manifest')) | |
3337
b02e60097bbe
changectx: search manifest delta for filenode
Brendan Cully <brendan@kublai.com>
parents:
3336
diff
changeset
|
150 if '_manifestdelta' in self.__dict__ or path in self.files(): |
b02e60097bbe
changectx: search manifest delta for filenode
Brendan Cully <brendan@kublai.com>
parents:
3336
diff
changeset
|
151 if path in self._manifestdelta: |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
152 return self._manifestdelta[path], self._manifestdelta.flags(path) |
3215
931288cf58a7
contexts: use __getattr__ rather than try/except in changectx
Matt Mackall <mpm@selenic.com>
parents:
3214
diff
changeset
|
153 node, flag = self._repo.manifest.find(self._changeset[0], path) |
3242
1539f788e913
Make changectx.filenode raise repo.LookupError on failure
Brendan Cully <brendan@kublai.com>
parents:
3241
diff
changeset
|
154 if not node: |
7633 | 155 raise error.LookupError(self._node, path, |
156 _('not found in manifest')) | |
3242
1539f788e913
Make changectx.filenode raise repo.LookupError on failure
Brendan Cully <brendan@kublai.com>
parents:
3241
diff
changeset
|
157 |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
158 return node, flag |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
159 |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
160 def filenode(self, path): |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
161 return self._fileinfo(path)[0] |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
162 |
6743 | 163 def flags(self, path): |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
164 try: |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
165 return self._fileinfo(path)[1] |
7633 | 166 except error.LookupError: |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
167 return '' |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
168 |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
169 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
|
170 """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
|
171 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
|
172 fileid = self.filenode(path) |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
173 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
|
174 changectx=self, filelog=filelog) |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
175 |
3125
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
176 def ancestor(self, c2): |
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
177 """ |
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
178 return the ancestor context of self and c2 |
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
179 """ |
9843
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
180 # deal with workingctxs |
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
181 n2 = c2._node |
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
182 if n2 == None: |
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
183 n2 = c2._parents[0]._node |
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
184 n = self._repo.changelog.ancestor(self._node, n2) |
3125
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
185 return changectx(self._repo, n) |
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
186 |
6764 | 187 def walk(self, match): |
8380
a00a4db76a15
context: replace pseudo-set by real set
Simon Heimberg <simohe@besonet.ch>
parents:
8312
diff
changeset
|
188 fset = set(match.files()) |
6764 | 189 # for dirstate.walk, files=['.'] means "walk the whole tree". |
190 # follow that here, too | |
8380
a00a4db76a15
context: replace pseudo-set by real set
Simon Heimberg <simohe@besonet.ch>
parents:
8312
diff
changeset
|
191 fset.discard('.') |
6764 | 192 for fn in self: |
8380
a00a4db76a15
context: replace pseudo-set by real set
Simon Heimberg <simohe@besonet.ch>
parents:
8312
diff
changeset
|
193 for ffn in fset: |
6764 | 194 # match if the file is the exact name or a directory |
195 if ffn == fn or fn.startswith("%s/" % ffn): | |
8380
a00a4db76a15
context: replace pseudo-set by real set
Simon Heimberg <simohe@besonet.ch>
parents:
8312
diff
changeset
|
196 fset.remove(ffn) |
6764 | 197 break |
198 if match(fn): | |
199 yield fn | |
8380
a00a4db76a15
context: replace pseudo-set by real set
Simon Heimberg <simohe@besonet.ch>
parents:
8312
diff
changeset
|
200 for fn in sorted(fset): |
6764 | 201 if match.bad(fn, 'No such file in rev ' + str(self)) and match(fn): |
202 yield fn | |
203 | |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
204 def sub(self, path): |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
205 return subrepo.subrepo(self, path) |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
206 |
11097
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
207 def diff(self, ctx2=None, match=None): |
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
208 """Returns a diff generator for the given contexts and matcher""" |
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
209 if ctx2 is None: |
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
210 ctx2 = self.p1() |
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
211 if ctx2 is not None and not isinstance(ctx2, changectx): |
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
212 ctx2 = self._repo[ctx2] |
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
213 return patch.diff(self._repo, ctx2.node(), self.node(), match=match) |
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
214 |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
215 class filectx(object): |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
216 """A filecontext object makes access to data related to a particular |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
217 filerevision convenient.""" |
3214
696c656202a0
context: make filectx remember changectx in changectx.filectx
Matt Mackall <mpm@selenic.com>
parents:
3213
diff
changeset
|
218 def __init__(self, repo, path, changeid=None, fileid=None, |
696c656202a0
context: make filectx remember changectx in changectx.filectx
Matt Mackall <mpm@selenic.com>
parents:
3213
diff
changeset
|
219 filelog=None, changectx=None): |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
220 """changeid can be a changeset revision, node, or tag. |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
221 fileid can be a file revision or node.""" |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
222 self._repo = repo |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
223 self._path = path |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
224 |
3964
2308c39b9521
make it possible to use changectx to create a filectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3962
diff
changeset
|
225 assert (changeid is not None |
2308c39b9521
make it possible to use changectx to create a filectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3962
diff
changeset
|
226 or fileid is not None |
9024
10532b29cdee
context: improve arg-checking assert.
Greg Ward <greg@gerg.ca>
parents:
8813
diff
changeset
|
227 or changectx is not None), \ |
10532b29cdee
context: improve arg-checking assert.
Greg Ward <greg@gerg.ca>
parents:
8813
diff
changeset
|
228 ("bad args: changeid=%r, fileid=%r, changectx=%r" |
10532b29cdee
context: improve arg-checking assert.
Greg Ward <greg@gerg.ca>
parents:
8813
diff
changeset
|
229 % (changeid, fileid, changectx)) |
2643
f23973ea3107
fix filectxt to really work
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2629
diff
changeset
|
230 |
3124
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
231 if filelog: |
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
232 self._filelog = filelog |
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
233 |
5810
124577de40a7
context: preserve changeset in filectx if we have one
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
234 if changeid is not None: |
124577de40a7
context: preserve changeset in filectx if we have one
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
235 self._changeid = changeid |
124577de40a7
context: preserve changeset in filectx if we have one
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
236 if changectx is not None: |
124577de40a7
context: preserve changeset in filectx if we have one
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
237 self._changectx = changectx |
124577de40a7
context: preserve changeset in filectx if we have one
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
238 if fileid is not None: |
3213 | 239 self._fileid = fileid |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
240 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
241 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
242 def _changectx(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
243 return changectx(self._repo, self._changeid) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
244 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
245 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
246 def _filelog(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
247 return self._repo.file(self._path) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
248 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
249 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
250 def _changeid(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
251 if '_changectx' in self.__dict__: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
252 return self._changectx.rev() |
3144
8342ad5abe0b
Make filectx lazier - some users never use filenode
Brendan Cully <brendan@kublai.com>
parents:
3143
diff
changeset
|
253 else: |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
254 return self._filelog.linkrev(self._filerev) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
255 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
256 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
257 def _filenode(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
258 if '_fileid' in self.__dict__: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
259 return self._filelog.lookup(self._fileid) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
260 else: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
261 return self._changectx.filenode(self._path) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
262 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
263 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
264 def _filerev(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
265 return self._filelog.rev(self._filenode) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
266 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
267 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
268 def _repopath(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
269 return self._path |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
270 |
3168
05c588e1803d
context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents:
3166
diff
changeset
|
271 def __nonzero__(self): |
3712
1bd70d40ec57
context: None is not a valid filenode (revert from 23ede9e7ad4d)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3673
diff
changeset
|
272 try: |
7874
d812029cda85
cleanup: drop variables for unused return values
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7633
diff
changeset
|
273 self._filenode |
3712
1bd70d40ec57
context: None is not a valid filenode (revert from 23ede9e7ad4d)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3673
diff
changeset
|
274 return True |
7633 | 275 except error.LookupError: |
3712
1bd70d40ec57
context: None is not a valid filenode (revert from 23ede9e7ad4d)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3673
diff
changeset
|
276 # file is missing |
1bd70d40ec57
context: None is not a valid filenode (revert from 23ede9e7ad4d)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3673
diff
changeset
|
277 return False |
3168
05c588e1803d
context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents:
3166
diff
changeset
|
278 |
3166
ebdb3f616bc0
Add str methods to contexts
Matt Mackall <mpm@selenic.com>
parents:
3165
diff
changeset
|
279 def __str__(self): |
ebdb3f616bc0
Add str methods to contexts
Matt Mackall <mpm@selenic.com>
parents:
3165
diff
changeset
|
280 return "%s@%s" % (self.path(), short(self.node())) |
ebdb3f616bc0
Add str methods to contexts
Matt Mackall <mpm@selenic.com>
parents:
3165
diff
changeset
|
281 |
3151
6719b3dd7d50
context: add __repr__ methods
Matt Mackall <mpm@selenic.com>
parents:
3150
diff
changeset
|
282 def __repr__(self): |
3216
d865390c1781
context: simplify repr methods
Matt Mackall <mpm@selenic.com>
parents:
3215
diff
changeset
|
283 return "<filectx %s>" % str(self) |
3151
6719b3dd7d50
context: add __repr__ methods
Matt Mackall <mpm@selenic.com>
parents:
3150
diff
changeset
|
284 |
6469
fb502719c75c
python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents:
6286
diff
changeset
|
285 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
|
286 try: |
10942
6f26ce7ae175
filectx: _fileid isn't normalized, use _filenode instead
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10927
diff
changeset
|
287 return hash((self._path, self._filenode)) |
6469
fb502719c75c
python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents:
6286
diff
changeset
|
288 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
|
289 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
|
290 |
3165
e78185746554
Add equality operators to changectx and filectx
Matt Mackall <mpm@selenic.com>
parents:
3152
diff
changeset
|
291 def __eq__(self, other): |
3715
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
292 try: |
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
293 return (self._path == other._path |
10942
6f26ce7ae175
filectx: _fileid isn't normalized, use _filenode instead
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10927
diff
changeset
|
294 and self._filenode == other._filenode) |
3715
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
295 except AttributeError: |
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
296 return False |
3165
e78185746554
Add equality operators to changectx and filectx
Matt Mackall <mpm@selenic.com>
parents:
3152
diff
changeset
|
297 |
4748
8808ea7da86b
merge: make test for fast-forward merge stricter (issue619)
Matt Mackall <mpm@selenic.com>
parents:
4663
diff
changeset
|
298 def __ne__(self, other): |
8808ea7da86b
merge: make test for fast-forward merge stricter (issue619)
Matt Mackall <mpm@selenic.com>
parents:
4663
diff
changeset
|
299 return not (self == other) |
8808ea7da86b
merge: make test for fast-forward merge stricter (issue619)
Matt Mackall <mpm@selenic.com>
parents:
4663
diff
changeset
|
300 |
3207
0790dce2f3a8
Add lookup method to filectx
Brendan Cully <brendan@kublai.com>
parents:
3172
diff
changeset
|
301 def filectx(self, fileid): |
0790dce2f3a8
Add lookup method to filectx
Brendan Cully <brendan@kublai.com>
parents:
3172
diff
changeset
|
302 '''opens an arbitrary revision of the file without |
0790dce2f3a8
Add lookup method to filectx
Brendan Cully <brendan@kublai.com>
parents:
3172
diff
changeset
|
303 opening a new filelog''' |
0790dce2f3a8
Add lookup method to filectx
Brendan Cully <brendan@kublai.com>
parents:
3172
diff
changeset
|
304 return filectx(self._repo, self._path, fileid=fileid, |
0790dce2f3a8
Add lookup method to filectx
Brendan Cully <brendan@kublai.com>
parents:
3172
diff
changeset
|
305 filelog=self._filelog) |
0790dce2f3a8
Add lookup method to filectx
Brendan Cully <brendan@kublai.com>
parents:
3172
diff
changeset
|
306 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
307 def filerev(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
308 return self._filerev |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
309 def filenode(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
310 return self._filenode |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
311 def flags(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
312 return self._changectx.flags(self._path) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
313 def filelog(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
314 return self._filelog |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
315 |
3150
a5e4c8172ace
filectx: lazy linkrev usage
Matt Mackall <mpm@selenic.com>
parents:
3149
diff
changeset
|
316 def rev(self): |
3336
e44eadc92ec4
context: check self.__dict__ instead of using hasattr
Brendan Cully <brendan@kublai.com>
parents:
3313
diff
changeset
|
317 if '_changectx' in self.__dict__: |
3150
a5e4c8172ace
filectx: lazy linkrev usage
Matt Mackall <mpm@selenic.com>
parents:
3149
diff
changeset
|
318 return self._changectx.rev() |
5810
124577de40a7
context: preserve changeset in filectx if we have one
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
319 if '_changeid' in self.__dict__: |
6210
942287cb1f57
Removed trailing spaces from everything except test output
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5813
diff
changeset
|
320 return self._changectx.rev() |
7361
9fe97eea5510
linkrev: take a revision number rather than a hash
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
321 return self._filelog.linkrev(self._filerev) |
3150
a5e4c8172ace
filectx: lazy linkrev usage
Matt Mackall <mpm@selenic.com>
parents:
3149
diff
changeset
|
322 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
323 def linkrev(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
324 return self._filelog.linkrev(self._filerev) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
325 def node(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
326 return self._changectx.node() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
327 def hex(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
328 return hex(self.node()) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
329 def user(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
330 return self._changectx.user() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
331 def date(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
332 return self._changectx.date() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
333 def files(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
334 return self._changectx.files() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
335 def description(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
336 return self._changectx.description() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
337 def branch(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
338 return self._changectx.branch() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
339 def extra(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
340 return self._changectx.extra() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
341 def manifest(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
342 return self._changectx.manifest() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
343 def changectx(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
344 return self._changectx |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
345 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
346 def data(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
347 return self._filelog.read(self._filenode) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
348 def path(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
349 return self._path |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
350 def size(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
351 return self._filelog.size(self._filerev) |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
352 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
353 def cmp(self, text): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
354 return self._filelog.cmp(self._filenode, text) |
3310
0e370798eebf
context: add cmp for filectxs
Matt Mackall <mpm@selenic.com>
parents:
3302
diff
changeset
|
355 |
5811
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
356 def renamed(self): |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
357 """check if file was actually renamed in this changeset revision |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
358 |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
359 If rename logged in file revision, we report copy for changeset only |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
360 if file revisions linkrev points back to the changeset in question |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
361 or both changeset parents contain different file revisions. |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
362 """ |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
363 |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
364 renamed = self._filelog.renamed(self._filenode) |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
365 if not renamed: |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
366 return renamed |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
367 |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
368 if self.rev() == self.linkrev(): |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
369 return renamed |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
370 |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
371 name = self.path() |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
372 fnode = self._filenode |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
373 for p in self._changectx.parents(): |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
374 try: |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
375 if fnode == p.filenode(name): |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
376 return None |
7633 | 377 except error.LookupError: |
5811
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
378 pass |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
379 return renamed |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
380 |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
381 def parents(self): |
3124
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
382 p = self._path |
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
383 fl = self._filelog |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
384 pl = [(p, n, fl) for n in self._filelog.parents(self._filenode)] |
3123
4ea58eb3f0c9
filelog: make metadata method private
Matt Mackall <mpm@selenic.com>
parents:
3122
diff
changeset
|
385 |
5813
3ef279074c77
context: fix filectx.parents() bug introduced when editing 180a3eee4b75
Patrick Mezard <pmezard@gmail.com>
parents:
5811
diff
changeset
|
386 r = self._filelog.renamed(self._filenode) |
3122
da85145d4571
filectx: add rename traversal for parents()
Matt Mackall <mpm@selenic.com>
parents:
2859
diff
changeset
|
387 if r: |
3124
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
388 pl[0] = (r[0], r[1], None) |
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
389 |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
390 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
|
391 for p, n, l in pl if n != nullid] |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
392 |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
393 def children(self): |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
394 # hard for renames |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
395 c = self._filelog.children(self._filenode) |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
396 return [filectx(self._repo, self._path, fileid=x, |
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
397 filelog=self._filelog) for x in c] |
2566
d8560b458f76
Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents:
2563
diff
changeset
|
398 |
4856
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
399 def annotate(self, follow=False, linenumber=None): |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
400 '''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
|
401 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
|
402 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
|
403 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
|
404 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
|
405 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
|
406 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
|
407 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
|
408 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
|
409 if "linenumber" parameter is "False".''' |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
410 |
4856
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
411 def decorate_compat(text, rev): |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
412 return ([rev] * len(text.splitlines()), text) |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
413 |
4856
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
414 def without_linenumber(text, rev): |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
415 return ([(rev, False)] * len(text.splitlines()), text) |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
416 |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
417 def with_linenumber(text, rev): |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
418 size = len(text.splitlines()) |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
419 return ([(rev, i) for i in xrange(1, size + 1)], text) |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
420 |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
421 decorate = (((linenumber is None) and decorate_compat) or |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
422 (linenumber and with_linenumber) or |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
423 without_linenumber) |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
424 |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
425 def pair(parent, child): |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
426 for a1, a2, b1, b2 in bdiff.blocks(parent[1], child[1]): |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
427 child[0][b1:b2] = parent[0][a1:a2] |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
428 return child |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
429 |
9097
431462bd8478
fix memory usage of revlog caches by limiting cache size [issue1639]
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
430 getlog = util.lrucachefunc(lambda x: self._repo.file(x)) |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
431 def getctx(path, fileid): |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
432 log = path == self._path and self._filelog or getlog(path) |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
433 return filectx(self._repo, path, fileid=fileid, filelog=log) |
9097
431462bd8478
fix memory usage of revlog caches by limiting cache size [issue1639]
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
434 getctx = util.lrucachefunc(getctx) |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
435 |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
436 def parents(f): |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
437 # we want to reuse filectx objects as much as possible |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
438 p = f._path |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
439 if f._filerev is None: # working dir |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
440 pl = [(n.path(), n.filerev()) for n in f.parents()] |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
441 else: |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
442 pl = [(p, n) for n in f._filelog.parentrevs(f._filerev)] |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
443 |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
444 if follow: |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
445 r = f.renamed() |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
446 if r: |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
447 pl[0] = (r[0], getlog(r[0]).rev(r[1])) |
3146
e69a0cbe268e
filectx.annotate: return filectx for each line instead of rev
Brendan Cully <brendan@kublai.com>
parents:
3144
diff
changeset
|
448 |
3578
3b4e00cba57a
Define and use nullrev (revision of nullid) instead of -1.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3454
diff
changeset
|
449 return [getctx(p, n) for p, n in pl if n != nullrev] |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
450 |
3404
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
451 # use linkrev to find the first changeset where self appeared |
5811
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
452 if self.rev() != self.linkrev(): |
3404
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
453 base = self.filectx(self.filerev()) |
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
454 else: |
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
455 base = self |
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
456 |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
457 # find all ancestors |
3404
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
458 needed = {base: 1} |
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
459 visit = [base] |
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
460 files = [base._path] |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
461 while visit: |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
462 f = visit.pop(0) |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
463 for p in parents(f): |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
464 if p not in needed: |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
465 needed[p] = 1 |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
466 visit.append(p) |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
467 if p._path not in files: |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
468 files.append(p._path) |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
469 else: |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
470 # count how many times we'll use this |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
471 needed[p] += 1 |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
472 |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
473 # sort by revision (per file) which is a topological order |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
474 visit = [] |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
475 for f in files: |
9973
d1319ad5071b
context: use key-sorting instead of tuples
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9843
diff
changeset
|
476 visit.extend(n for n in needed if n._path == f) |
6762 | 477 |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
478 hist = {} |
9973
d1319ad5071b
context: use key-sorting instead of tuples
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9843
diff
changeset
|
479 for f in sorted(visit, key=lambda x: x.rev()): |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
480 curr = decorate(f.data(), f) |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
481 for p in parents(f): |
9974
da5209afe1bc
context: parents() already filters nullid
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9973
diff
changeset
|
482 curr = pair(hist[p], curr) |
da5209afe1bc
context: parents() already filters nullid
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9973
diff
changeset
|
483 # trim the history of unneeded revs |
da5209afe1bc
context: parents() already filters nullid
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9973
diff
changeset
|
484 needed[p] -= 1 |
da5209afe1bc
context: parents() already filters nullid
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9973
diff
changeset
|
485 if not needed[p]: |
da5209afe1bc
context: parents() already filters nullid
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9973
diff
changeset
|
486 del hist[p] |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
487 hist[f] = curr |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
488 |
9136
31177742f54a
for calls expecting bool args, pass bool instead of int
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9102
diff
changeset
|
489 return zip(hist[f][0], hist[f][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
|
490 |
3126
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
491 def ancestor(self, fc2): |
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
492 """ |
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
493 find the common ancestor file context, if any, of self, and fc2 |
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
494 """ |
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
495 |
9750
f153af9580fe
merge: first part of fix for issue1327
Matt Mackall <mpm@selenic.com>
parents:
9547
diff
changeset
|
496 actx = self.changectx().ancestor(fc2.changectx()) |
9751
f8ca4035a949
filectx: shortcut unrelated files in ancestor() (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9750
diff
changeset
|
497 |
f8ca4035a949
filectx: shortcut unrelated files in ancestor() (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9750
diff
changeset
|
498 # the trivial case: changesets are unrelated, files must be too |
f8ca4035a949
filectx: shortcut unrelated files in ancestor() (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9750
diff
changeset
|
499 if not actx: |
f8ca4035a949
filectx: shortcut unrelated files in ancestor() (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9750
diff
changeset
|
500 return None |
f8ca4035a949
filectx: shortcut unrelated files in ancestor() (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9750
diff
changeset
|
501 |
f8ca4035a949
filectx: shortcut unrelated files in ancestor() (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9750
diff
changeset
|
502 # the easy case: no (relevant) renames |
f8ca4035a949
filectx: shortcut unrelated files in ancestor() (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9750
diff
changeset
|
503 if fc2.path() == self.path() and self.path() in actx: |
9750
f153af9580fe
merge: first part of fix for issue1327
Matt Mackall <mpm@selenic.com>
parents:
9547
diff
changeset
|
504 return actx[self.path()] |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
505 acache = {} |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
506 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
507 # prime the ancestor cache for the working directory |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
508 for c in (self, fc2): |
8527
f9a80054dd3c
use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents:
8413
diff
changeset
|
509 if c._filerev is None: |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
510 pl = [(n.path(), n.filenode()) for n in c.parents()] |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
511 acache[(c._path, None)] = pl |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
512 |
6286
90a4329a6b4a
filectx.ancestor: use fctx._repopath to cache filelogs (issue1035)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6228
diff
changeset
|
513 flcache = {self._repopath:self._filelog, fc2._repopath:fc2._filelog} |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
514 def parents(vertex): |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
515 if vertex in acache: |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
516 return acache[vertex] |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
517 f, n = vertex |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
518 if f not in flcache: |
3126
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
519 flcache[f] = self._repo.file(f) |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
520 fl = flcache[f] |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
521 pl = [(f, p) for p in fl.parents(n) if p != nullid] |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
522 re = fl.renamed(n) |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
523 if re: |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
524 pl.append(re) |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
525 acache[vertex] = pl |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
526 return pl |
3126
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
527 |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
528 a, b = (self._path, self._filenode), (fc2._path, fc2._filenode) |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
529 v = ancestor.ancestor(a, b, parents) |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
530 if v: |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
531 f, n = v |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
532 return filectx(self._repo, f, fileid=n, filelog=flcache[f]) |
3126
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
533 |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
534 return None |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
535 |
10262
eb243551cbd8
copies: speed up copy detection
Matt Mackall <mpm@selenic.com>
parents:
9843
diff
changeset
|
536 def ancestors(self): |
eb243551cbd8
copies: speed up copy detection
Matt Mackall <mpm@selenic.com>
parents:
9843
diff
changeset
|
537 seen = set(str(self)) |
eb243551cbd8
copies: speed up copy detection
Matt Mackall <mpm@selenic.com>
parents:
9843
diff
changeset
|
538 visit = [self] |
eb243551cbd8
copies: speed up copy detection
Matt Mackall <mpm@selenic.com>
parents:
9843
diff
changeset
|
539 while visit: |
eb243551cbd8
copies: speed up copy detection
Matt Mackall <mpm@selenic.com>
parents:
9843
diff
changeset
|
540 for parent in visit.pop(0).parents(): |
eb243551cbd8
copies: speed up copy detection
Matt Mackall <mpm@selenic.com>
parents:
9843
diff
changeset
|
541 s = str(parent) |
eb243551cbd8
copies: speed up copy detection
Matt Mackall <mpm@selenic.com>
parents:
9843
diff
changeset
|
542 if s not in seen: |
eb243551cbd8
copies: speed up copy detection
Matt Mackall <mpm@selenic.com>
parents:
9843
diff
changeset
|
543 visit.append(parent) |
eb243551cbd8
copies: speed up copy detection
Matt Mackall <mpm@selenic.com>
parents:
9843
diff
changeset
|
544 seen.add(s) |
eb243551cbd8
copies: speed up copy detection
Matt Mackall <mpm@selenic.com>
parents:
9843
diff
changeset
|
545 yield parent |
eb243551cbd8
copies: speed up copy detection
Matt Mackall <mpm@selenic.com>
parents:
9843
diff
changeset
|
546 |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
547 class workingctx(changectx): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
548 """A workingctx object makes access to data related to |
6705
fec6bc978843
context: let workingctx parents be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6685
diff
changeset
|
549 the current working directory convenient. |
6709
f84f507c53d3
context: let workingctx.date(), .user() and description() be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6708
diff
changeset
|
550 date - any valid date string or (unixtime, offset), or None. |
f84f507c53d3
context: let workingctx.date(), .user() and description() be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6708
diff
changeset
|
551 user - username string, or None. |
6708
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
552 extra - a dictionary of extra values, or None. |
6707
02bad34230a2
localrepo: hide commit() file selection behind workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6705
diff
changeset
|
553 changes - a list of file lists as returned by localrepo.status() |
02bad34230a2
localrepo: hide commit() file selection behind workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6705
diff
changeset
|
554 or None to use the repository status. |
6705
fec6bc978843
context: let workingctx parents be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6685
diff
changeset
|
555 """ |
10969
ca052b484e56
context: remove parents parameter to workingctx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10942
diff
changeset
|
556 def __init__(self, repo, text="", user=None, date=None, extra=None, |
ca052b484e56
context: remove parents parameter to workingctx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10942
diff
changeset
|
557 changes=None): |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
558 self._repo = repo |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
559 self._rev = None |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
560 self._node = None |
6709
f84f507c53d3
context: let workingctx.date(), .user() and description() be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6708
diff
changeset
|
561 self._text = text |
6718
4386a7706828
Fix commit date (issue1193)
Christian Ebert <blacktrash@gmx.net>
parents:
6715
diff
changeset
|
562 if date: |
6709
f84f507c53d3
context: let workingctx.date(), .user() and description() be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6708
diff
changeset
|
563 self._date = util.parsedate(date) |
6817 | 564 if user: |
565 self._user = user | |
6707
02bad34230a2
localrepo: hide commit() file selection behind workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6705
diff
changeset
|
566 if changes: |
11099
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
567 self._status = list(changes[:5]) |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
568 self._ignored = changes[5] |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
569 self._clean = changes[6] |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
570 else: |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
571 self._ignored = None |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
572 self._clean = None |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
573 |
6708
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
574 self._extra = {} |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
575 if extra: |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
576 self._extra = extra.copy() |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
577 if 'branch' not in self._extra: |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
578 branch = self._repo.dirstate.branch() |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
579 try: |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
580 branch = branch.decode('UTF-8').encode('UTF-8') |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
581 except UnicodeDecodeError: |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
582 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
|
583 self._extra['branch'] = branch |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
584 if self._extra['branch'] == '': |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
585 self._extra['branch'] = 'default' |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
586 |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
587 def __str__(self): |
3313
6c68bc1e7873
context: change workingctx str() from . to <node>+
Matt Mackall <mpm@selenic.com>
parents:
3310
diff
changeset
|
588 return str(self._parents[0]) + "+" |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
589 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
590 def __nonzero__(self): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
591 return True |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
592 |
6771
f5d7cfcbb4d3
workingctx: add __contains__ method
Matt Mackall <mpm@selenic.com>
parents:
6764
diff
changeset
|
593 def __contains__(self, key): |
8061
26316dda374f
context: fix workingctx.__contains__
Patrick Mezard <pmezard@gmail.com>
parents:
7633
diff
changeset
|
594 return self._repo.dirstate[key] not in "?r" |
6771
f5d7cfcbb4d3
workingctx: add __contains__ method
Matt Mackall <mpm@selenic.com>
parents:
6764
diff
changeset
|
595 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
596 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
597 def _manifest(self): |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
598 """generate a manifest corresponding to the working directory""" |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
599 |
3218
8d4855fd9d7b
merge: use new working context object in update
Matt Mackall <mpm@selenic.com>
parents:
3217
diff
changeset
|
600 man = self._parents[0].manifest().copy() |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
601 copied = self._repo.dirstate.copies() |
10921
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
602 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
|
603 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
|
604 def getman(f): |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
605 if f in man: |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
606 return man |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
607 return man2 |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
608 else: |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
609 getman = lambda f: man |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
610 def cf(f): |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
611 f = 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
|
612 return getman(f).flags(f) |
6743 | 613 ff = self._repo.dirstate.flagfunc(cf) |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
614 modified, added, removed, deleted, unknown = self._status[:5] |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
615 for i, l in (("a", added), ("m", modified), ("u", unknown)): |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
616 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
|
617 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
|
618 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
|
619 try: |
6743 | 620 man.set(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
|
621 except OSError: |
676b75547d13
context: don't spuriously raise abort when a file goes missing.
Matt Mackall <mpm@selenic.com>
parents:
3715
diff
changeset
|
622 pass |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
623 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
624 for f in deleted + removed: |
3325
50a18815e3f0
Revert changeset c67920d78248.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents:
3313
diff
changeset
|
625 if f in man: |
50a18815e3f0
Revert changeset c67920d78248.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents:
3313
diff
changeset
|
626 del man[f] |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
627 |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
628 return man |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
629 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
630 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
631 def _status(self): |
11099
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
632 return self._repo.status(unknown=True)[:5] |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
633 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
634 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
635 def _user(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
636 return self._repo.ui.username() |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
637 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
638 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
639 def _date(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
640 return util.makedate() |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
641 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
642 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
643 def _parents(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
644 p = self._repo.dirstate.parents() |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
645 if p[1] == nullid: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
646 p = p[:-1] |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
647 self._parents = [changectx(self._repo, x) for x in p] |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
648 return self._parents |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
649 |
11098
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
650 def status(self, ignored=False, clean=False, unknown=False): |
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
651 """Explicit status query |
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
652 Unless this method is used to query the working copy status, the |
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
653 _status property will implicitly read the status using its default |
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
654 arguments.""" |
11099
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
655 stat = self._repo.status(ignored=ignored, clean=clean, unknown=unknown) |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
656 self._ignored = ignored and stat[5] or None |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
657 self._clean = clean and stat[6] or None |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
658 self._status = stat[:5] |
11098
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
659 return self._status |
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
660 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
661 def manifest(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
662 return self._manifest |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
663 def user(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
664 return self._user or self._repo.ui.username() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
665 def date(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
666 return self._date |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
667 def description(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
668 return self._text |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
669 def files(self): |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8207
diff
changeset
|
670 return sorted(self._status[0] + self._status[1] + self._status[2]) |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
671 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
672 def modified(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
673 return self._status[0] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
674 def added(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
675 return self._status[1] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
676 def removed(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
677 return self._status[2] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
678 def deleted(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
679 return self._status[3] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
680 def unknown(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
681 return self._status[4] |
11098
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
682 def ignored(self): |
11099
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
683 if self._ignored is None: |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
684 raise util.Abort(_("Ignored files requested without prior query\n")) |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
685 return self._ignored |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
686 def clean(self): |
11099
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
687 if self._clean is None: |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
688 raise util.Abort(_("Clean files requested without prior query\n")) |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
689 return self._clean |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
690 def branch(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
691 return self._extra['branch'] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
692 def extra(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
693 return self._extra |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
694 |
4663 | 695 def tags(self): |
696 t = [] | |
697 [t.extend(p.tags()) for p in self.parents()] | |
698 return t | |
699 | |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
700 def children(self): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
701 return [] |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
702 |
6743 | 703 def flags(self, path): |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
704 if '_manifest' in self.__dict__: |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
705 try: |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
706 return self._manifest.flags(path) |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
707 except KeyError: |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
708 return '' |
5760
0145f9afb0e7
Removed tabs and trailing whitespace in python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5558
diff
changeset
|
709 |
5407
d7e7902bb190
Fix workingctx exec/link bit of copies on non-supporting systems
Patrick Mezard <pmezard@gmail.com>
parents:
5399
diff
changeset
|
710 orig = self._repo.dirstate.copies().get(path, path) |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
711 |
10921
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
712 def findflag(ctx): |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
713 mnode = ctx.changeset()[0] |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
714 node, flag = self._repo.manifest.find(mnode, orig) |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
715 ff = self._repo.dirstate.flagfunc(lambda x: flag or None) |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
716 try: |
10927
c1d375e93ee8
context: fix bug introduced in fb89cd21a7a0, path should be used
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10921
diff
changeset
|
717 return ff(path) |
10921
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
718 except OSError: |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
719 pass |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
720 |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
721 flag = findflag(self._parents[0]) |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
722 if flag is None and 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
|
723 flag = findflag(self._parents[1]) |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
724 if flag is None or self._repo.dirstate[path] == 'r': |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
725 return '' |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
726 return flag |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
727 |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
728 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
|
729 """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
|
730 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
|
731 filelog=filelog) |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
732 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
733 def ancestor(self, c2): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
734 """return the ancestor context of self and c2""" |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
735 return self._parents[0].ancestor(c2) # punt on two parents for now |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
736 |
6764 | 737 def walk(self, match): |
10176
24ce8f0c0a39
dirstate: don't check state of subrepo directories
Augie Fackler <durin42@gmail.com>
parents:
9974
diff
changeset
|
738 return sorted(self._repo.dirstate.walk(match, self.substate.keys(), |
24ce8f0c0a39
dirstate: don't check state of subrepo directories
Augie Fackler <durin42@gmail.com>
parents:
9974
diff
changeset
|
739 True, False)) |
6764 | 740 |
8717
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
741 def dirty(self, missing=False): |
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
742 "check whether a working directory is modified" |
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
743 |
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
744 return (self.p2() or self.branch() != self.p1().branch() or |
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
745 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
|
746 (missing and self.deleted())) |
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
747 |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
748 class workingfilectx(filectx): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
749 """A workingfilectx object makes access to data related to a particular |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
750 file in the working directory convenient.""" |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
751 def __init__(self, repo, path, filelog=None, workingctx=None): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
752 """changeid can be a changeset revision, node, or tag. |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
753 fileid can be a file revision or node.""" |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
754 self._repo = repo |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
755 self._path = path |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
756 self._changeid = None |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
757 self._filerev = self._filenode = None |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
758 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
759 if filelog: |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
760 self._filelog = filelog |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
761 if workingctx: |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
762 self._changectx = workingctx |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
763 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
764 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
765 def _changectx(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
766 return workingctx(self._repo) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
767 |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
768 def __nonzero__(self): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
769 return True |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
770 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
771 def __str__(self): |
3313
6c68bc1e7873
context: change workingctx str() from . to <node>+
Matt Mackall <mpm@selenic.com>
parents:
3310
diff
changeset
|
772 return "%s@%s" % (self.path(), self._changectx) |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
773 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
774 def data(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
775 return self._repo.wread(self._path) |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
776 def renamed(self): |
8528
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
777 rp = self._repo.dirstate.copied(self._path) |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
778 if not rp: |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
779 return None |
3965
2e5161335e65
context: fix a bug in workingfilectx.renamed
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3964
diff
changeset
|
780 return rp, self._changectx._parents[0]._manifest.get(rp, nullid) |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
781 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
782 def parents(self): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
783 '''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
|
784 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
|
785 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
|
786 |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
787 path = self._path |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
788 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
|
789 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
|
790 renamed = self.renamed() |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
791 |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
792 if renamed: |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
793 pl = [renamed + (None,)] |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
794 else: |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
795 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
|
796 |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
797 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
|
798 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
|
799 |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
800 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
|
801 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
|
802 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
803 def children(self): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
804 return [] |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
805 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
806 def size(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
807 return os.stat(self._repo.wjoin(self._path)).st_size |
3962
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
808 def date(self): |
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
809 t, tz = self._changectx.date() |
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
810 try: |
4117
eb0967c6e77b
Use only integer part of mtime in workingfilectx.date(), fixes test-context.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4110
diff
changeset
|
811 return (int(os.lstat(self._repo.wjoin(self._path)).st_mtime), tz) |
3962
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
812 except OSError, err: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
813 if err.errno != errno.ENOENT: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
814 raise |
3962
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
815 return (t, tz) |
3310
0e370798eebf
context: add cmp for filectxs
Matt Mackall <mpm@selenic.com>
parents:
3302
diff
changeset
|
816 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
817 def cmp(self, text): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
818 return self._repo.wread(self._path) == text |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
819 |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
820 class memctx(object): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
821 """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
|
822 |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
823 Revision information is supplied at initialization time while |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
824 related files data and is made available through a callback |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
825 mechanism. 'repo' is the current localrepo, 'parents' is a |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
826 sequence of two parent revisions identifiers (pass None for every |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
827 missing parent), 'text' is the commit message and 'files' lists |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
828 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
|
829 repository root). |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
830 |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
831 filectxfn(repo, memctx, path) is a callable receiving the |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
832 repository, the current memctx object and the normalized path of |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
833 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
|
834 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
|
835 undefined. If the file is available in the revision being |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
836 committed (updated or added), filectxfn returns a memfilectx |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
837 object. If the file was removed, filectxfn raises an |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
838 IOError. Moved files are represented by marking the source file |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
839 removed and the new file added with copy information (see |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
840 memfilectx). |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
841 |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
842 user receives the committer name and defaults to current |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
843 repository username, date is the commit date in any format |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
844 supported by util.parsedate() and defaults to current date, extra |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
845 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
|
846 """ |
6721
521c6c6f3b9b
kill some trailing spaces
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6718
diff
changeset
|
847 def __init__(self, repo, parents, text, files, filectxfn, user=None, |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
848 date=None, extra=None): |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
849 self._repo = repo |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
850 self._rev = None |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
851 self._node = None |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
852 self._text = text |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
853 self._date = date and util.parsedate(date) or util.makedate() |
6809
89ec85aa6cc3
context: trigger missing username warning only when necessary
Patrick Mezard <pmezard@gmail.com>
parents:
6772
diff
changeset
|
854 self._user = user |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
855 parents = [(p or nullid) for p in parents] |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
856 p1, p2 = parents |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6744
diff
changeset
|
857 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
|
858 files = sorted(set(files)) |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
859 self._status = [files, [], [], [], []] |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
860 self._filectxfn = filectxfn |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
861 |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
862 self._extra = extra and extra.copy() or {} |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
863 if 'branch' not in self._extra: |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
864 self._extra['branch'] = 'default' |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
865 elif self._extra.get('branch') == '': |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
866 self._extra['branch'] = 'default' |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
867 |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
868 def __str__(self): |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
869 return str(self._parents[0]) + "+" |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
870 |
6763
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
871 def __int__(self): |
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
872 return self._rev |
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
873 |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
874 def __nonzero__(self): |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
875 return True |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
876 |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8380
diff
changeset
|
877 def __getitem__(self, key): |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8380
diff
changeset
|
878 return self.filectx(key) |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8380
diff
changeset
|
879 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
880 def p1(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
881 return self._parents[0] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
882 def p2(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
883 return self._parents[1] |
8406
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
884 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
885 def user(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
886 return self._user or self._repo.ui.username() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
887 def date(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
888 return self._date |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
889 def description(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
890 return self._text |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
891 def files(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
892 return self.modified() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
893 def modified(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
894 return self._status[0] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
895 def added(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
896 return self._status[1] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
897 def removed(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
898 return self._status[2] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
899 def deleted(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
900 return self._status[3] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
901 def unknown(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
902 return self._status[4] |
11098
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
903 def ignored(self): |
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
904 return self._status[5] |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
905 def clean(self): |
11098
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
906 return self._status[6] |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
907 def branch(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
908 return self._extra['branch'] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
909 def extra(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
910 return self._extra |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
911 def flags(self, f): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
912 return self[f].flags() |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
913 |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
914 def parents(self): |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
915 """return contexts for each parent changeset""" |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
916 return self._parents |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
917 |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
918 def filectx(self, path, filelog=None): |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
919 """get a file context from the working directory""" |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
920 return self._filectxfn(self._repo, self, path) |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
921 |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
922 class memfilectx(object): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
923 """memfilectx represents an in-memory file to commit. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
924 |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
925 See memctx for more details. |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
926 """ |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
927 def __init__(self, path, data, islink, isexec, copied): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
928 """ |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
929 path is the normalized file path relative to repository root. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
930 data is the file content as a string. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
931 islink is True if the file is a symbolic link. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
932 isexec is True if the file is executable. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
933 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
|
934 revision being committed, or None.""" |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
935 self._path = path |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
936 self._data = data |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
937 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
|
938 self._copied = None |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
939 if copied: |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
940 self._copied = (copied, nullid) |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
941 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
942 def __nonzero__(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
943 return True |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
944 def __str__(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
945 return "%s@%s" % (self.path(), self._changectx) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
946 def path(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
947 return self._path |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
948 def data(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
949 return self._data |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
950 def flags(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
951 return self._flags |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
952 def isexec(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
953 return 'x' in self._flags |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
954 def islink(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
955 return 'l' in self._flags |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
956 def renamed(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
957 return self._copied |