Mercurial > hg
annotate mercurial/context.py @ 17334:39c01f8e7b39 stable
templater: handle a missing value correctly
Before, using a broken style such as:
changeset =
would result in a traceback.
This fixes a regression introduced in 63c47e4ac617.
author | Ross Lagerwall <rosslagerwall@gmail.com> |
---|---|
date | Sat, 04 Aug 2012 14:37:17 +0200 |
parents | 62c56c94c77e |
children | 32e9d63d9ba6 |
rev | line source |
---|---|
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 # context.py - changeset and file context objects for mercurial |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 # |
4635
63b9d2deed48
Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4417
diff
changeset
|
3 # Copyright 2006, 2007 Matt Mackall <mpm@selenic.com> |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
8 from node import nullid, nullrev, short, hex, bin |
3891 | 9 from i18n import _ |
15818
57241845a4bb
phases: store phase values in constant instead of using raw integer
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15738
diff
changeset
|
10 import ancestor, mdiff, error, util, scmutil, subrepo, patch, encoding, phases |
16602
80aef0bc5ba7
context: add copies method with caching
Matt Mackall <mpm@selenic.com>
parents:
16601
diff
changeset
|
11 import copies |
14669
2d2604adfdd6
context: add a match builder method
Matt Mackall <mpm@selenic.com>
parents:
14644
diff
changeset
|
12 import match as matchmod |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
13 import os, errno, stat |
3122
da85145d4571
filectx: add rename traversal for parents()
Matt Mackall <mpm@selenic.com>
parents:
2859
diff
changeset
|
14 |
8207
dd8d5be57d65
util: take propertycache from context.py
Matt Mackall <mpm@selenic.com>
parents:
8157
diff
changeset
|
15 propertycache = util.propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
16 |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
17 class changectx(object): |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
18 """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
|
19 changeset convenient.""" |
6741
5918e2b79859
context: simplify changeid logic
Matt Mackall <mpm@selenic.com>
parents:
6737
diff
changeset
|
20 def __init__(self, repo, changeid=''): |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
21 """changeid is a revision number, node, or tag""" |
6741
5918e2b79859
context: simplify changeid logic
Matt Mackall <mpm@selenic.com>
parents:
6737
diff
changeset
|
22 if changeid == '': |
5918e2b79859
context: simplify changeid logic
Matt Mackall <mpm@selenic.com>
parents:
6737
diff
changeset
|
23 changeid = '.' |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
24 self._repo = repo |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
25 |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
26 if isinstance(changeid, int): |
7367
ad0eb8762458
context: special-case changectx setup for integer changeid
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7361
diff
changeset
|
27 self._rev = changeid |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
28 self._node = repo.changelog.node(changeid) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
29 return |
16760
ac89a23ca814
context: grudging accept longs in constructor
Matt Mackall <mpm@selenic.com>
parents:
16491
diff
changeset
|
30 if isinstance(changeid, long): |
ac89a23ca814
context: grudging accept longs in constructor
Matt Mackall <mpm@selenic.com>
parents:
16491
diff
changeset
|
31 changeid = str(changeid) |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
32 if changeid == '.': |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
33 self._node = repo.dirstate.p1() |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
34 self._rev = repo.changelog.rev(self._node) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
35 return |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
36 if changeid == 'null': |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
37 self._node = nullid |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
38 self._rev = nullrev |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
39 return |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
40 if changeid == 'tip': |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
41 self._rev = len(repo.changelog) - 1 |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
42 self._node = repo.changelog.node(self._rev) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
43 return |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
44 if len(changeid) == 20: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
45 try: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
46 self._node = changeid |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
47 self._rev = repo.changelog.rev(changeid) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
48 return |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
49 except LookupError: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
50 pass |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
51 |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
52 try: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
53 r = int(changeid) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
54 if str(r) != changeid: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
55 raise ValueError |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
56 l = len(repo.changelog) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
57 if r < 0: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
58 r += l |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
59 if r < 0 or r >= l: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
60 raise ValueError |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
61 self._rev = r |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
62 self._node = repo.changelog.node(r) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
63 return |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
64 except (ValueError, OverflowError): |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
65 pass |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
66 |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
67 if len(changeid) == 40: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
68 try: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
69 self._node = bin(changeid) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
70 self._rev = repo.changelog.rev(self._node) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
71 return |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
72 except (TypeError, LookupError): |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
73 pass |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
74 |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
75 if changeid in repo._bookmarks: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
76 self._node = repo._bookmarks[changeid] |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
77 self._rev = repo.changelog.rev(self._node) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
78 return |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
79 if changeid in repo._tagscache.tags: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
80 self._node = repo._tagscache.tags[changeid] |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
81 self._rev = repo.changelog.rev(self._node) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
82 return |
16719
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
83 try: |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
84 self._node = repo.branchtip(changeid) |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
85 self._rev = repo.changelog.rev(self._node) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
86 return |
16719
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
87 except error.RepoLookupError: |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
88 pass |
16376
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
89 |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
90 self._node = repo.changelog._partialmatch(changeid) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
91 if self._node is not None: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
92 self._rev = repo.changelog.rev(self._node) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
93 return |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
94 |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
95 # lookup failed |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
96 # check if it might have come from damaged dirstate |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
97 if changeid in repo.dirstate.parents(): |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
98 raise error.Abort(_("working directory has unknown parent '%s'!") |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
99 % short(changeid)) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
100 try: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
101 if len(changeid) == 20: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
102 changeid = hex(changeid) |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
103 except TypeError: |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
104 pass |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
105 raise error.RepoLookupError( |
d3908c911d5e
context: internalize lookup logic
Matt Mackall <mpm@selenic.com>
parents:
16373
diff
changeset
|
106 _("unknown revision '%s'") % changeid) |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
107 |
3166
ebdb3f616bc0
Add str methods to contexts
Matt Mackall <mpm@selenic.com>
parents:
3165
diff
changeset
|
108 def __str__(self): |
ebdb3f616bc0
Add str methods to contexts
Matt Mackall <mpm@selenic.com>
parents:
3165
diff
changeset
|
109 return short(self.node()) |
ebdb3f616bc0
Add str methods to contexts
Matt Mackall <mpm@selenic.com>
parents:
3165
diff
changeset
|
110 |
6763
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
111 def __int__(self): |
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
112 return self.rev() |
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
113 |
3151
6719b3dd7d50
context: add __repr__ methods
Matt Mackall <mpm@selenic.com>
parents:
3150
diff
changeset
|
114 def __repr__(self): |
3216
d865390c1781
context: simplify repr methods
Matt Mackall <mpm@selenic.com>
parents:
3215
diff
changeset
|
115 return "<changectx %s>" % str(self) |
3151
6719b3dd7d50
context: add __repr__ methods
Matt Mackall <mpm@selenic.com>
parents:
3150
diff
changeset
|
116 |
6469
fb502719c75c
python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents:
6286
diff
changeset
|
117 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
|
118 try: |
fb502719c75c
python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents:
6286
diff
changeset
|
119 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
|
120 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
|
121 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
|
122 |
3165
e78185746554
Add equality operators to changectx and filectx
Matt Mackall <mpm@selenic.com>
parents:
3152
diff
changeset
|
123 def __eq__(self, other): |
3715
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
124 try: |
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
125 return self._rev == other._rev |
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
126 except AttributeError: |
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
127 return False |
3165
e78185746554
Add equality operators to changectx and filectx
Matt Mackall <mpm@selenic.com>
parents:
3152
diff
changeset
|
128 |
4748
8808ea7da86b
merge: make test for fast-forward merge stricter (issue619)
Matt Mackall <mpm@selenic.com>
parents:
4663
diff
changeset
|
129 def __ne__(self, other): |
8808ea7da86b
merge: make test for fast-forward merge stricter (issue619)
Matt Mackall <mpm@selenic.com>
parents:
4663
diff
changeset
|
130 return not (self == other) |
8808ea7da86b
merge: make test for fast-forward merge stricter (issue619)
Matt Mackall <mpm@selenic.com>
parents:
4663
diff
changeset
|
131 |
3168
05c588e1803d
context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents:
3166
diff
changeset
|
132 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
|
133 return self._rev != nullrev |
3168
05c588e1803d
context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents:
3166
diff
changeset
|
134 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
135 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
136 def _changeset(self): |
16377
f8ce254e514f
context: use rev for changelog lookup
Matt Mackall <mpm@selenic.com>
parents:
16376
diff
changeset
|
137 return self._repo.changelog.read(self.rev()) |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
138 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
139 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
140 def _manifest(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
141 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
|
142 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
143 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
144 def _manifestdelta(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
145 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
|
146 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
147 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
148 def _parents(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
149 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
|
150 if p[1] == nullrev: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
151 p = p[:-1] |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
152 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
|
153 |
8812
859f841937d0
subrepo: introduce basic state parsing
Matt Mackall <mpm@selenic.com>
parents:
8717
diff
changeset
|
154 @propertycache |
859f841937d0
subrepo: introduce basic state parsing
Matt Mackall <mpm@selenic.com>
parents:
8717
diff
changeset
|
155 def substate(self): |
11775
a8614c5a5e9a
subrepos: support remapping of .hgsub source paths
Martin Geisler <mg@lazybytes.net>
parents:
11703
diff
changeset
|
156 return subrepo.state(self, self._repo.ui) |
8812
859f841937d0
subrepo: introduce basic state parsing
Matt Mackall <mpm@selenic.com>
parents:
8717
diff
changeset
|
157 |
4909
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
158 def __contains__(self, key): |
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
159 return key in self._manifest |
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
160 |
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
161 def __getitem__(self, key): |
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
162 return self.filectx(key) |
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
163 |
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
164 def __iter__(self): |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8207
diff
changeset
|
165 for f in sorted(self._manifest): |
5485
8c0756f7b18b
Fix context iterator.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5439
diff
changeset
|
166 yield f |
4909
1fd7a99d98f6
context: add __contains__, __getitem__, and __iter__
Matt Mackall <mpm@selenic.com>
parents:
4889
diff
changeset
|
167 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
168 def changeset(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
169 return self._changeset |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
170 def manifest(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
171 return self._manifest |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
172 def manifestnode(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
173 return self._changeset[0] |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
174 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
175 def rev(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
176 return self._rev |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
177 def node(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
178 return self._node |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
179 def hex(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
180 return hex(self._node) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
181 def user(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
182 return self._changeset[1] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
183 def date(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
184 return self._changeset[2] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
185 def files(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
186 return self._changeset[3] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
187 def description(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
188 return self._changeset[4] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
189 def branch(self): |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
13031
diff
changeset
|
190 return encoding.tolocal(self._changeset[5].get("branch")) |
16720
e825a89de5d7
context: add changectx.closesbranch() method
Brodie Rao <brodie@sf.io>
parents:
16719
diff
changeset
|
191 def closesbranch(self): |
e825a89de5d7
context: add changectx.closesbranch() method
Brodie Rao <brodie@sf.io>
parents:
16719
diff
changeset
|
192 return 'close' in self._changeset[5] |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
193 def extra(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
194 return self._changeset[5] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
195 def tags(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
196 return self._repo.nodetags(self._node) |
13384
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13235
diff
changeset
|
197 def bookmarks(self): |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13235
diff
changeset
|
198 return self._repo.nodebookmarks(self._node) |
15421
405ca90df2b1
phases: add a phase method to context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15337
diff
changeset
|
199 def phase(self): |
16657
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16610
diff
changeset
|
200 return self._repo._phasecache.phase(self._repo, self._rev) |
15822
d523b6e7ad26
phases: add a phasestr method on context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15818
diff
changeset
|
201 def phasestr(self): |
d523b6e7ad26
phases: add a phasestr method on context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15818
diff
changeset
|
202 return phases.phasenames[self.phase()] |
15703
2a48422e27f6
phases: add a mutable boolean property on context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15528
diff
changeset
|
203 def mutable(self): |
16359
a1b6a63f9f39
context: make changectx.mutable() benefit from .phase() logic
Patrick Mezard <patrick@mezard.eu>
parents:
16145
diff
changeset
|
204 return self.phase() > phases.public |
14644
f3a40fd7008c
hidden: Add ``hidden`` method for context
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
14528
diff
changeset
|
205 def hidden(self): |
17207
62c56c94c77e
hidden: move hiddenrevs set on the repository
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17173
diff
changeset
|
206 return self._rev in self._repo.hiddenrevs |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
207 |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
208 def parents(self): |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
209 """return contexts for each parent changeset""" |
6742
2d54e7c1e69d
context: clean up parents()
Matt Mackall <mpm@selenic.com>
parents:
6741
diff
changeset
|
210 return self._parents |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
211 |
8406
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
212 def p1(self): |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
213 return self._parents[0] |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
214 |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
215 def p2(self): |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
216 if len(self._parents) == 2: |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
217 return self._parents[1] |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
218 return changectx(self._repo, -1) |
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
219 |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
220 def children(self): |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
221 """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
|
222 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
|
223 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
|
224 |
6876 | 225 def ancestors(self): |
16866
91f3ac205816
revlog: ancestors(*revs) becomes ancestors(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents:
16761
diff
changeset
|
226 for a in self._repo.changelog.ancestors([self._rev]): |
6876 | 227 yield changectx(self._repo, a) |
228 | |
229 def descendants(self): | |
16867
1093ad1e8903
revlog: descendants(*revs) becomes descendants(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents:
16866
diff
changeset
|
230 for d in self._repo.changelog.descendants([self._rev]): |
6876 | 231 yield changectx(self._repo, d) |
232 | |
17076
75f4180509a4
obsolete: function and method to access some obsolete data
Pierre-Yves.David@ens-lyon.org
parents:
17055
diff
changeset
|
233 def obsolete(self): |
75f4180509a4
obsolete: function and method to access some obsolete data
Pierre-Yves.David@ens-lyon.org
parents:
17055
diff
changeset
|
234 """True if the changeset is obsolete""" |
17118
b3c20b0f5f5a
obsolete: fix context.obsolete() method
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17076
diff
changeset
|
235 return (self.node() in self._repo.obsstore.precursors |
b3c20b0f5f5a
obsolete: fix context.obsolete() method
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17076
diff
changeset
|
236 and self.phase() > phases.public) |
17076
75f4180509a4
obsolete: function and method to access some obsolete data
Pierre-Yves.David@ens-lyon.org
parents:
17055
diff
changeset
|
237 |
17173
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
238 def extinct(self): |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
239 """True if the changeset is extinct""" |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
240 # We should just compute a cache a check againts it. |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
241 # see revset implementation for details |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
242 # |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
243 # But this naive implementation does not require cache |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
244 if self.phase() <= phases.public: |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
245 return False |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
246 if not self.obsolete(): |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
247 return False |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
248 for desc in self.descendants(): |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
249 if not desc.obsolete(): |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
250 return False |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
251 return True |
c621f84dbb35
obsolete: compute extinct changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17171
diff
changeset
|
252 |
17171
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
253 def unstable(self): |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
254 """True if the changeset is not obsolete but it's ancestor are""" |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
255 # We should just compute /(obsolete()::) - obsolete()/ |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
256 # and keep it in a cache. |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
257 # |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
258 # But this naive implementation does not require cache |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
259 if self.phase() <= phases.public: |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
260 return False |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
261 if self.obsolete(): |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
262 return False |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
263 for anc in self.ancestors(): |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
264 if anc.obsolete(): |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
265 return True |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
266 return False |
9c750c3e4fac
obsolete: compute unstable changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17118
diff
changeset
|
267 |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
268 def _fileinfo(self, path): |
3336
e44eadc92ec4
context: check self.__dict__ instead of using hasattr
Brendan Cully <brendan@kublai.com>
parents:
3313
diff
changeset
|
269 if '_manifest' in self.__dict__: |
3242
1539f788e913
Make changectx.filenode raise repo.LookupError on failure
Brendan Cully <brendan@kublai.com>
parents:
3241
diff
changeset
|
270 try: |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
271 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
|
272 except KeyError: |
7633 | 273 raise error.LookupError(self._node, path, |
274 _('not found in manifest')) | |
3337
b02e60097bbe
changectx: search manifest delta for filenode
Brendan Cully <brendan@kublai.com>
parents:
3336
diff
changeset
|
275 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
|
276 if path in self._manifestdelta: |
16683 | 277 return (self._manifestdelta[path], |
278 self._manifestdelta.flags(path)) | |
3215
931288cf58a7
contexts: use __getattr__ rather than try/except in changectx
Matt Mackall <mpm@selenic.com>
parents:
3214
diff
changeset
|
279 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
|
280 if not node: |
7633 | 281 raise error.LookupError(self._node, path, |
282 _('not found in manifest')) | |
3242
1539f788e913
Make changectx.filenode raise repo.LookupError on failure
Brendan Cully <brendan@kublai.com>
parents:
3241
diff
changeset
|
283 |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
284 return node, flag |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
285 |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
286 def filenode(self, path): |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
287 return self._fileinfo(path)[0] |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
288 |
6743 | 289 def flags(self, path): |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
290 try: |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
291 return self._fileinfo(path)[1] |
7633 | 292 except error.LookupError: |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
293 return '' |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
294 |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
295 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
|
296 """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
|
297 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
|
298 fileid = self.filenode(path) |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
299 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
|
300 changectx=self, filelog=filelog) |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
301 |
3125
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
302 def ancestor(self, c2): |
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
303 """ |
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
304 return the ancestor context of self and c2 |
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
305 """ |
9843
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
306 # deal with workingctxs |
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
307 n2 = c2._node |
13031
3da456d0c885
code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents:
13001
diff
changeset
|
308 if n2 is None: |
9843
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
309 n2 = c2._parents[0]._node |
d1043c2ffe6c
merge: fix changectx.ancestor(workingctx) (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9751
diff
changeset
|
310 n = self._repo.changelog.ancestor(self._node, n2) |
3125
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
311 return changectx(self._repo, n) |
02b22fefc01f
changectx: add ancestor function
Matt Mackall <mpm@selenic.com>
parents:
3124
diff
changeset
|
312 |
6764 | 313 def walk(self, match): |
8380
a00a4db76a15
context: replace pseudo-set by real set
Simon Heimberg <simohe@besonet.ch>
parents:
8312
diff
changeset
|
314 fset = set(match.files()) |
6764 | 315 # for dirstate.walk, files=['.'] means "walk the whole tree". |
316 # follow that here, too | |
8380
a00a4db76a15
context: replace pseudo-set by real set
Simon Heimberg <simohe@besonet.ch>
parents:
8312
diff
changeset
|
317 fset.discard('.') |
6764 | 318 for fn in self: |
16145
616c2e278f18
context: use 'changectx.dirs()' in 'walk()' for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16143
diff
changeset
|
319 if fn in fset: |
616c2e278f18
context: use 'changectx.dirs()' in 'walk()' for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16143
diff
changeset
|
320 # specified pattern is the exact name |
616c2e278f18
context: use 'changectx.dirs()' in 'walk()' for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16143
diff
changeset
|
321 fset.remove(fn) |
6764 | 322 if match(fn): |
323 yield fn | |
8380
a00a4db76a15
context: replace pseudo-set by real set
Simon Heimberg <simohe@besonet.ch>
parents:
8312
diff
changeset
|
324 for fn in sorted(fset): |
16145
616c2e278f18
context: use 'changectx.dirs()' in 'walk()' for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16143
diff
changeset
|
325 if fn in self._dirs: |
616c2e278f18
context: use 'changectx.dirs()' in 'walk()' for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16143
diff
changeset
|
326 # specified pattern is a directory |
616c2e278f18
context: use 'changectx.dirs()' in 'walk()' for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16143
diff
changeset
|
327 continue |
12067
a4fbbe0fbc38
Lowercase error messages
Martin Geisler <mg@lazybytes.net>
parents:
12030
diff
changeset
|
328 if match.bad(fn, _('no such file in rev %s') % self) and match(fn): |
6764 | 329 yield fn |
330 | |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
331 def sub(self, path): |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
332 return subrepo.subrepo(self, path) |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
333 |
14669
2d2604adfdd6
context: add a match builder method
Matt Mackall <mpm@selenic.com>
parents:
14644
diff
changeset
|
334 def match(self, pats=[], include=None, exclude=None, default='glob'): |
2d2604adfdd6
context: add a match builder method
Matt Mackall <mpm@selenic.com>
parents:
14644
diff
changeset
|
335 r = self._repo |
2d2604adfdd6
context: add a match builder method
Matt Mackall <mpm@selenic.com>
parents:
14644
diff
changeset
|
336 return matchmod.match(r.root, r.getcwd(), pats, |
14674
1c151b963254
match: allow passing a context object to match core
Matt Mackall <mpm@selenic.com>
parents:
14669
diff
changeset
|
337 include, exclude, default, |
1c151b963254
match: allow passing a context object to match core
Matt Mackall <mpm@selenic.com>
parents:
14669
diff
changeset
|
338 auditor=r.auditor, ctx=self) |
14669
2d2604adfdd6
context: add a match builder method
Matt Mackall <mpm@selenic.com>
parents:
14644
diff
changeset
|
339 |
11106
213ca9ffcddb
changectx: change diff() to accept keyword opts
Steve Borho <steve@borho.org>
parents:
11105
diff
changeset
|
340 def diff(self, ctx2=None, match=None, **opts): |
11097
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
341 """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
|
342 if ctx2 is None: |
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
343 ctx2 = self.p1() |
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
344 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
|
345 ctx2 = self._repo[ctx2] |
11105
6f4543842795
changectx: use repo.ui diffopts, allow argument override
Steve Borho <steve@borho.org>
parents:
11101
diff
changeset
|
346 diffopts = patch.diffopts(self._repo.ui, opts) |
6f4543842795
changectx: use repo.ui diffopts, allow argument override
Steve Borho <steve@borho.org>
parents:
11101
diff
changeset
|
347 return patch.diff(self._repo, ctx2.node(), self.node(), |
6f4543842795
changectx: use repo.ui diffopts, allow argument override
Steve Borho <steve@borho.org>
parents:
11101
diff
changeset
|
348 match=match, opts=diffopts) |
11097
9651fa5a3cbf
context: add a changectx.diff() convenience function
Steve Borho <steve@borho.org>
parents:
10969
diff
changeset
|
349 |
16143
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
350 @propertycache |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
351 def _dirs(self): |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
352 dirs = set() |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
353 for f in self._manifest: |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
354 pos = f.rfind('/') |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
355 while pos != -1: |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
356 f = f[:pos] |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
357 if f in dirs: |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
358 break # dirs already contains this and above |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
359 dirs.add(f) |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
360 pos = f.rfind('/') |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
361 return dirs |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
362 |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
363 def dirs(self): |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
364 return self._dirs |
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
365 |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
366 class filectx(object): |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
367 """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
|
368 filerevision convenient.""" |
3214
696c656202a0
context: make filectx remember changectx in changectx.filectx
Matt Mackall <mpm@selenic.com>
parents:
3213
diff
changeset
|
369 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
|
370 filelog=None, changectx=None): |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
371 """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
|
372 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
|
373 self._repo = repo |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
374 self._path = path |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
375 |
3964
2308c39b9521
make it possible to use changectx to create a filectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3962
diff
changeset
|
376 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
|
377 or fileid is not None |
9024
10532b29cdee
context: improve arg-checking assert.
Greg Ward <greg@gerg.ca>
parents:
8813
diff
changeset
|
378 or changectx is not None), \ |
10532b29cdee
context: improve arg-checking assert.
Greg Ward <greg@gerg.ca>
parents:
8813
diff
changeset
|
379 ("bad args: changeid=%r, fileid=%r, changectx=%r" |
10532b29cdee
context: improve arg-checking assert.
Greg Ward <greg@gerg.ca>
parents:
8813
diff
changeset
|
380 % (changeid, fileid, changectx)) |
2643
f23973ea3107
fix filectxt to really work
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2629
diff
changeset
|
381 |
3124
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
382 if filelog: |
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
383 self._filelog = filelog |
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
384 |
5810
124577de40a7
context: preserve changeset in filectx if we have one
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
385 if changeid is not None: |
124577de40a7
context: preserve changeset in filectx if we have one
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
386 self._changeid = changeid |
124577de40a7
context: preserve changeset in filectx if we have one
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
387 if changectx is not None: |
124577de40a7
context: preserve changeset in filectx if we have one
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
388 self._changectx = changectx |
124577de40a7
context: preserve changeset in filectx if we have one
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
389 if fileid is not None: |
3213 | 390 self._fileid = fileid |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
391 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
392 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
393 def _changectx(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
394 return changectx(self._repo, self._changeid) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
395 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
396 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
397 def _filelog(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
398 return self._repo.file(self._path) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
399 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
400 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
401 def _changeid(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
402 if '_changectx' in self.__dict__: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
403 return self._changectx.rev() |
3144
8342ad5abe0b
Make filectx lazier - some users never use filenode
Brendan Cully <brendan@kublai.com>
parents:
3143
diff
changeset
|
404 else: |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
405 return self._filelog.linkrev(self._filerev) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
406 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
407 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
408 def _filenode(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
409 if '_fileid' in self.__dict__: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
410 return self._filelog.lookup(self._fileid) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
411 else: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
412 return self._changectx.filenode(self._path) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
413 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
414 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
415 def _filerev(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
416 return self._filelog.rev(self._filenode) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
417 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
418 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
419 def _repopath(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
420 return self._path |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
421 |
3168
05c588e1803d
context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents:
3166
diff
changeset
|
422 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
|
423 try: |
7874
d812029cda85
cleanup: drop variables for unused return values
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7633
diff
changeset
|
424 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
|
425 return True |
7633 | 426 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
|
427 # 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
|
428 return False |
3168
05c588e1803d
context: add __nonzero__ methods
Matt Mackall <mpm@selenic.com>
parents:
3166
diff
changeset
|
429 |
3166
ebdb3f616bc0
Add str methods to contexts
Matt Mackall <mpm@selenic.com>
parents:
3165
diff
changeset
|
430 def __str__(self): |
ebdb3f616bc0
Add str methods to contexts
Matt Mackall <mpm@selenic.com>
parents:
3165
diff
changeset
|
431 return "%s@%s" % (self.path(), short(self.node())) |
ebdb3f616bc0
Add str methods to contexts
Matt Mackall <mpm@selenic.com>
parents:
3165
diff
changeset
|
432 |
3151
6719b3dd7d50
context: add __repr__ methods
Matt Mackall <mpm@selenic.com>
parents:
3150
diff
changeset
|
433 def __repr__(self): |
3216
d865390c1781
context: simplify repr methods
Matt Mackall <mpm@selenic.com>
parents:
3215
diff
changeset
|
434 return "<filectx %s>" % str(self) |
3151
6719b3dd7d50
context: add __repr__ methods
Matt Mackall <mpm@selenic.com>
parents:
3150
diff
changeset
|
435 |
6469
fb502719c75c
python 2.6 compatibility: add __hash__ to classes that have __eq__
Paul Moore <p.f.moore@gmail.com>
parents:
6286
diff
changeset
|
436 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
|
437 try: |
10942
6f26ce7ae175
filectx: _fileid isn't normalized, use _filenode instead
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10927
diff
changeset
|
438 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
|
439 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
|
440 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
|
441 |
3165
e78185746554
Add equality operators to changectx and filectx
Matt Mackall <mpm@selenic.com>
parents:
3152
diff
changeset
|
442 def __eq__(self, other): |
3715
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
443 try: |
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
444 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
|
445 and self._filenode == other._filenode) |
3715
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
446 except AttributeError: |
6cb3aca69cdc
Make context __eq__ handle arbitrary RHS values
Brendan Cully <brendan@kublai.com>
parents:
3712
diff
changeset
|
447 return False |
3165
e78185746554
Add equality operators to changectx and filectx
Matt Mackall <mpm@selenic.com>
parents:
3152
diff
changeset
|
448 |
4748
8808ea7da86b
merge: make test for fast-forward merge stricter (issue619)
Matt Mackall <mpm@selenic.com>
parents:
4663
diff
changeset
|
449 def __ne__(self, other): |
8808ea7da86b
merge: make test for fast-forward merge stricter (issue619)
Matt Mackall <mpm@selenic.com>
parents:
4663
diff
changeset
|
450 return not (self == other) |
8808ea7da86b
merge: make test for fast-forward merge stricter (issue619)
Matt Mackall <mpm@selenic.com>
parents:
4663
diff
changeset
|
451 |
3207
0790dce2f3a8
Add lookup method to filectx
Brendan Cully <brendan@kublai.com>
parents:
3172
diff
changeset
|
452 def filectx(self, fileid): |
0790dce2f3a8
Add lookup method to filectx
Brendan Cully <brendan@kublai.com>
parents:
3172
diff
changeset
|
453 '''opens an arbitrary revision of the file without |
0790dce2f3a8
Add lookup method to filectx
Brendan Cully <brendan@kublai.com>
parents:
3172
diff
changeset
|
454 opening a new filelog''' |
0790dce2f3a8
Add lookup method to filectx
Brendan Cully <brendan@kublai.com>
parents:
3172
diff
changeset
|
455 return filectx(self._repo, self._path, fileid=fileid, |
0790dce2f3a8
Add lookup method to filectx
Brendan Cully <brendan@kublai.com>
parents:
3172
diff
changeset
|
456 filelog=self._filelog) |
0790dce2f3a8
Add lookup method to filectx
Brendan Cully <brendan@kublai.com>
parents:
3172
diff
changeset
|
457 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
458 def filerev(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
459 return self._filerev |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
460 def filenode(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
461 return self._filenode |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
462 def flags(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
463 return self._changectx.flags(self._path) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
464 def filelog(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
465 return self._filelog |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
466 |
3150
a5e4c8172ace
filectx: lazy linkrev usage
Matt Mackall <mpm@selenic.com>
parents:
3149
diff
changeset
|
467 def rev(self): |
3336
e44eadc92ec4
context: check self.__dict__ instead of using hasattr
Brendan Cully <brendan@kublai.com>
parents:
3313
diff
changeset
|
468 if '_changectx' in self.__dict__: |
3150
a5e4c8172ace
filectx: lazy linkrev usage
Matt Mackall <mpm@selenic.com>
parents:
3149
diff
changeset
|
469 return self._changectx.rev() |
5810
124577de40a7
context: preserve changeset in filectx if we have one
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
470 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
|
471 return self._changectx.rev() |
7361
9fe97eea5510
linkrev: take a revision number rather than a hash
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
472 return self._filelog.linkrev(self._filerev) |
3150
a5e4c8172ace
filectx: lazy linkrev usage
Matt Mackall <mpm@selenic.com>
parents:
3149
diff
changeset
|
473 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
474 def linkrev(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
475 return self._filelog.linkrev(self._filerev) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
476 def node(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
477 return self._changectx.node() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
478 def hex(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
479 return hex(self.node()) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
480 def user(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
481 return self._changectx.user() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
482 def date(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
483 return self._changectx.date() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
484 def files(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
485 return self._changectx.files() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
486 def description(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
487 return self._changectx.description() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
488 def branch(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
489 return self._changectx.branch() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
490 def extra(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
491 return self._changectx.extra() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
492 def manifest(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
493 return self._changectx.manifest() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
494 def changectx(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
495 return self._changectx |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
496 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
497 def data(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
498 return self._filelog.read(self._filenode) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
499 def path(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
500 return self._path |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
501 def size(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
502 return self._filelog.size(self._filerev) |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
503 |
15738
e86dd8dfdea0
context: add isbinary function
Laurens Holst <laurens.hg@grauw.nl>
parents:
15707
diff
changeset
|
504 def isbinary(self): |
e86dd8dfdea0
context: add isbinary function
Laurens Holst <laurens.hg@grauw.nl>
parents:
15707
diff
changeset
|
505 try: |
e86dd8dfdea0
context: add isbinary function
Laurens Holst <laurens.hg@grauw.nl>
parents:
15707
diff
changeset
|
506 return util.binary(self.data()) |
e86dd8dfdea0
context: add isbinary function
Laurens Holst <laurens.hg@grauw.nl>
parents:
15707
diff
changeset
|
507 except IOError: |
e86dd8dfdea0
context: add isbinary function
Laurens Holst <laurens.hg@grauw.nl>
parents:
15707
diff
changeset
|
508 return False |
e86dd8dfdea0
context: add isbinary function
Laurens Holst <laurens.hg@grauw.nl>
parents:
15707
diff
changeset
|
509 |
11702
eb07fbc21e9c
filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11605
diff
changeset
|
510 def cmp(self, fctx): |
eb07fbc21e9c
filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11605
diff
changeset
|
511 """compare with other file context |
11539
a463e3c50212
cmp: document the fact that we return True if content is different
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11538
diff
changeset
|
512 |
11702
eb07fbc21e9c
filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11605
diff
changeset
|
513 returns True if different than fctx. |
11539
a463e3c50212
cmp: document the fact that we return True if content is different
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11538
diff
changeset
|
514 """ |
15848
012b285cf643
filectx: fix cmp() of file starting with '\1\n'
Yuya Nishihara <yuya@tcha.org>
parents:
15337
diff
changeset
|
515 if (fctx._filerev is None |
012b285cf643
filectx: fix cmp() of file starting with '\1\n'
Yuya Nishihara <yuya@tcha.org>
parents:
15337
diff
changeset
|
516 and (self._repo._encodefilterpats |
012b285cf643
filectx: fix cmp() of file starting with '\1\n'
Yuya Nishihara <yuya@tcha.org>
parents:
15337
diff
changeset
|
517 # if file data starts with '\1\n', empty metadata block is |
15872
a3e2b9a1f063
filectx: typo in comment
Christian Ebert <blacktrash@gmx.net>
parents:
15848
diff
changeset
|
518 # prepended, which adds 4 bytes to filelog.size(). |
15848
012b285cf643
filectx: fix cmp() of file starting with '\1\n'
Yuya Nishihara <yuya@tcha.org>
parents:
15337
diff
changeset
|
519 or self.size() - 4 == fctx.size()) |
12731
95514b58709d
context: narrow down filter special case in filectx.cmp()
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
520 or self.size() == fctx.size()): |
95514b58709d
context: narrow down filter special case in filectx.cmp()
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
521 return self._filelog.cmp(self._filenode, fctx.data()) |
12709
4147a292c508
filectx: use ctx.size comparisons to speed up ctx.cmp
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12361
diff
changeset
|
522 |
12731
95514b58709d
context: narrow down filter special case in filectx.cmp()
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
523 return True |
3310
0e370798eebf
context: add cmp for filectxs
Matt Mackall <mpm@selenic.com>
parents:
3302
diff
changeset
|
524 |
5811
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
525 def renamed(self): |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
526 """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
|
527 |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
528 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
|
529 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
|
530 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
|
531 """ |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
532 |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
533 renamed = self._filelog.renamed(self._filenode) |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
534 if not renamed: |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
535 return renamed |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
536 |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
537 if self.rev() == self.linkrev(): |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
538 return renamed |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
539 |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
540 name = self.path() |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
541 fnode = self._filenode |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
542 for p in self._changectx.parents(): |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
543 try: |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
544 if fnode == p.filenode(name): |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
545 return None |
7633 | 546 except error.LookupError: |
5811
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
547 pass |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
548 return renamed |
180a3eee4b75
Fix copies reporting in log and convert.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5810
diff
changeset
|
549 |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
550 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
|
551 p = self._path |
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
552 fl = self._filelog |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
553 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
|
554 |
5813
3ef279074c77
context: fix filectx.parents() bug introduced when editing 180a3eee4b75
Patrick Mezard <pmezard@gmail.com>
parents:
5811
diff
changeset
|
555 r = self._filelog.renamed(self._filenode) |
3122
da85145d4571
filectx: add rename traversal for parents()
Matt Mackall <mpm@selenic.com>
parents:
2859
diff
changeset
|
556 if r: |
3124
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
557 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
|
558 |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
559 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
|
560 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
|
561 |
13877
653121e6941f
filectx: introduce p1/p2 convenience methods
Matt Mackall <mpm@selenic.com>
parents:
13552
diff
changeset
|
562 def p1(self): |
653121e6941f
filectx: introduce p1/p2 convenience methods
Matt Mackall <mpm@selenic.com>
parents:
13552
diff
changeset
|
563 return self.parents()[0] |
653121e6941f
filectx: introduce p1/p2 convenience methods
Matt Mackall <mpm@selenic.com>
parents:
13552
diff
changeset
|
564 |
653121e6941f
filectx: introduce p1/p2 convenience methods
Matt Mackall <mpm@selenic.com>
parents:
13552
diff
changeset
|
565 def p2(self): |
653121e6941f
filectx: introduce p1/p2 convenience methods
Matt Mackall <mpm@selenic.com>
parents:
13552
diff
changeset
|
566 p = self.parents() |
653121e6941f
filectx: introduce p1/p2 convenience methods
Matt Mackall <mpm@selenic.com>
parents:
13552
diff
changeset
|
567 if len(p) == 2: |
653121e6941f
filectx: introduce p1/p2 convenience methods
Matt Mackall <mpm@selenic.com>
parents:
13552
diff
changeset
|
568 return p[1] |
653121e6941f
filectx: introduce p1/p2 convenience methods
Matt Mackall <mpm@selenic.com>
parents:
13552
diff
changeset
|
569 return filectx(self._repo, self._path, fileid=-1, filelog=self._filelog) |
653121e6941f
filectx: introduce p1/p2 convenience methods
Matt Mackall <mpm@selenic.com>
parents:
13552
diff
changeset
|
570 |
2563
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
571 def children(self): |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
572 # hard for renames |
482c524dd9ab
Add context.py: changeset and file revision contexts
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
573 c = self._filelog.children(self._filenode) |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
574 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
|
575 filelog=self._filelog) for x in c] |
2566
d8560b458f76
Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents:
2563
diff
changeset
|
576 |
15528
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
577 def annotate(self, follow=False, linenumber=None, diffopts=None): |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
578 '''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
|
579 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
|
580 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
|
581 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
|
582 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
|
583 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
|
584 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
|
585 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
|
586 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
|
587 if "linenumber" parameter is "False".''' |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
588 |
4856
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
589 def decorate_compat(text, rev): |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
590 return ([rev] * len(text.splitlines()), text) |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
591 |
4856
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
592 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
|
593 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
|
594 |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
595 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
|
596 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
|
597 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
|
598 |
e45c5120ca27
Allow filectx.annotate to return the line number of first appearance.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
4748
diff
changeset
|
599 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
|
600 (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
|
601 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
|
602 |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
603 def pair(parent, child): |
15528
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
604 blocks = mdiff.allblocks(parent[1], child[1], opts=diffopts, |
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
605 refine=True) |
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
606 for (a1, a2, b1, b2), t in blocks: |
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
607 # Changed blocks ('!') or blocks made only of blank lines ('~') |
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
608 # belong to the child. |
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
609 if t == '=': |
a84698badf0b
annotate: support diff whitespace filtering flags (issue3030)
Patrick Mezard <pmezard@gmail.com>
parents:
15453
diff
changeset
|
610 child[0][b1:b2] = parent[0][a1:a2] |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
611 return child |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
612 |
9097
431462bd8478
fix memory usage of revlog caches by limiting cache size [issue1639]
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
613 getlog = util.lrucachefunc(lambda x: self._repo.file(x)) |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
614 def getctx(path, fileid): |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
615 log = path == self._path and self._filelog or getlog(path) |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
616 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
|
617 getctx = util.lrucachefunc(getctx) |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
618 |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
619 def parents(f): |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
620 # we want to reuse filectx objects as much as possible |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
621 p = f._path |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
622 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
|
623 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
|
624 else: |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
625 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
|
626 |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
627 if follow: |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
628 r = f.renamed() |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
629 if r: |
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
630 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
|
631 |
3578
3b4e00cba57a
Define and use nullrev (revision of nullid) instead of -1.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3454
diff
changeset
|
632 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
|
633 |
3404
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
634 # 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
|
635 if self.rev() != self.linkrev(): |
3404
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
636 base = self.filectx(self.filerev()) |
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
637 else: |
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
638 base = self |
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
639 |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
640 # This algorithm would prefer to be recursive, but Python is a |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
641 # bit recursion-hostile. Instead we do an iterative |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
642 # depth-first search. |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
643 |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
644 visit = [base] |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
645 hist = {} |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
646 pcache = {} |
3404
1a437b0f4902
Fix annotate where linkrev != rev without exporting linkrev
Brendan Cully <brendan@kublai.com>
parents:
3403
diff
changeset
|
647 needed = {base: 1} |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
648 while visit: |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
649 f = visit[-1] |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
650 if f not in pcache: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
651 pcache[f] = parents(f) |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
652 |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
653 ready = True |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
654 pl = pcache[f] |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
655 for p in pl: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
656 if p not in hist: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
657 ready = False |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
658 visit.append(p) |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
659 needed[p] = needed.get(p, 0) + 1 |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
660 if ready: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
661 visit.pop() |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
662 curr = decorate(f.data(), f) |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
663 for p in pl: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
664 curr = pair(hist[p], curr) |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
665 if needed[p] == 1: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
666 del hist[p] |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
667 else: |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
668 needed[p] -= 1 |
6762 | 669 |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
670 hist[f] = curr |
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
671 pcache[f] = [] |
3172
5c93dd0ae413
Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents:
3152
diff
changeset
|
672 |
13552
7ab85fec60c3
ancestor: rewrite to deal with crossed linkrevs (issue2682)
Matt Mackall <mpm@selenic.com>
parents:
13481
diff
changeset
|
673 return zip(hist[base][0], hist[base][1].splitlines(True)) |
3124
4d021b91cb26
filectx: allow passing filelog in init to avoid opening new filelogs
Matt Mackall <mpm@selenic.com>
parents:
3123
diff
changeset
|
674 |
16599
4b73f4ba27ca
filectx: make ancestor require actx
Matt Mackall <mpm@selenic.com>
parents:
16491
diff
changeset
|
675 def ancestor(self, fc2, actx): |
3126
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
676 """ |
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
677 find the common ancestor file context, if any, of self, and fc2 |
11453
2ee26044d846
context: allow passing the common cset ancestor to fctx.ancestor
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11303
diff
changeset
|
678 |
16599
4b73f4ba27ca
filectx: make ancestor require actx
Matt Mackall <mpm@selenic.com>
parents:
16491
diff
changeset
|
679 actx must be the changectx of the common ancestor |
11453
2ee26044d846
context: allow passing the common cset ancestor to fctx.ancestor
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11303
diff
changeset
|
680 of self's and fc2's respective changesets. |
3126
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
681 """ |
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
682 |
9751
f8ca4035a949
filectx: shortcut unrelated files in ancestor() (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9750
diff
changeset
|
683 # the easy case: no (relevant) renames |
f8ca4035a949
filectx: shortcut unrelated files in ancestor() (issue1327)
Matt Mackall <mpm@selenic.com>
parents:
9750
diff
changeset
|
684 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
|
685 return actx[self.path()] |
16601
0c98820be15c
filectx: handle some other simple cases for finding merge ancestor
Matt Mackall <mpm@selenic.com>
parents:
16599
diff
changeset
|
686 |
0c98820be15c
filectx: handle some other simple cases for finding merge ancestor
Matt Mackall <mpm@selenic.com>
parents:
16599
diff
changeset
|
687 # the next easiest cases: unambiguous predecessor (name trumps |
0c98820be15c
filectx: handle some other simple cases for finding merge ancestor
Matt Mackall <mpm@selenic.com>
parents:
16599
diff
changeset
|
688 # history) |
0c98820be15c
filectx: handle some other simple cases for finding merge ancestor
Matt Mackall <mpm@selenic.com>
parents:
16599
diff
changeset
|
689 if self.path() in actx and fc2.path() not in actx: |
0c98820be15c
filectx: handle some other simple cases for finding merge ancestor
Matt Mackall <mpm@selenic.com>
parents:
16599
diff
changeset
|
690 return actx[self.path()] |
0c98820be15c
filectx: handle some other simple cases for finding merge ancestor
Matt Mackall <mpm@selenic.com>
parents:
16599
diff
changeset
|
691 if fc2.path() in actx and self.path() not in actx: |
0c98820be15c
filectx: handle some other simple cases for finding merge ancestor
Matt Mackall <mpm@selenic.com>
parents:
16599
diff
changeset
|
692 return actx[fc2.path()] |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
693 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
694 # prime the ancestor cache for the working directory |
16601
0c98820be15c
filectx: handle some other simple cases for finding merge ancestor
Matt Mackall <mpm@selenic.com>
parents:
16599
diff
changeset
|
695 acache = {} |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
696 for c in (self, fc2): |
8527
f9a80054dd3c
use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents:
8413
diff
changeset
|
697 if c._filerev is None: |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
698 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
|
699 acache[(c._path, None)] = pl |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
700 |
6286
90a4329a6b4a
filectx.ancestor: use fctx._repopath to cache filelogs (issue1035)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6228
diff
changeset
|
701 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
|
702 def parents(vertex): |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
703 if vertex in acache: |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
704 return acache[vertex] |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
705 f, n = vertex |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
706 if f not in flcache: |
3126
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
707 flcache[f] = self._repo.file(f) |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
708 fl = flcache[f] |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
709 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
|
710 re = fl.renamed(n) |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
711 if re: |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
712 pl.append(re) |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
713 acache[vertex] = pl |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
714 return pl |
3126
4bf2e895cf86
filectx: add rename-aware ancestor algorithm
Matt Mackall <mpm@selenic.com>
parents:
3125
diff
changeset
|
715 |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
716 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
|
717 v = ancestor.ancestor(a, b, parents) |
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
718 if v: |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
719 f, n = v |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
720 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
|
721 |
3135
b1db258e875c
Abstract ancestor algorithm into generic function
Matt Mackall <mpm@selenic.com>
parents:
3134
diff
changeset
|
722 return None |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
723 |
16185
352053e6cd8e
context: add followfirst arg to filectx and workingfilectx
Patrick Mezard <patrick@mezard.eu>
parents:
16151
diff
changeset
|
724 def ancestors(self, followfirst=False): |
13481
4eb1e9d6a7c9
context: be even more careful about result order in ancestors() (issue2642)
Matt Mackall <mpm@selenic.com>
parents:
13476
diff
changeset
|
725 visit = {} |
4eb1e9d6a7c9
context: be even more careful about result order in ancestors() (issue2642)
Matt Mackall <mpm@selenic.com>
parents:
13476
diff
changeset
|
726 c = self |
16185
352053e6cd8e
context: add followfirst arg to filectx and workingfilectx
Patrick Mezard <patrick@mezard.eu>
parents:
16151
diff
changeset
|
727 cut = followfirst and 1 or None |
13481
4eb1e9d6a7c9
context: be even more careful about result order in ancestors() (issue2642)
Matt Mackall <mpm@selenic.com>
parents:
13476
diff
changeset
|
728 while True: |
16185
352053e6cd8e
context: add followfirst arg to filectx and workingfilectx
Patrick Mezard <patrick@mezard.eu>
parents:
16151
diff
changeset
|
729 for parent in c.parents()[:cut]: |
13481
4eb1e9d6a7c9
context: be even more careful about result order in ancestors() (issue2642)
Matt Mackall <mpm@selenic.com>
parents:
13476
diff
changeset
|
730 visit[(parent.rev(), parent.node())] = parent |
4eb1e9d6a7c9
context: be even more careful about result order in ancestors() (issue2642)
Matt Mackall <mpm@selenic.com>
parents:
13476
diff
changeset
|
731 if not visit: |
4eb1e9d6a7c9
context: be even more careful about result order in ancestors() (issue2642)
Matt Mackall <mpm@selenic.com>
parents:
13476
diff
changeset
|
732 break |
4eb1e9d6a7c9
context: be even more careful about result order in ancestors() (issue2642)
Matt Mackall <mpm@selenic.com>
parents:
13476
diff
changeset
|
733 c = visit.pop(max(visit)) |
4eb1e9d6a7c9
context: be even more careful about result order in ancestors() (issue2642)
Matt Mackall <mpm@selenic.com>
parents:
13476
diff
changeset
|
734 yield c |
10262
eb243551cbd8
copies: speed up copy detection
Matt Mackall <mpm@selenic.com>
parents:
9843
diff
changeset
|
735 |
16602
80aef0bc5ba7
context: add copies method with caching
Matt Mackall <mpm@selenic.com>
parents:
16601
diff
changeset
|
736 def copies(self, c2): |
16610
f1745323a567
context: fix call to util.safehasattr
Idan Kamara <idankk86@gmail.com>
parents:
16602
diff
changeset
|
737 if not util.safehasattr(self, "_copycache"): |
16602
80aef0bc5ba7
context: add copies method with caching
Matt Mackall <mpm@selenic.com>
parents:
16601
diff
changeset
|
738 self._copycache = {} |
80aef0bc5ba7
context: add copies method with caching
Matt Mackall <mpm@selenic.com>
parents:
16601
diff
changeset
|
739 sc2 = str(c2) |
80aef0bc5ba7
context: add copies method with caching
Matt Mackall <mpm@selenic.com>
parents:
16601
diff
changeset
|
740 if sc2 not in self._copycache: |
80aef0bc5ba7
context: add copies method with caching
Matt Mackall <mpm@selenic.com>
parents:
16601
diff
changeset
|
741 self._copycache[sc2] = copies.pathcopies(c2) |
80aef0bc5ba7
context: add copies method with caching
Matt Mackall <mpm@selenic.com>
parents:
16601
diff
changeset
|
742 return self._copycache[sc2] |
80aef0bc5ba7
context: add copies method with caching
Matt Mackall <mpm@selenic.com>
parents:
16601
diff
changeset
|
743 |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
744 class workingctx(changectx): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
745 """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
|
746 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
|
747 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
|
748 user - username string, or None. |
6708
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
749 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
|
750 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
|
751 or None to use the repository status. |
6705
fec6bc978843
context: let workingctx parents be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6685
diff
changeset
|
752 """ |
10969
ca052b484e56
context: remove parents parameter to workingctx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10942
diff
changeset
|
753 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
|
754 changes=None): |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
755 self._repo = repo |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
756 self._rev = None |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
757 self._node = None |
6709
f84f507c53d3
context: let workingctx.date(), .user() and description() be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6708
diff
changeset
|
758 self._text = text |
6718
4386a7706828
Fix commit date (issue1193)
Christian Ebert <blacktrash@gmx.net>
parents:
6715
diff
changeset
|
759 if date: |
6709
f84f507c53d3
context: let workingctx.date(), .user() and description() be overriden
Patrick Mezard <pmezard@gmail.com>
parents:
6708
diff
changeset
|
760 self._date = util.parsedate(date) |
6817 | 761 if user: |
762 self._user = user | |
6707
02bad34230a2
localrepo: hide commit() file selection behind workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6705
diff
changeset
|
763 if changes: |
11101
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
764 self._status = list(changes[:4]) |
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
765 self._unknown = changes[4] |
11099
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
766 self._ignored = changes[5] |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
767 self._clean = changes[6] |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
768 else: |
11101
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
769 self._unknown = None |
11099
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
770 self._ignored = None |
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
771 self._clean = None |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
772 |
6708
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
773 self._extra = {} |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
774 if extra: |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
775 self._extra = extra.copy() |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
776 if 'branch' not in self._extra: |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
777 try: |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
13031
diff
changeset
|
778 branch = encoding.fromlocal(self._repo.dirstate.branch()) |
6708
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
779 except UnicodeDecodeError: |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
780 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
|
781 self._extra['branch'] = branch |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
782 if self._extra['branch'] == '': |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
783 self._extra['branch'] = 'default' |
7566f00a3979
localrepo: let commit() get extra data from workingctx
Patrick Mezard <pmezard@gmail.com>
parents:
6707
diff
changeset
|
784 |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
785 def __str__(self): |
3313
6c68bc1e7873
context: change workingctx str() from . to <node>+
Matt Mackall <mpm@selenic.com>
parents:
3310
diff
changeset
|
786 return str(self._parents[0]) + "+" |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
787 |
12947
4832717aed98
context: add __repr__ methods to workingfilectx and workingctx
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12731
diff
changeset
|
788 def __repr__(self): |
4832717aed98
context: add __repr__ methods to workingfilectx and workingctx
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12731
diff
changeset
|
789 return "<workingctx %s>" % str(self) |
4832717aed98
context: add __repr__ methods to workingfilectx and workingctx
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12731
diff
changeset
|
790 |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
791 def __nonzero__(self): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
792 return True |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
793 |
6771
f5d7cfcbb4d3
workingctx: add __contains__ method
Matt Mackall <mpm@selenic.com>
parents:
6764
diff
changeset
|
794 def __contains__(self, key): |
8061
26316dda374f
context: fix workingctx.__contains__
Patrick Mezard <pmezard@gmail.com>
parents:
7633
diff
changeset
|
795 return self._repo.dirstate[key] not in "?r" |
6771
f5d7cfcbb4d3
workingctx: add __contains__ method
Matt Mackall <mpm@selenic.com>
parents:
6764
diff
changeset
|
796 |
15337
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
797 def _buildflagfunc(self): |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
798 # Create a fallback function for getting file flags when the |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
799 # filesystem doesn't support them |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
800 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
801 copiesget = self._repo.dirstate.copies().get |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
802 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
803 if len(self._parents) < 2: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
804 # when we have one parent, it's easy: copy from parent |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
805 man = self._parents[0].manifest() |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
806 def func(f): |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
807 f = copiesget(f, f) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
808 return man.flags(f) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
809 else: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
810 # merges are tricky: we try to reconstruct the unstored |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
811 # result from the merge (issue1802) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
812 p1, p2 = self._parents |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
813 pa = p1.ancestor(p2) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
814 m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest() |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
815 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
816 def func(f): |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
817 f = copiesget(f, f) # may be wrong for merges with copies |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
818 fl1, fl2, fla = m1.flags(f), m2.flags(f), ma.flags(f) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
819 if fl1 == fl2: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
820 return fl1 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
821 if fl1 == fla: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
822 return fl2 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
823 if fl2 == fla: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
824 return fl1 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
825 return '' # punt for conflicts |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
826 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
827 return func |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
828 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
829 @propertycache |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
830 def _flagfunc(self): |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
831 return self._repo.dirstate.flagfunc(self._buildflagfunc) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
832 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
833 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
834 def _manifest(self): |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
835 """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
|
836 |
3218
8d4855fd9d7b
merge: use new working context object in update
Matt Mackall <mpm@selenic.com>
parents:
3217
diff
changeset
|
837 man = self._parents[0].manifest().copy() |
10921
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
838 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
|
839 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
|
840 def getman(f): |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
841 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
|
842 return man |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
843 return man2 |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
844 else: |
fb89cd21a7a0
workingctx: correctly compute the flag for noexec filesystems+merge
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
845 getman = lambda f: man |
15337
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
846 |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
847 copied = self._repo.dirstate.copies() |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
848 ff = self._flagfunc |
11101
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
849 modified, added, removed, deleted = self._status |
16094
0776a6cababe
merge: don't use unknown()
Matt Mackall <mpm@selenic.com>
parents:
15912
diff
changeset
|
850 for i, l in (("a", added), ("m", modified)): |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
851 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
|
852 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
|
853 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
|
854 try: |
6743 | 855 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
|
856 except OSError: |
676b75547d13
context: don't spuriously raise abort when a file goes missing.
Matt Mackall <mpm@selenic.com>
parents:
3715
diff
changeset
|
857 pass |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
858 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
859 for f in deleted + removed: |
3325
50a18815e3f0
Revert changeset c67920d78248.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents:
3313
diff
changeset
|
860 if f in man: |
50a18815e3f0
Revert changeset c67920d78248.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents:
3313
diff
changeset
|
861 del man[f] |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
862 |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
863 return man |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
864 |
14129
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
865 def __iter__(self): |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
866 d = self._repo.dirstate |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
867 for f in d: |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
868 if d[f] != 'r': |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
869 yield f |
81e6d42b3228
context: provide an efficient iterator for workingctx
Matt Mackall <mpm@selenic.com>
parents:
14004
diff
changeset
|
870 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
871 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
872 def _status(self): |
11101
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
873 return self._repo.status()[:4] |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
874 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
875 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
876 def _user(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
877 return self._repo.ui.username() |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
878 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
879 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
880 def _date(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
881 return util.makedate() |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
882 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
883 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
884 def _parents(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
885 p = self._repo.dirstate.parents() |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
886 if p[1] == nullid: |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
887 p = p[:-1] |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
888 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
|
889 return self._parents |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
890 |
11098
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
891 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
|
892 """Explicit status query |
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
893 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
|
894 _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
|
895 arguments.""" |
11099
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
896 stat = self._repo.status(ignored=ignored, clean=clean, unknown=unknown) |
11101
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
897 self._unknown = self._ignored = self._clean = None |
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
898 if unknown: |
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
899 self._unknown = stat[4] |
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
900 if ignored: |
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
901 self._ignored = stat[5] |
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
902 if clean: |
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
903 self._clean = stat[6] |
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
904 self._status = stat[:4] |
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
905 return stat |
11098
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
906 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
907 def manifest(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
908 return self._manifest |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
909 def user(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
910 return self._user or self._repo.ui.username() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
911 def date(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
912 return self._date |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
913 def description(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
914 return self._text |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
915 def files(self): |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8207
diff
changeset
|
916 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
|
917 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
918 def modified(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
919 return self._status[0] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
920 def added(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
921 return self._status[1] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
922 def removed(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
923 return self._status[2] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
924 def deleted(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
925 return self._status[3] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
926 def unknown(self): |
11101
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
927 assert self._unknown is not None # must call status first |
502474839293
context: only scan unknowns when needed
Matt Mackall <mpm@selenic.com>
parents:
11100
diff
changeset
|
928 return self._unknown |
11098
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
929 def ignored(self): |
11100
83968ae4aaf2
context: use asserts for ignored and clean exceptions
Matt Mackall <mpm@selenic.com>
parents:
11099
diff
changeset
|
930 assert self._ignored is not None # must call status first |
11099
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
931 return self._ignored |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
932 def clean(self): |
11100
83968ae4aaf2
context: use asserts for ignored and clean exceptions
Matt Mackall <mpm@selenic.com>
parents:
11099
diff
changeset
|
933 assert self._clean is not None # must call status first |
11099
a68bd3b7c040
workingctx: use member variables to store ignored and clean
Steve Borho <steve@borho.org>
parents:
11098
diff
changeset
|
934 return self._clean |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
935 def branch(self): |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
13031
diff
changeset
|
936 return encoding.tolocal(self._extra['branch']) |
16720
e825a89de5d7
context: add changectx.closesbranch() method
Brodie Rao <brodie@sf.io>
parents:
16719
diff
changeset
|
937 def closesbranch(self): |
e825a89de5d7
context: add changectx.closesbranch() method
Brodie Rao <brodie@sf.io>
parents:
16719
diff
changeset
|
938 return 'close' in self._extra |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
939 def extra(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
940 return self._extra |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
941 |
4663 | 942 def tags(self): |
943 t = [] | |
13412
58c497d0e44d
remove unnecessary list comprehensions
Martin Geisler <mg@aragost.com>
parents:
13384
diff
changeset
|
944 for p in self.parents(): |
58c497d0e44d
remove unnecessary list comprehensions
Martin Geisler <mg@aragost.com>
parents:
13384
diff
changeset
|
945 t.extend(p.tags()) |
4663 | 946 return t |
947 | |
13476
b85a09f368bd
workingctx: overload bookmarks() to return parents' bookmarks
Kevin Bullock <kbullock@ringworld.org>
parents:
13468
diff
changeset
|
948 def bookmarks(self): |
b85a09f368bd
workingctx: overload bookmarks() to return parents' bookmarks
Kevin Bullock <kbullock@ringworld.org>
parents:
13468
diff
changeset
|
949 b = [] |
b85a09f368bd
workingctx: overload bookmarks() to return parents' bookmarks
Kevin Bullock <kbullock@ringworld.org>
parents:
13468
diff
changeset
|
950 for p in self.parents(): |
b85a09f368bd
workingctx: overload bookmarks() to return parents' bookmarks
Kevin Bullock <kbullock@ringworld.org>
parents:
13468
diff
changeset
|
951 b.extend(p.bookmarks()) |
b85a09f368bd
workingctx: overload bookmarks() to return parents' bookmarks
Kevin Bullock <kbullock@ringworld.org>
parents:
13468
diff
changeset
|
952 return b |
b85a09f368bd
workingctx: overload bookmarks() to return parents' bookmarks
Kevin Bullock <kbullock@ringworld.org>
parents:
13468
diff
changeset
|
953 |
15707
dc3eefe0c80e
phases: implement ``phase()`` and ``hidden()`` method for workingctx
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15703
diff
changeset
|
954 def phase(self): |
15818
57241845a4bb
phases: store phase values in constant instead of using raw integer
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15738
diff
changeset
|
955 phase = phases.draft # default phase to draft |
15707
dc3eefe0c80e
phases: implement ``phase()`` and ``hidden()`` method for workingctx
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15703
diff
changeset
|
956 for p in self.parents(): |
dc3eefe0c80e
phases: implement ``phase()`` and ``hidden()`` method for workingctx
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15703
diff
changeset
|
957 phase = max(phase, p.phase()) |
dc3eefe0c80e
phases: implement ``phase()`` and ``hidden()`` method for workingctx
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15703
diff
changeset
|
958 return phase |
dc3eefe0c80e
phases: implement ``phase()`` and ``hidden()`` method for workingctx
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15703
diff
changeset
|
959 |
dc3eefe0c80e
phases: implement ``phase()`` and ``hidden()`` method for workingctx
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15703
diff
changeset
|
960 def hidden(self): |
dc3eefe0c80e
phases: implement ``phase()`` and ``hidden()`` method for workingctx
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15703
diff
changeset
|
961 return False |
dc3eefe0c80e
phases: implement ``phase()`` and ``hidden()`` method for workingctx
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15703
diff
changeset
|
962 |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
963 def children(self): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
964 return [] |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
965 |
6743 | 966 def flags(self, path): |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
967 if '_manifest' in self.__dict__: |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
968 try: |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
969 return self._manifest.flags(path) |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
970 except KeyError: |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
971 return '' |
5760
0145f9afb0e7
Removed tabs and trailing whitespace in python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5558
diff
changeset
|
972 |
15337
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
973 try: |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
974 return self._flagfunc(path) |
cf5f9df6406b
windows: recompute flags when committing a merge (issue1802)
Matt Mackall <mpm@selenic.com>
parents:
14674
diff
changeset
|
975 except OSError: |
5389
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
976 return '' |
26c060922085
context: add fileflags() to avoid rebuilding manifests
Patrick Mezard <pmezard@gmail.com>
parents:
4909
diff
changeset
|
977 |
3966
b4eaa68dea1b
context: create a filectxt with filelog reuse
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3965
diff
changeset
|
978 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
|
979 """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
|
980 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
|
981 filelog=filelog) |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
982 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
983 def ancestor(self, c2): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
984 """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
|
985 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
|
986 |
6764 | 987 def walk(self, match): |
10176
24ce8f0c0a39
dirstate: don't check state of subrepo directories
Augie Fackler <durin42@gmail.com>
parents:
9974
diff
changeset
|
988 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
|
989 True, False)) |
6764 | 990 |
16491
bfe89d65d651
update: make --check abort with dirty subrepos
Patrick Mezard <patrick@mezard.eu>
parents:
16410
diff
changeset
|
991 def dirty(self, missing=False, merge=True, branch=True): |
8717
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
992 "check whether a working directory is modified" |
11110
22f5ad0b5857
subrepo: dirtiness checks should iterate over subrepos
Edouard Gomez <ed.gomez@free.fr>
parents:
11106
diff
changeset
|
993 # check subrepos first |
22f5ad0b5857
subrepo: dirtiness checks should iterate over subrepos
Edouard Gomez <ed.gomez@free.fr>
parents:
11106
diff
changeset
|
994 for s in self.substate: |
22f5ad0b5857
subrepo: dirtiness checks should iterate over subrepos
Edouard Gomez <ed.gomez@free.fr>
parents:
11106
diff
changeset
|
995 if self.sub(s).dirty(): |
22f5ad0b5857
subrepo: dirtiness checks should iterate over subrepos
Edouard Gomez <ed.gomez@free.fr>
parents:
11106
diff
changeset
|
996 return True |
22f5ad0b5857
subrepo: dirtiness checks should iterate over subrepos
Edouard Gomez <ed.gomez@free.fr>
parents:
11106
diff
changeset
|
997 # check current working dir |
16491
bfe89d65d651
update: make --check abort with dirty subrepos
Patrick Mezard <patrick@mezard.eu>
parents:
16410
diff
changeset
|
998 return ((merge and self.p2()) or |
bfe89d65d651
update: make --check abort with dirty subrepos
Patrick Mezard <patrick@mezard.eu>
parents:
16410
diff
changeset
|
999 (branch and self.branch() != self.p1().branch()) or |
8717
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
1000 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
|
1001 (missing and self.deleted())) |
e8de59577257
context: add a dirty method to detect modified contexts
Matt Mackall <mpm@selenic.com>
parents:
8528
diff
changeset
|
1002 |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1003 def add(self, list, prefix=""): |
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1004 join = lambda f: os.path.join(prefix, f) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1005 wlock = self._repo.wlock() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1006 ui, ds = self._repo.ui, self._repo.dirstate |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1007 try: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1008 rejected = [] |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1009 for f in list: |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
13877
diff
changeset
|
1010 scmutil.checkportable(ui, join(f)) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1011 p = self._repo.wjoin(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1012 try: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1013 st = os.lstat(p) |
14004
97ed99d1f419
eliminate various naked except clauses
Idan Kamara <idankk86@gmail.com>
parents:
13962
diff
changeset
|
1014 except OSError: |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1015 ui.warn(_("%s does not exist!\n") % join(f)) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1016 rejected.append(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1017 continue |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1018 if st.st_size > 10000000: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1019 ui.warn(_("%s: up to %d MB of RAM may be required " |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1020 "to manage this file\n" |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1021 "(use 'hg revert %s' to cancel the " |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1022 "pending addition)\n") |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1023 % (f, 3 * st.st_size // 1000000, join(f))) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1024 if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)): |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1025 ui.warn(_("%s not added: only files and symlinks " |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1026 "supported currently\n") % join(f)) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1027 rejected.append(p) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1028 elif ds[f] in 'amn': |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1029 ui.warn(_("%s already tracked!\n") % join(f)) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1030 elif ds[f] == 'r': |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1031 ds.normallookup(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1032 else: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1033 ds.add(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1034 return rejected |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1035 finally: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1036 wlock.release() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1037 |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1038 def forget(self, files, prefix=""): |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1039 join = lambda f: os.path.join(prefix, f) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1040 wlock = self._repo.wlock() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1041 try: |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1042 rejected = [] |
14435
5f6090e559fa
context: make forget work like commands.forget
Matt Mackall <mpm@selenic.com>
parents:
14434
diff
changeset
|
1043 for f in files: |
16111
131d1a09108a
context: make workingctx.forget() really warn about untracked files
Patrick Mezard <patrick@mezard.eu>
parents:
15912
diff
changeset
|
1044 if f not in self._repo.dirstate: |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1045 self._repo.ui.warn(_("%s not tracked!\n") % join(f)) |
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1046 rejected.append(f) |
16111
131d1a09108a
context: make workingctx.forget() really warn about untracked files
Patrick Mezard <patrick@mezard.eu>
parents:
15912
diff
changeset
|
1047 elif self._repo.dirstate[f] != 'a': |
131d1a09108a
context: make workingctx.forget() really warn about untracked files
Patrick Mezard <patrick@mezard.eu>
parents:
15912
diff
changeset
|
1048 self._repo.dirstate.remove(f) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1049 else: |
14434
cc8c09855d19
dirstate: rename forget to drop
Matt Mackall <mpm@selenic.com>
parents:
14429
diff
changeset
|
1050 self._repo.dirstate.drop(f) |
15912
2bd54ffaa27e
forget: fix subrepo recursion for explicit path handling
David M. Carr <david@carrclan.us>
parents:
15895
diff
changeset
|
1051 return rejected |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1052 finally: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1053 wlock.release() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1054 |
16410
80b3d574881f
context: revert workingctx.ancestors() followfirst option
Patrick Mezard <patrick@mezard.eu>
parents:
16377
diff
changeset
|
1055 def ancestors(self): |
12999
acd69df118ab
context: walk both parents for workingctx.ancestors()
Matt Mackall <mpm@selenic.com>
parents:
12731
diff
changeset
|
1056 for a in self._repo.changelog.ancestors( |
16866
91f3ac205816
revlog: ancestors(*revs) becomes ancestors(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents:
16761
diff
changeset
|
1057 [p.rev() for p in self._parents]): |
12999
acd69df118ab
context: walk both parents for workingctx.ancestors()
Matt Mackall <mpm@selenic.com>
parents:
12731
diff
changeset
|
1058 yield changectx(self._repo, a) |
acd69df118ab
context: walk both parents for workingctx.ancestors()
Matt Mackall <mpm@selenic.com>
parents:
12731
diff
changeset
|
1059 |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1060 def undelete(self, list): |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1061 pctxs = self.parents() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1062 wlock = self._repo.wlock() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1063 try: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1064 for f in list: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1065 if self._repo.dirstate[f] != 'r': |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1066 self._repo.ui.warn(_("%s not removed!\n") % f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1067 else: |
12360
4ae3e5dffa60
context: fix filectx.undelete() (issue2388)
Patrick Mezard <pmezard@gmail.com>
parents:
12344
diff
changeset
|
1068 fctx = f in pctxs[0] and pctxs[0][f] or pctxs[1][f] |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1069 t = fctx.data() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1070 self._repo.wwrite(f, t, fctx.flags()) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1071 self._repo.dirstate.normal(f) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1072 finally: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1073 wlock.release() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1074 |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1075 def copy(self, source, dest): |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1076 p = self._repo.wjoin(dest) |
12344
b6173aee4a47
Use lexists() instead of exists() where appropriate
Patrick Mezard <pmezard@gmail.com>
parents:
12067
diff
changeset
|
1077 if not os.path.lexists(p): |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1078 self._repo.ui.warn(_("%s does not exist!\n") % dest) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1079 elif not (os.path.isfile(p) or os.path.islink(p)): |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1080 self._repo.ui.warn(_("copy failed: %s is not a file or a " |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1081 "symbolic link\n") % dest) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1082 else: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1083 wlock = self._repo.wlock() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1084 try: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1085 if self._repo.dirstate[dest] in '?r': |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1086 self._repo.dirstate.add(dest) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1087 self._repo.dirstate.copy(source, dest) |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1088 finally: |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1089 wlock.release() |
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11151
diff
changeset
|
1090 |
16143
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
1091 def dirs(self): |
17055
8b7cd9a998f0
copies: re-include root directory in directory rename detection (issue3511)
Matt Mackall <mpm@selenic.com>
parents:
16867
diff
changeset
|
1092 return set(self._repo.dirstate.dirs()) |
16143
fceb2964fa6c
context: add 'dirs()' to changectx/workingctx for directory patterns
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16111
diff
changeset
|
1093 |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1094 class workingfilectx(filectx): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1095 """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
|
1096 file in the working directory convenient.""" |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1097 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
|
1098 """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
|
1099 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
|
1100 self._repo = repo |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1101 self._path = path |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1102 self._changeid = None |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1103 self._filerev = self._filenode = None |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1104 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1105 if filelog: |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1106 self._filelog = filelog |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1107 if workingctx: |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1108 self._changectx = workingctx |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1109 |
8157
77c5877a668c
context: use Python 2.4 decorator syntax
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
1110 @propertycache |
7368
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1111 def _changectx(self): |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1112 return workingctx(self._repo) |
595ba2537d4f
context: use descriptors to speed up lazy attributes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7367
diff
changeset
|
1113 |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1114 def __nonzero__(self): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1115 return True |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1116 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1117 def __str__(self): |
3313
6c68bc1e7873
context: change workingctx str() from . to <node>+
Matt Mackall <mpm@selenic.com>
parents:
3310
diff
changeset
|
1118 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
|
1119 |
12947
4832717aed98
context: add __repr__ methods to workingfilectx and workingctx
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12731
diff
changeset
|
1120 def __repr__(self): |
4832717aed98
context: add __repr__ methods to workingfilectx and workingctx
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12731
diff
changeset
|
1121 return "<workingfilectx %s>" % str(self) |
4832717aed98
context: add __repr__ methods to workingfilectx and workingctx
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12731
diff
changeset
|
1122 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1123 def data(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1124 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
|
1125 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
|
1126 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
|
1127 if not rp: |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1128 return None |
3965
2e5161335e65
context: fix a bug in workingfilectx.renamed
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3964
diff
changeset
|
1129 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
|
1130 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1131 def parents(self): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1132 '''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
|
1133 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
|
1134 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
|
1135 |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1136 path = self._path |
3217
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1137 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
|
1138 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
|
1139 renamed = self.renamed() |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1140 |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1141 if renamed: |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1142 pl = [renamed + (None,)] |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1143 else: |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1144 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
|
1145 |
4ddffb793d18
workingfilectx: always use the same filelog, even for renames
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8527
diff
changeset
|
1146 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
|
1147 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
|
1148 |
3673
eb0b4a2d70a9
white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3578
diff
changeset
|
1149 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
|
1150 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
|
1151 |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1152 def children(self): |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1153 return [] |
6d98149d70fe
contexts: add working dir and working file contexts
Matt Mackall <mpm@selenic.com>
parents:
3216
diff
changeset
|
1154 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1155 def size(self): |
11605
ce95d8b87d22
context: use os.lstat instead of os.stat to fetch file size
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11539
diff
changeset
|
1156 return os.lstat(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
|
1157 def date(self): |
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
1158 t, tz = self._changectx.date() |
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
1159 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
|
1160 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
|
1161 except OSError, err: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1162 if err.errno != errno.ENOENT: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1163 raise |
3962
2b8825c94c5a
add date attribute to workingfilectx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3961
diff
changeset
|
1164 return (t, tz) |
3310
0e370798eebf
context: add cmp for filectxs
Matt Mackall <mpm@selenic.com>
parents:
3302
diff
changeset
|
1165 |
11702
eb07fbc21e9c
filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11605
diff
changeset
|
1166 def cmp(self, fctx): |
eb07fbc21e9c
filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11605
diff
changeset
|
1167 """compare with other file context |
11539
a463e3c50212
cmp: document the fact that we return True if content is different
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11538
diff
changeset
|
1168 |
11702
eb07fbc21e9c
filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11605
diff
changeset
|
1169 returns True if different than fctx. |
11539
a463e3c50212
cmp: document the fact that we return True if content is different
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11538
diff
changeset
|
1170 """ |
11703
55a2af02e45c
context: reuse filecontext.cmp in workingfilecontext.cmp
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11702
diff
changeset
|
1171 # fctx should be a filectx (not a wfctx) |
55a2af02e45c
context: reuse filecontext.cmp in workingfilecontext.cmp
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11702
diff
changeset
|
1172 # invert comparison to reuse the same code path |
55a2af02e45c
context: reuse filecontext.cmp in workingfilecontext.cmp
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11702
diff
changeset
|
1173 return fctx.cmp(self) |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1174 |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1175 class memctx(object): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1176 """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
|
1177 |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1178 Revision information is supplied at initialization time while |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1179 related files data and is made available through a callback |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1180 mechanism. 'repo' is the current localrepo, 'parents' is a |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1181 sequence of two parent revisions identifiers (pass None for every |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1182 missing parent), 'text' is the commit message and 'files' lists |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1183 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
|
1184 repository root). |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1185 |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1186 filectxfn(repo, memctx, path) is a callable receiving the |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1187 repository, the current memctx object and the normalized path of |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1188 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
|
1189 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
|
1190 undefined. If the file is available in the revision being |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1191 committed (updated or added), filectxfn returns a memfilectx |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1192 object. If the file was removed, filectxfn raises an |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1193 IOError. Moved files are represented by marking the source file |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1194 removed and the new file added with copy information (see |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1195 memfilectx). |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1196 |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1197 user receives the committer name and defaults to current |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1198 repository username, date is the commit date in any format |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1199 supported by util.parsedate() and defaults to current date, extra |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1200 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
|
1201 """ |
6721
521c6c6f3b9b
kill some trailing spaces
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6718
diff
changeset
|
1202 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
|
1203 date=None, extra=None): |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1204 self._repo = repo |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1205 self._rev = None |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1206 self._node = None |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1207 self._text = text |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1208 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
|
1209 self._user = user |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1210 parents = [(p or nullid) for p in parents] |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1211 p1, p2 = parents |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6744
diff
changeset
|
1212 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
|
1213 files = sorted(set(files)) |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1214 self._status = [files, [], [], [], []] |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1215 self._filectxfn = filectxfn |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1216 |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1217 self._extra = extra and extra.copy() or {} |
14528
0bd69e37fd20
memctx: simplify constructor
Patrick Mezard <pmezard@gmail.com>
parents:
14518
diff
changeset
|
1218 if self._extra.get('branch', '') == '': |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1219 self._extra['branch'] = 'default' |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1220 |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1221 def __str__(self): |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1222 return str(self._parents[0]) + "+" |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1223 |
6763
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
1224 def __int__(self): |
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
1225 return self._rev |
403682f1c678
context: add __int__ and hex methods
Matt Mackall <mpm@selenic.com>
parents:
6762
diff
changeset
|
1226 |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1227 def __nonzero__(self): |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1228 return True |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1229 |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8380
diff
changeset
|
1230 def __getitem__(self, key): |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8380
diff
changeset
|
1231 return self.filectx(key) |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8380
diff
changeset
|
1232 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1233 def p1(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1234 return self._parents[0] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1235 def p2(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1236 return self._parents[1] |
8406
6ad1f72bdf34
context: add p1 and p2 methods
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
1237 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1238 def user(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1239 return self._user or self._repo.ui.username() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1240 def date(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1241 return self._date |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1242 def description(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1243 return self._text |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1244 def files(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1245 return self.modified() |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1246 def modified(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1247 return self._status[0] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1248 def added(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1249 return self._status[1] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1250 def removed(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1251 return self._status[2] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1252 def deleted(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1253 return self._status[3] |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1254 def unknown(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1255 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
|
1256 def ignored(self): |
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
1257 return self._status[5] |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1258 def clean(self): |
11098
380ab78dbd69
workingctx: add explicit status method, add ignored and fix clean
Steve Borho <steve@borho.org>
parents:
11097
diff
changeset
|
1259 return self._status[6] |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1260 def branch(self): |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
13031
diff
changeset
|
1261 return encoding.tolocal(self._extra['branch']) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1262 def extra(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1263 return self._extra |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1264 def flags(self, f): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1265 return self[f].flags() |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1266 |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1267 def parents(self): |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1268 """return contexts for each parent changeset""" |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1269 return self._parents |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1270 |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1271 def filectx(self, path, filelog=None): |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1272 """get a file context from the working directory""" |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1273 return self._filectxfn(self._repo, self, path) |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1274 |
11151
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
1275 def commit(self): |
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
1276 """commit context to the repo""" |
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
1277 return self._repo.commitctx(self) |
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
1278 |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1279 class memfilectx(object): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1280 """memfilectx represents an in-memory file to commit. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1281 |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1282 See memctx for more details. |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1283 """ |
11151
c5c190822501
slightly improve memctx api
Alexander Solovyov <piranha@piranha.org.ua>
parents:
11144
diff
changeset
|
1284 def __init__(self, path, data, islink=False, isexec=False, copied=None): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1285 """ |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1286 path is the normalized file path relative to repository root. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1287 data is the file content as a string. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1288 islink is True if the file is a symbolic link. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1289 isexec is True if the file is executable. |
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7008
diff
changeset
|
1290 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
|
1291 revision being committed, or None.""" |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1292 self._path = path |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1293 self._data = data |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1294 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
|
1295 self._copied = None |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1296 if copied: |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1297 self._copied = (copied, nullid) |
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1298 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1299 def __nonzero__(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1300 return True |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1301 def __str__(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1302 return "%s@%s" % (self.path(), self._changectx) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1303 def path(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1304 return self._path |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1305 def data(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1306 return self._data |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1307 def flags(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1308 return self._flags |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1309 def isexec(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1310 return 'x' in self._flags |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1311 def islink(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1312 return 'l' in self._flags |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1313 def renamed(self): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1314 return self._copied |