Mercurial > hg
annotate mercurial/localrepo.py @ 28113:d2e0d57824c2
verify: include "manifest" prefix in a few more places
We include the "manifest" prefix on most other errors, so it seems
consistent to add them to the remaining messages too. Also, having the
"manifest" prefix will be more consistent with having the directory
prefix there when we add support for treemanifests. With the
"manifest" at the beginning, let's remove the now-redundant
"manifest" in the message itself.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 02 Feb 2016 10:42:28 -0800 |
parents | e219dbfd0342 |
children | 3784d9eb7245 |
rev | line source |
---|---|
1089 | 1 # localrepo.py - read/write repository class for mercurial |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
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:
4633
diff
changeset
|
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8210
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. |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
7 |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
8 from __future__ import absolute_import |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
9 |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
10 import errno |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
11 import inspect |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
12 import os |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
13 import random |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
14 import time |
21141
d8dd19e09ed4
bundle2: advertise bundle2 caps in server capabilities
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21140
diff
changeset
|
15 import urllib |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
16 import weakref |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
17 |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
18 from .i18n import _ |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
19 from .node import ( |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
20 hex, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
21 nullid, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
22 short, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
23 wdirrev, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
24 ) |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
25 from . import ( |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
26 bookmarks, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
27 branchmap, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
28 bundle2, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
29 changegroup, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
30 changelog, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
31 cmdutil, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
32 context, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
33 dirstate, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
34 encoding, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
35 error, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
36 exchange, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
37 extensions, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
38 filelog, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
39 hook, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
40 lock as lockmod, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
41 manifest, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
42 match as matchmod, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
43 merge as mergemod, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
44 namespaces, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
45 obsolete, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
46 pathutil, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
47 peer, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
48 phases, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
49 pushkey, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
50 repoview, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
51 revset, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
52 scmutil, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
53 store, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
54 subrepo, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
55 tags as tagsmod, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
56 transaction, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
57 util, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
58 ) |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
59 |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
60 release = lockmod.release |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
61 propertycache = util.propertycache |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
62 filecache = scmutil.filecache |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8108
diff
changeset
|
63 |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
64 class repofilecache(filecache): |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
65 """All filecache usage on repo are done for logic that should be unfiltered |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
66 """ |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
67 |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
68 def __get__(self, repo, type=None): |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
69 return super(repofilecache, self).__get__(repo.unfiltered(), type) |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
70 def __set__(self, repo, value): |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
71 return super(repofilecache, self).__set__(repo.unfiltered(), value) |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
72 def __delete__(self, repo): |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
73 return super(repofilecache, self).__delete__(repo.unfiltered()) |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
74 |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
75 class storecache(repofilecache): |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
76 """filecache for files in the store""" |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
77 def join(self, obj, fname): |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
78 return obj.sjoin(fname) |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
79 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
80 class unfilteredpropertycache(propertycache): |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
81 """propertycache that apply to unfiltered repo only""" |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
82 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
83 def __get__(self, repo, type=None): |
19846
9789670992d6
repoview: have unfilteredpropertycache using the underlying cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19515
diff
changeset
|
84 unfi = repo.unfiltered() |
9789670992d6
repoview: have unfilteredpropertycache using the underlying cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19515
diff
changeset
|
85 if unfi is repo: |
9789670992d6
repoview: have unfilteredpropertycache using the underlying cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19515
diff
changeset
|
86 return super(unfilteredpropertycache, self).__get__(unfi) |
9789670992d6
repoview: have unfilteredpropertycache using the underlying cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19515
diff
changeset
|
87 return getattr(unfi, self.name) |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
88 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
89 class filteredpropertycache(propertycache): |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
90 """propertycache that must take filtering in account""" |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
91 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
92 def cachevalue(self, obj, value): |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
93 object.__setattr__(obj, self.name, value) |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
94 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
95 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
96 def hasunfilteredcache(repo, name): |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18520
diff
changeset
|
97 """check if a repo has an unfilteredpropertycache value for <name>""" |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
98 return name in vars(repo.unfiltered()) |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
99 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
100 def unfilteredmethod(orig): |
17994
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
101 """decorate method that always need to be run on unfiltered version""" |
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
102 def wrapper(repo, *args, **kwargs): |
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
103 return orig(repo.unfiltered(), *args, **kwargs) |
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
104 return wrapper |
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
105 |
20955
12f161f08d74
bundle2: allow pulling changegroups using bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20954
diff
changeset
|
106 moderncaps = set(('lookup', 'branchmap', 'pushkey', 'known', 'getbundle', |
21141
d8dd19e09ed4
bundle2: advertise bundle2 caps in server capabilities
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21140
diff
changeset
|
107 'unbundle')) |
20776
d00c731f4637
localrepo: rename capability set to lower case.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20773
diff
changeset
|
108 legacycaps = moderncaps.union(set(['changegroupsubset'])) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
109 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
110 class localpeer(peer.peerrepository): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
111 '''peer for a local repo; reflects only the most recent API''' |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
112 |
20776
d00c731f4637
localrepo: rename capability set to lower case.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20773
diff
changeset
|
113 def __init__(self, repo, caps=moderncaps): |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
114 peer.peerrepository.__init__(self) |
18382
f3b21beb9802
filtering: rename filters to their antonyms
Kevin Bullock <kbullock@ringworld.org>
parents:
18364
diff
changeset
|
115 self._repo = repo.filtered('served') |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
116 self.ui = repo.ui |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
117 self._caps = repo._restrictcapabilities(caps) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
118 self.requirements = repo.requirements |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
119 self.supportedformats = repo.supportedformats |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
120 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
121 def close(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
122 self._repo.close() |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
123 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
124 def _capabilities(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
125 return self._caps |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
126 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
127 def local(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
128 return self._repo |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
129 |
17193
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17192
diff
changeset
|
130 def canpush(self): |
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17192
diff
changeset
|
131 return True |
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17192
diff
changeset
|
132 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
133 def url(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
134 return self._repo.url() |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
135 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
136 def lookup(self, key): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
137 return self._repo.lookup(key) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
138 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
139 def branchmap(self): |
18279
679767c38cb5
clfilter: drop extra filtering in localpeer
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18278
diff
changeset
|
140 return self._repo.branchmap() |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
141 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
142 def heads(self): |
18279
679767c38cb5
clfilter: drop extra filtering in localpeer
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18278
diff
changeset
|
143 return self._repo.heads() |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
144 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
145 def known(self, nodes): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
146 return self._repo.known(nodes) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
147 |
20953
8d853cad6b14
localpeer: propagate bundlecaps in getbundle call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20933
diff
changeset
|
148 def getbundle(self, source, heads=None, common=None, bundlecaps=None, |
24639
c79b1e690110
localrepo.getbundle: drop unused 'format' argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
24571
diff
changeset
|
149 **kwargs): |
21068
c15b66a6bbb4
bundle2: return a stream from exchange.getbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
150 cg = exchange.getbundle(self._repo, source, heads=heads, |
21157
60ad2ea5b106
getbundle: pass arbitrary arguments all along the call chain
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21147
diff
changeset
|
151 common=common, bundlecaps=bundlecaps, **kwargs) |
24686
e0e28e910fa3
bundle2: rename format, parts and config to final names
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24641
diff
changeset
|
152 if bundlecaps is not None and 'HG20' in bundlecaps: |
21068
c15b66a6bbb4
bundle2: return a stream from exchange.getbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
153 # When requesting a bundle2, getbundle returns a stream to make the |
c15b66a6bbb4
bundle2: return a stream from exchange.getbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
154 # wire level function happier. We need to build a proper object |
c15b66a6bbb4
bundle2: return a stream from exchange.getbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
155 # from it in local peer. |
24641
60fecc5b14a4
unbundle20: retrieve unbundler instances through a factory function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24639
diff
changeset
|
156 cg = bundle2.getunbundler(self.ui, cg) |
21068
c15b66a6bbb4
bundle2: return a stream from exchange.getbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
157 return cg |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
158 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
159 # TODO We might want to move the next two calls into legacypeer and add |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
160 # unbundle instead. |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
161 |
20969
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
162 def unbundle(self, cg, heads, url): |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
163 """apply a bundle on a repo |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
164 |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
165 This function handles the repo locking itself.""" |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
166 try: |
24798
9fbf0a2a72a1
bundle2: add on more layer of exception catching in localrepo.unbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24792
diff
changeset
|
167 try: |
9fbf0a2a72a1
bundle2: add on more layer of exception catching in localrepo.unbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24792
diff
changeset
|
168 cg = exchange.readbundle(self.ui, cg, None) |
9fbf0a2a72a1
bundle2: add on more layer of exception catching in localrepo.unbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24792
diff
changeset
|
169 ret = exchange.unbundle(self._repo, cg, heads, 'push', url) |
9fbf0a2a72a1
bundle2: add on more layer of exception catching in localrepo.unbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24792
diff
changeset
|
170 if util.safehasattr(ret, 'getchunks'): |
9fbf0a2a72a1
bundle2: add on more layer of exception catching in localrepo.unbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24792
diff
changeset
|
171 # This is a bundle20 object, turn it into an unbundler. |
9fbf0a2a72a1
bundle2: add on more layer of exception catching in localrepo.unbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24792
diff
changeset
|
172 # This little dance should be dropped eventually when the |
9fbf0a2a72a1
bundle2: add on more layer of exception catching in localrepo.unbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24792
diff
changeset
|
173 # API is finally improved. |
9fbf0a2a72a1
bundle2: add on more layer of exception catching in localrepo.unbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24792
diff
changeset
|
174 stream = util.chunkbuffer(ret.getchunks()) |
9fbf0a2a72a1
bundle2: add on more layer of exception catching in localrepo.unbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24792
diff
changeset
|
175 ret = bundle2.getunbundler(self.ui, stream) |
9fbf0a2a72a1
bundle2: add on more layer of exception catching in localrepo.unbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24792
diff
changeset
|
176 return ret |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
177 except Exception as exc: |
24799
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
178 # If the exception contains output salvaged from a bundle2 |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
179 # reply, we need to make sure it is printed before continuing |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
180 # to fail. So we build a bundle2 with such output and consume |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
181 # it directly. |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
182 # |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
183 # This is not very elegant but allows a "simple" solution for |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
184 # issue4594 |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
185 output = getattr(exc, '_bundle2salvagedoutput', ()) |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
186 if output: |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
187 bundler = bundle2.bundle20(self._repo.ui) |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
188 for out in output: |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
189 bundler.addpart(out) |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
190 stream = util.chunkbuffer(bundler.getchunks()) |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
191 b = bundle2.getunbundler(self.ui, stream) |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
192 bundle2.processbundle(self._repo, b) |
24798
9fbf0a2a72a1
bundle2: add on more layer of exception catching in localrepo.unbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24792
diff
changeset
|
193 raise |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
194 except error.PushRaced as exc: |
21186
9f3652e851f8
bundle2: gracefully handle PushRaced error during unbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21184
diff
changeset
|
195 raise error.ResponseError(_('push failed:'), str(exc)) |
20969
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
196 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
197 def lock(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
198 return self._repo.lock() |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
199 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
200 def addchangegroup(self, cg, source, url): |
26702
ec182d109dce
localrepo: use cg?unpacker.apply() instead of changegroup.addchangegroup()
Augie Fackler <augie@google.com>
parents:
26634
diff
changeset
|
201 return cg.apply(self._repo, source, url) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
202 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
203 def pushkey(self, namespace, key, old, new): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
204 return self._repo.pushkey(namespace, key, old, new) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
205 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
206 def listkeys(self, namespace): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
207 return self._repo.listkeys(namespace) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
208 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
209 def debugwireargs(self, one, two, three=None, four=None, five=None): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
210 '''used to test argument passing over the wire''' |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
211 return "%s %s %s %s %s" % (one, two, three, four, five) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
212 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
213 class locallegacypeer(localpeer): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
214 '''peer extension which implements legacy methods too; used for tests with |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
215 restricted capabilities''' |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
216 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
217 def __init__(self, repo): |
20776
d00c731f4637
localrepo: rename capability set to lower case.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20773
diff
changeset
|
218 localpeer.__init__(self, repo, caps=legacycaps) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
219 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
220 def branches(self, nodes): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
221 return self._repo.branches(nodes) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
222 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
223 def between(self, pairs): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
224 return self._repo.between(pairs) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
225 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
226 def changegroup(self, basenodes, source): |
20931
de60ca3a390e
localrepo: move the changegroup method in changegroup module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20930
diff
changeset
|
227 return changegroup.changegroup(self._repo, basenodes, source) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
228 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
229 def changegroupsubset(self, bases, heads, source): |
20927
24a443948627
localrepo: move the changegroupsubset method in changegroup module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20926
diff
changeset
|
230 return changegroup.changegroupsubset(self._repo, bases, heads, source) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
231 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
232 class localrepository(object): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
233 |
24956
48583a1e44f3
treemanifest: set requires at repo creation time, ignore config after
Martin von Zweigbergk <martinvonz@google.com>
parents:
24947
diff
changeset
|
234 supportedformats = set(('revlogv1', 'generaldelta', 'treemanifest', |
48583a1e44f3
treemanifest: set requires at repo creation time, ignore config after
Martin von Zweigbergk <martinvonz@google.com>
parents:
24947
diff
changeset
|
235 'manifestv2')) |
19778
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
236 _basesupported = supportedformats | set(('store', 'fncache', 'shared', |
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
237 'dotencode')) |
24956
48583a1e44f3
treemanifest: set requires at repo creation time, ignore config after
Martin von Zweigbergk <martinvonz@google.com>
parents:
24947
diff
changeset
|
238 openerreqs = set(('revlogv1', 'generaldelta', 'treemanifest', 'manifestv2')) |
18186
d336f53cb2e3
clfilter: ensure unfiltered repo have a filtername attribute too
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18162
diff
changeset
|
239 filtername = None |
17137
b090601a80d1
localrepo: make requirements and openerreqs mutable by subclasses
Bryan O'Sullivan <bryano@fb.com>
parents:
17075
diff
changeset
|
240 |
19928
d1ac3790e10a
localrepo: invoke only feature setup functions for enabled extensions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19884
diff
changeset
|
241 # a list of (ui, featureset) functions. |
d1ac3790e10a
localrepo: invoke only feature setup functions for enabled extensions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19884
diff
changeset
|
242 # only functions defined in module of enabled extensions are invoked |
19778
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
243 featuresetupfuncs = set() |
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
244 |
17137
b090601a80d1
localrepo: make requirements and openerreqs mutable by subclasses
Bryan O'Sullivan <bryano@fb.com>
parents:
17075
diff
changeset
|
245 def _baserequirements(self, create): |
24913
e3a928bd1cd4
localrepo: eliminate requirements class variable (API)
Drew Gottlieb <drgott@google.com>
parents:
24843
diff
changeset
|
246 return ['revlogv1'] |
2439
e8c4f3d3df8c
extend network protocol to stop clients from locking servers
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2424
diff
changeset
|
247 |
14363
82f3b0f3f0a5
localrepo, sshrepo: use Boolean create argument in __init__
Martin Geisler <mg@lazybytes.net>
parents:
14333
diff
changeset
|
248 def __init__(self, baseui, path=None, create=False): |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
249 self.requirements = set() |
18945
e75b72fffdfe
vfs: split "expand" into "realpath"/"expandpath" to apply each separately
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18811
diff
changeset
|
250 self.wvfs = scmutil.vfs(path, expandpath=True, realpath=True) |
17650
bf2eb3a126d2
localrepo: use "vfs" constructor instead of "opener" one
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17550
diff
changeset
|
251 self.wopener = self.wvfs |
17157
87e8440964a0
localrepo: use path expansion API via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17156
diff
changeset
|
252 self.root = self.wvfs.base |
17158
60338880d265
localrepo: use "self.wvfs.join()" instead of "os.path.join()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17157
diff
changeset
|
253 self.path = self.wvfs.join(".hg") |
3850
a4457828ca1a
move code around
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3803
diff
changeset
|
254 self.origroot = path |
20033
f962870712da
pathutil: tease out a new library to break an import cycle from canonpath use
Augie Fackler <raf@durin42.com>
parents:
20027
diff
changeset
|
255 self.auditor = pathutil.pathauditor(self.root, self._checknested) |
27233
dfb836a31b61
localrepo: add a second auditor without file system check
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27167
diff
changeset
|
256 self.nofsauditor = pathutil.pathauditor(self.root, self._checknested, |
dfb836a31b61
localrepo: add a second auditor without file system check
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27167
diff
changeset
|
257 realfs=False) |
17650
bf2eb3a126d2
localrepo: use "vfs" constructor instead of "opener" one
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17550
diff
changeset
|
258 self.vfs = scmutil.vfs(self.path) |
bf2eb3a126d2
localrepo: use "vfs" constructor instead of "opener" one
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17550
diff
changeset
|
259 self.opener = self.vfs |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
260 self.baseui = baseui |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
261 self.ui = baseui.copy() |
20082
b04cc8651a63
localrepo: prevent to copy repo local config, copy baseui instead
Simon Heimberg <simohe@besonet.ch>
parents:
20033
diff
changeset
|
262 self.ui.copy = baseui.copy # prevent copying repo configuration |
15922
23921c17299a
phases: mechanism to allow extension to alter initial computation of phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15892
diff
changeset
|
263 # A list of callback to shape the phase if no data were found. |
23921c17299a
phases: mechanism to allow extension to alter initial computation of phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15892
diff
changeset
|
264 # Callback are in the form: func(repo, roots) --> processed root. |
23921c17299a
phases: mechanism to allow extension to alter initial computation of phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15892
diff
changeset
|
265 # This list it to be filled by extension during repo setup |
23921c17299a
phases: mechanism to allow extension to alter initial computation of phase
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
15892
diff
changeset
|
266 self._phasedefaults = [] |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
267 try: |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
268 self.ui.readconfig(self.join("hgrc"), self.root) |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
269 extensions.loadall(self.ui) |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
270 except IOError: |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
271 pass |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
272 |
19778
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
273 if self.featuresetupfuncs: |
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
274 self.supported = set(self._basesupported) # use private copy |
19928
d1ac3790e10a
localrepo: invoke only feature setup functions for enabled extensions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19884
diff
changeset
|
275 extmods = set(m.__name__ for n, m |
d1ac3790e10a
localrepo: invoke only feature setup functions for enabled extensions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19884
diff
changeset
|
276 in extensions.extensions(self.ui)) |
19778
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
277 for setupfunc in self.featuresetupfuncs: |
19928
d1ac3790e10a
localrepo: invoke only feature setup functions for enabled extensions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19884
diff
changeset
|
278 if setupfunc.__module__ in extmods: |
d1ac3790e10a
localrepo: invoke only feature setup functions for enabled extensions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19884
diff
changeset
|
279 setupfunc(self.ui, self.supported) |
19778
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
280 else: |
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
281 self.supported = self._basesupported |
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
282 |
17161
be016e96117a
localrepo: use file API via vfs while ensuring repository directory
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17160
diff
changeset
|
283 if not self.vfs.isdir(): |
3035
4d0e0f149581
localrepo: move the repo creation code, fail if the repo exists
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3019
diff
changeset
|
284 if create: |
17161
be016e96117a
localrepo: use file API via vfs while ensuring repository directory
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17160
diff
changeset
|
285 if not self.wvfs.exists(): |
be016e96117a
localrepo: use file API via vfs while ensuring repository directory
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17160
diff
changeset
|
286 self.wvfs.makedirs() |
be016e96117a
localrepo: use file API via vfs while ensuring repository directory
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17160
diff
changeset
|
287 self.vfs.makedir(notindexed=True) |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
288 self.requirements.update(self._baserequirements(create)) |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
289 if self.ui.configbool('format', 'usestore', True): |
17161
be016e96117a
localrepo: use file API via vfs while ensuring repository directory
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17160
diff
changeset
|
290 self.vfs.mkdir("store") |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
291 self.requirements.add("store") |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
292 if self.ui.configbool('format', 'usefncache', True): |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
293 self.requirements.add("fncache") |
12687
34d8247a4595
store: encode first period or space in filenames (issue1713)
Adrian Buehlmann <adrian@cadifra.com>
parents:
12622
diff
changeset
|
294 if self.ui.configbool('format', 'dotencode', True): |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
295 self.requirements.add('dotencode') |
4166
c0271aba6abe
small fixes for the parent patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4163
diff
changeset
|
296 # create an invalid changelog |
17160
22b9b1d2f5d4
localrepo: use "vfs" intead of "opener" while ensuring repository directory
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17159
diff
changeset
|
297 self.vfs.append( |
14168
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14162
diff
changeset
|
298 "00changelog.i", |
4166
c0271aba6abe
small fixes for the parent patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4163
diff
changeset
|
299 '\0\0\0\2' # represents revlogv2 |
c0271aba6abe
small fixes for the parent patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4163
diff
changeset
|
300 ' dummy changelog to prevent using the old repo layout' |
c0271aba6abe
small fixes for the parent patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4163
diff
changeset
|
301 ) |
26906
e40af07e518e
scmutil: extract general delta config handling in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26831
diff
changeset
|
302 if scmutil.gdinitconfig(self.ui): |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
303 self.requirements.add("generaldelta") |
24956
48583a1e44f3
treemanifest: set requires at repo creation time, ignore config after
Martin von Zweigbergk <martinvonz@google.com>
parents:
24947
diff
changeset
|
304 if self.ui.configbool('experimental', 'treemanifest', False): |
48583a1e44f3
treemanifest: set requires at repo creation time, ignore config after
Martin von Zweigbergk <martinvonz@google.com>
parents:
24947
diff
changeset
|
305 self.requirements.add("treemanifest") |
24571
919f8ce040be
manifestv2: set requires at repo creation time
Martin von Zweigbergk <martinvonz@google.com>
parents:
24526
diff
changeset
|
306 if self.ui.configbool('experimental', 'manifestv2', False): |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
307 self.requirements.add("manifestv2") |
3035
4d0e0f149581
localrepo: move the repo creation code, fail if the repo exists
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3019
diff
changeset
|
308 else: |
7637 | 309 raise error.RepoError(_("repository %s not found") % path) |
3035
4d0e0f149581
localrepo: move the repo creation code, fail if the repo exists
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3019
diff
changeset
|
310 elif create: |
7637 | 311 raise error.RepoError(_("repository %s already exists") % path) |
3851
8f18e31c4441
add "requires" file to the repo, specifying the requirements
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3850
diff
changeset
|
312 else: |
8f18e31c4441
add "requires" file to the repo, specifying the requirements
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3850
diff
changeset
|
313 try: |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
314 self.requirements = scmutil.readrequires( |
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
315 self.vfs, self.supported) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
316 except IOError as inst: |
3851
8f18e31c4441
add "requires" file to the repo, specifying the requirements
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3850
diff
changeset
|
317 if inst.errno != errno.ENOENT: |
8f18e31c4441
add "requires" file to the repo, specifying the requirements
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3850
diff
changeset
|
318 raise |
405 | 319 |
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
320 self.sharedpath = self.path |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
321 try: |
18946
3d4f41eaae67
localrepo: use vfs instead of "os.path.*" in sharedpath checking
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18945
diff
changeset
|
322 vfs = scmutil.vfs(self.vfs.read("sharedpath").rstrip('\n'), |
3d4f41eaae67
localrepo: use vfs instead of "os.path.*" in sharedpath checking
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18945
diff
changeset
|
323 realpath=True) |
3d4f41eaae67
localrepo: use vfs instead of "os.path.*" in sharedpath checking
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18945
diff
changeset
|
324 s = vfs.base |
3d4f41eaae67
localrepo: use vfs instead of "os.path.*" in sharedpath checking
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18945
diff
changeset
|
325 if not vfs.exists(): |
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
326 raise error.RepoError( |
8908
105343f9f744
Fix warning: Seen unexpected token "%"
Dongsheng Song <dongsheng.song@gmail.com>
parents:
8813
diff
changeset
|
327 _('.hg/sharedpath points to nonexistent directory %s') % s) |
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
328 self.sharedpath = s |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
329 except IOError as inst: |
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
330 if inst.errno != errno.ENOENT: |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
331 raise |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
332 |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
333 self.store = store.store( |
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
334 self.requirements, self.sharedpath, scmutil.vfs) |
6840
80e51429cb9a
introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents:
6839
diff
changeset
|
335 self.spath = self.store.path |
17654
1dc37491e9fb
localrepo: use "vfs" constructor/field for initialization around "store"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17650
diff
changeset
|
336 self.svfs = self.store.vfs |
6840
80e51429cb9a
introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents:
6839
diff
changeset
|
337 self.sjoin = self.store.join |
17654
1dc37491e9fb
localrepo: use "vfs" constructor/field for initialization around "store"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17650
diff
changeset
|
338 self.vfs.createmode = self.store.createmode |
24915
1c40408770f7
localrepo: make _applyrequirements more specific
Drew Gottlieb <drgott@google.com>
parents:
24914
diff
changeset
|
339 self._applyopenerreqs() |
12295
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
340 if create: |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
341 self._writerequirements() |
3850
a4457828ca1a
move code around
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3803
diff
changeset
|
342 |
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
343 self._dirstatevalidatewarned = False |
9146
5614a628d173
localrepo: rename in-memory tag cache instance attributes (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9145
diff
changeset
|
344 |
18189
b9026ba002f6
branchmap: enable caching for filtered version too
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18186
diff
changeset
|
345 self._branchcaches = {} |
24373
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
346 self._revbranchcache = None |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
347 self.filterpats = {} |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
348 self._datafilters = {} |
4916
5c5d23d93447
Use a weakref for recursive transactions
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
349 self._transref = self._lockref = self._wlockref = None |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
350 |
14929
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
351 # A cache for various files under .hg/ that tracks file changes, |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
352 # (used by the filecache decorator) |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
353 # |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
354 # Maps a property name to its util.filecacheentry |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
355 self._filecache = {} |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
356 |
18101
a464deecc9dd
clfilter: add a cache on repo for set of revision to filter for a given set.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18100
diff
changeset
|
357 # hold sets of revision to be filtered |
a464deecc9dd
clfilter: add a cache on repo for set of revision to filter for a given set.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18100
diff
changeset
|
358 # should be cleared when something might have changed the filter value: |
a464deecc9dd
clfilter: add a cache on repo for set of revision to filter for a given set.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18100
diff
changeset
|
359 # - new changesets, |
a464deecc9dd
clfilter: add a cache on repo for set of revision to filter for a given set.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18100
diff
changeset
|
360 # - phase change, |
a464deecc9dd
clfilter: add a cache on repo for set of revision to filter for a given set.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18100
diff
changeset
|
361 # - new obsolescence marker, |
a464deecc9dd
clfilter: add a cache on repo for set of revision to filter for a given set.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18100
diff
changeset
|
362 # - working directory parent change, |
a464deecc9dd
clfilter: add a cache on repo for set of revision to filter for a given set.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18100
diff
changeset
|
363 # - bookmark changes |
a464deecc9dd
clfilter: add a cache on repo for set of revision to filter for a given set.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18100
diff
changeset
|
364 self.filteredrevcache = {} |
a464deecc9dd
clfilter: add a cache on repo for set of revision to filter for a given set.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18100
diff
changeset
|
365 |
23558
3198aac7a95d
namespaces: add bookmarks to the names data structure
Sean Farley <sean.michael.farley@gmail.com>
parents:
23546
diff
changeset
|
366 # generic mapping between names and nodes |
23561
3c2419e07df5
namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents:
23558
diff
changeset
|
367 self.names = namespaces.namespaces() |
23558
3198aac7a95d
namespaces: add bookmarks to the names data structure
Sean Farley <sean.michael.farley@gmail.com>
parents:
23546
diff
changeset
|
368 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
369 def close(self): |
24378
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
370 self._writecaches() |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
371 |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
372 def _writecaches(self): |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
373 if self._revbranchcache: |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
374 self._revbranchcache.write() |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
375 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
376 def _restrictcapabilities(self, caps): |
24696
553dc2b094d9
bundle2: advertise bundle2 by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24686
diff
changeset
|
377 if self.ui.configbool('experimental', 'bundle2-advertise', True): |
20955
12f161f08d74
bundle2: allow pulling changegroups using bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20954
diff
changeset
|
378 caps = set(caps) |
22342
262c5cc126c1
bundle2: introduce a `getrepocaps` to retrieve the bundle2 caps of a repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22341
diff
changeset
|
379 capsblob = bundle2.encodecaps(bundle2.getrepocaps(self)) |
24686
e0e28e910fa3
bundle2: rename format, parts and config to final names
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24641
diff
changeset
|
380 caps.add('bundle2=' + urllib.quote(capsblob)) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
381 return caps |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
382 |
24915
1c40408770f7
localrepo: make _applyrequirements more specific
Drew Gottlieb <drgott@google.com>
parents:
24914
diff
changeset
|
383 def _applyopenerreqs(self): |
1c40408770f7
localrepo: make _applyrequirements more specific
Drew Gottlieb <drgott@google.com>
parents:
24914
diff
changeset
|
384 self.svfs.options = dict((r, 1) for r in self.requirements |
17137
b090601a80d1
localrepo: make requirements and openerreqs mutable by subclasses
Bryan O'Sullivan <bryano@fb.com>
parents:
17075
diff
changeset
|
385 if r in self.openerreqs) |
25839
1f8287b41935
localrepo: mark format options
Matt Mackall <mpm@selenic.com>
parents:
25764
diff
changeset
|
386 # experimental config: format.chunkcachesize |
20180
969148b49fc6
revlog: allow tuning of the chunk cache size (via format.chunkcachesize)
Brodie Rao <brodie@sf.io>
parents:
20176
diff
changeset
|
387 chunkcachesize = self.ui.configint('format', 'chunkcachesize') |
969148b49fc6
revlog: allow tuning of the chunk cache size (via format.chunkcachesize)
Brodie Rao <brodie@sf.io>
parents:
20176
diff
changeset
|
388 if chunkcachesize is not None: |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
389 self.svfs.options['chunkcachesize'] = chunkcachesize |
25839
1f8287b41935
localrepo: mark format options
Matt Mackall <mpm@selenic.com>
parents:
25764
diff
changeset
|
390 # experimental config: format.maxchainlen |
23256
1c11393d5dfb
localrepo: rename revlog.maxchainlen to format.maxchainlen
Augie Fackler <raf@durin42.com>
parents:
23255
diff
changeset
|
391 maxchainlen = self.ui.configint('format', 'maxchainlen') |
23255
76effa770ff9
revlog: add config variable for limiting delta-chain length
Mateusz Kwapich <mitrandir@fb.com>
parents:
23205
diff
changeset
|
392 if maxchainlen is not None: |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
393 self.svfs.options['maxchainlen'] = maxchainlen |
25839
1f8287b41935
localrepo: mark format options
Matt Mackall <mpm@selenic.com>
parents:
25764
diff
changeset
|
394 # experimental config: format.manifestcachesize |
24033
ed5e8a9598ce
manifest: make lru size configurable
Durham Goode <durham@fb.com>
parents:
23929
diff
changeset
|
395 manifestcachesize = self.ui.configint('format', 'manifestcachesize') |
ed5e8a9598ce
manifest: make lru size configurable
Durham Goode <durham@fb.com>
parents:
23929
diff
changeset
|
396 if manifestcachesize is not None: |
ed5e8a9598ce
manifest: make lru size configurable
Durham Goode <durham@fb.com>
parents:
23929
diff
changeset
|
397 self.svfs.options['manifestcachesize'] = manifestcachesize |
26118
049005de325e
revlog: add an aggressivemergedelta option
Durham Goode <durham@fb.com>
parents:
25878
diff
changeset
|
398 # experimental config: format.aggressivemergedeltas |
049005de325e
revlog: add an aggressivemergedelta option
Durham Goode <durham@fb.com>
parents:
25878
diff
changeset
|
399 aggressivemergedeltas = self.ui.configbool('format', |
049005de325e
revlog: add an aggressivemergedelta option
Durham Goode <durham@fb.com>
parents:
25878
diff
changeset
|
400 'aggressivemergedeltas', False) |
049005de325e
revlog: add an aggressivemergedelta option
Durham Goode <durham@fb.com>
parents:
25878
diff
changeset
|
401 self.svfs.options['aggressivemergedeltas'] = aggressivemergedeltas |
26907
dfab6edb98e3
format: introduce 'format.usegeneraldelta`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26906
diff
changeset
|
402 self.svfs.options['lazydeltabase'] = not scmutil.gddeltaconfig(self.ui) |
12295
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
403 |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
404 def _writerequirements(self): |
24934
5abd0a76bc8f
requires: move requires file writing func from localrepo to scmutil
Drew Gottlieb <drgott@google.com>
parents:
24918
diff
changeset
|
405 scmutil.writerequires(self.vfs, self.requirements) |
12295
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
406 |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
407 def _checknested(self, path): |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
408 """Determine if path is a legal nested repository.""" |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
409 if not path.startswith(self.root): |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
410 return False |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
411 subpath = path[len(self.root) + 1:] |
15722
417127af3996
windows: use normalized path to check repository nesting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15604
diff
changeset
|
412 normsubpath = util.pconvert(subpath) |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
413 |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
414 # XXX: Checking against the current working copy is wrong in |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
415 # the sense that it can reject things like |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
416 # |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
417 # $ hg cat -r 10 sub/x.txt |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
418 # |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
419 # if sub/ is no longer a subrepository in the working copy |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
420 # parent revision. |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
421 # |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
422 # However, it can of course also allow things that would have |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
423 # been rejected before, such as the above cat command if sub/ |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
424 # is a subrepository now, but was a normal directory before. |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
425 # The old path auditor would have rejected by mistake since it |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
426 # panics when it sees sub/.hg/. |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
427 # |
12174
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
428 # All in all, checking against the working copy seems sensible |
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
429 # since we want to prevent access to nested repositories on |
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
430 # the filesystem *now*. |
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
431 ctx = self[None] |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
432 parts = util.splitpath(subpath) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
433 while parts: |
15722
417127af3996
windows: use normalized path to check repository nesting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15604
diff
changeset
|
434 prefix = '/'.join(parts) |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
435 if prefix in ctx.substate: |
15722
417127af3996
windows: use normalized path to check repository nesting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15604
diff
changeset
|
436 if prefix == normsubpath: |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
437 return True |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
438 else: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
439 sub = ctx.sub(prefix) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
440 return sub.checknested(subpath[len(prefix) + 1:]) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
441 else: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
442 parts.pop() |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
443 return False |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
444 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
445 def peer(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
446 return localpeer(self) # not cached to avoid reference cycle |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
447 |
17993
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
448 def unfiltered(self): |
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
449 """Return unfiltered version of the repository |
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
450 |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18520
diff
changeset
|
451 Intended to be overwritten by filtered repo.""" |
17993
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
452 return self |
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
453 |
18100
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
454 def filtered(self, name): |
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
455 """Return a filtered version of a repository""" |
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
456 # build a new class with the mixin and the current class |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18520
diff
changeset
|
457 # (possibly subclass of the repo) |
18100
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
458 class proxycls(repoview.repoview, self.unfiltered().__class__): |
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
459 pass |
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
460 return proxycls(self, name) |
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
461 |
27698
dad6404ccddb
bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents:
27522
diff
changeset
|
462 @repofilecache('bookmarks', 'bookmarks.current') |
13355
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
463 def _bookmarks(self): |
17922
7f5dab94e48c
bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents:
17857
diff
changeset
|
464 return bookmarks.bmstore(self) |
13355
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
465 |
27698
dad6404ccddb
bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents:
27522
diff
changeset
|
466 @property |
24947
a02d293a1079
bookmarks: rename bookmarkcurrent to activebookmark (API)
Ryan McElroy <rmcelroy@fb.com>
parents:
24946
diff
changeset
|
467 def _activebookmark(self): |
27698
dad6404ccddb
bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents:
27522
diff
changeset
|
468 return self._bookmarks.active |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
469 |
16707
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
470 def bookmarkheads(self, bookmark): |
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
471 name = bookmark.split('@', 1)[0] |
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
472 heads = [] |
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
473 for mark, n in self._bookmarks.iteritems(): |
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
474 if mark.split('@', 1)[0] == name: |
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
475 heads.append(n) |
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
476 return heads |
15418
cf729af26963
phases: basic I/O logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15403
diff
changeset
|
477 |
26405
c15d8f84343e
localrepo: recreate phasecache if changelog was modified (issue4855)
Yuya Nishihara <yuya@tcha.org>
parents:
25878
diff
changeset
|
478 # _phaserevs and _phasesets depend on changelog. what we need is to |
c15d8f84343e
localrepo: recreate phasecache if changelog was modified (issue4855)
Yuya Nishihara <yuya@tcha.org>
parents:
25878
diff
changeset
|
479 # call _phasecache.invalidate() if '00changelog.i' was changed, but it |
c15d8f84343e
localrepo: recreate phasecache if changelog was modified (issue4855)
Yuya Nishihara <yuya@tcha.org>
parents:
25878
diff
changeset
|
480 # can't be easily expressed in filecache mechanism. |
c15d8f84343e
localrepo: recreate phasecache if changelog was modified (issue4855)
Yuya Nishihara <yuya@tcha.org>
parents:
25878
diff
changeset
|
481 @storecache('phaseroots', '00changelog.i') |
16657
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16646
diff
changeset
|
482 def _phasecache(self): |
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16646
diff
changeset
|
483 return phases.phasecache(self, self._phasedefaults) |
15420
e80d0d3198f0
phases: add a cache allowing to know in which phase a changeset is
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15418
diff
changeset
|
484 |
17070
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
485 @storecache('obsstore') |
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
486 def obsstore(self): |
22852
e994b034e91e
obsolete: add a "format.obsstore-version" config option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22787
diff
changeset
|
487 # read default format for new obsstore. |
25839
1f8287b41935
localrepo: mark format options
Matt Mackall <mpm@selenic.com>
parents:
25764
diff
changeset
|
488 # developer config: format.obsstore-version |
22852
e994b034e91e
obsolete: add a "format.obsstore-version" config option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22787
diff
changeset
|
489 defaultformat = self.ui.configint('format', 'obsstore-version', None) |
e994b034e91e
obsolete: add a "format.obsstore-version" config option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22787
diff
changeset
|
490 # rely on obsstore class default when possible. |
e994b034e91e
obsolete: add a "format.obsstore-version" config option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22787
diff
changeset
|
491 kwargs = {} |
e994b034e91e
obsolete: add a "format.obsstore-version" config option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22787
diff
changeset
|
492 if defaultformat is not None: |
22948
c136e26953aa
obsstore: fix defaultformat option passing
Durham Goode <durham@fb.com>
parents:
22942
diff
changeset
|
493 kwargs['defaultformat'] = defaultformat |
22951
6c86c673dde6
obsolete: add createmarkers option
Durham Goode <durham@fb.com>
parents:
22950
diff
changeset
|
494 readonly = not obsolete.isenabled(self, obsolete.createmarkersopt) |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
495 store = obsolete.obsstore(self.svfs, readonly=readonly, |
22950
bb8278b289ee
obsolete: add readonly flag to obstore constructor
Durham Goode <durham@fb.com>
parents:
22948
diff
changeset
|
496 **kwargs) |
22951
6c86c673dde6
obsolete: add createmarkers option
Durham Goode <durham@fb.com>
parents:
22950
diff
changeset
|
497 if store and readonly: |
24414
f247fbfe07f3
obsolete: mark warning for translation
Matt Mackall <mpm@selenic.com>
parents:
24402
diff
changeset
|
498 self.ui.warn( |
f247fbfe07f3
obsolete: mark warning for translation
Matt Mackall <mpm@selenic.com>
parents:
24402
diff
changeset
|
499 _('obsolete feature not enabled but %i markers found!\n') |
f247fbfe07f3
obsolete: mark warning for translation
Matt Mackall <mpm@selenic.com>
parents:
24402
diff
changeset
|
500 % len(list(store))) |
17070
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
501 return store |
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
502 |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
503 @storecache('00changelog.i') |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
504 def changelog(self): |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
505 c = changelog.changelog(self.svfs) |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
506 if 'HG_PENDING' in os.environ: |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
507 p = os.environ['HG_PENDING'] |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
508 if p.startswith(self.root): |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
509 c.readpending('00changelog.i.a') |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
510 return c |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
511 |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
512 @storecache('00manifest.i') |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
513 def manifest(self): |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
514 return manifest.manifest(self.svfs) |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
515 |
25119
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25114
diff
changeset
|
516 def dirlog(self, dir): |
25185
bf6b476f3b36
treemanifest: cache directory logs and manifests
Martin von Zweigbergk <martinvonz@google.com>
parents:
25149
diff
changeset
|
517 return self.manifest.dirlog(dir) |
25119
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25114
diff
changeset
|
518 |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
519 @repofilecache('dirstate') |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
520 def dirstate(self): |
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
521 return dirstate.dirstate(self.vfs, self.ui, self.root, |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
522 self._dirstatevalidate) |
13032
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
523 |
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
524 def _dirstatevalidate(self, node): |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
525 try: |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
526 self.changelog.rev(node) |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
527 return node |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
528 except error.LookupError: |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
529 if not self._dirstatevalidatewarned: |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
530 self._dirstatevalidatewarned = True |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
531 self.ui.warn(_("warning: ignoring unknown" |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
532 " working parent %s!\n") % short(node)) |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
533 return nullid |
2155
ff255b41b4aa
support hooks written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2150
diff
changeset
|
534 |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
535 def __getitem__(self, changeid): |
25764
22049b565d57
localrepo: provide workingctx by integer revision
Yuya Nishihara <yuya@tcha.org>
parents:
25667
diff
changeset
|
536 if changeid is None or changeid == wdirrev: |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
537 return context.workingctx(self) |
23630
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
538 if isinstance(changeid, slice): |
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
539 return [context.changectx(self, i) |
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
540 for i in xrange(*changeid.indices(len(self))) |
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
541 if i not in self.changelog.filteredrevs] |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
542 return context.changectx(self, changeid) |
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
543 |
9924
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
544 def __contains__(self, changeid): |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
545 try: |
24320
b9f7f3eeb99c
localrepo: extend "changeid in repo" to return True for workingctx revision
Yuya Nishihara <yuya@tcha.org>
parents:
24306
diff
changeset
|
546 self[changeid] |
b9f7f3eeb99c
localrepo: extend "changeid in repo" to return True for workingctx revision
Yuya Nishihara <yuya@tcha.org>
parents:
24306
diff
changeset
|
547 return True |
9924
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
548 except error.RepoLookupError: |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
549 return False |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
550 |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
551 def __nonzero__(self): |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
552 return True |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
553 |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
554 def __len__(self): |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
555 return len(self.changelog) |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
556 |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
557 def __iter__(self): |
17675
8575f4a2126e
clfilter: remove usage of `range` in favor of iteration over changelog
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17670
diff
changeset
|
558 return iter(self.changelog) |
2155
ff255b41b4aa
support hooks written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2150
diff
changeset
|
559 |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
560 def revs(self, expr, *args): |
27071
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
561 '''Find revisions matching a revset. |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
562 |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
563 The revset is specified as a string ``expr`` that may contain |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
564 %-formatting to escape certain types. See ``revset.formatspec``. |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
565 |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
566 Return a revset.abstractsmartset, which is a list-like interface |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
567 that contains integer revisions. |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
568 ''' |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
569 expr = revset.formatspec(expr, *args) |
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
570 m = revset.match(None, expr) |
24114
fafd9a1284cf
revset: make match function initiate query from full set by default
Yuya Nishihara <yuya@tcha.org>
parents:
24113
diff
changeset
|
571 return m(self) |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
572 |
14902
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
573 def set(self, expr, *args): |
27071
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
574 '''Find revisions matching a revset and emit changectx instances. |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
575 |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
576 This is a convenience wrapper around ``revs()`` that iterates the |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
577 result and is a generator of changectx instances. |
14902
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
578 ''' |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
579 for r in self.revs(expr, *args): |
14902
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
580 yield self[r] |
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
581 |
2673
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
582 def url(self): |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
583 return 'file:' + self.root |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
584 |
1718
c1996b84d4f5
make hook code nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1717
diff
changeset
|
585 def hook(self, name, throw=False, **args): |
21866
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
586 """Call a hook, passing this repo instance. |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
587 |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
588 This a convenience method to aid invoking hooks. Extensions likely |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
589 won't call this unless they have registered a custom hook or are |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
590 replacing code that is expected to call a hook. |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
591 """ |
4622
fff50306e6dd
hooks: separate hook code into a separate module
Matt Mackall <mpm@selenic.com>
parents:
4619
diff
changeset
|
592 return hook.hook(self.ui, self, name, throw, **args) |
487 | 593 |
24234
7977d35df13b
localrepo: back out changeset b08af8f0ac01
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24180
diff
changeset
|
594 @unfilteredmethod |
26323
ed884807dc48
tag: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26322
diff
changeset
|
595 def _tag(self, names, node, message, local, user, date, extra=None, |
21237
0054a77f49df
localrepo: add "editor" argument to "tag()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21186
diff
changeset
|
596 editor=False): |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
597 if isinstance(names, str): |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
598 names = (names,) |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
599 |
11063
eb23c876c111
tag: warn users about tag/branch possible name conflicts
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11047
diff
changeset
|
600 branches = self.branchmap() |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
601 for name in names: |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
602 self.hook('pretag', throw=True, node=hex(node), tag=name, |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
603 local=local) |
11063
eb23c876c111
tag: warn users about tag/branch possible name conflicts
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11047
diff
changeset
|
604 if name in branches: |
eb23c876c111
tag: warn users about tag/branch possible name conflicts
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11047
diff
changeset
|
605 self.ui.warn(_("warning: tag %s conflicts with existing" |
eb23c876c111
tag: warn users about tag/branch possible name conflicts
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11047
diff
changeset
|
606 " branch name\n") % name) |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
607 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
608 def writetags(fp, names, munge, prevtags): |
5985
850494d62674
localrepo._tag: add a seek before writing the new tag
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5882
diff
changeset
|
609 fp.seek(0, 2) |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
610 if prevtags and prevtags[-1] != '\n': |
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
611 fp.write('\n') |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
612 for name in names: |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
613 if munge: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
614 m = munge(name) |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
615 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
616 m = name |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
617 |
16683 | 618 if (self._tagscache.tagtypes and |
619 name in self._tagscache.tagtypes): | |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
620 old = self.tags().get(name, nullid) |
6671
938eddd76237
tag: record tag we're superseding, if any (issue 1102)
Matt Mackall <mpm@selenic.com>
parents:
6647
diff
changeset
|
621 fp.write('%s %s\n' % (hex(old), m)) |
938eddd76237
tag: record tag we're superseding, if any (issue 1102)
Matt Mackall <mpm@selenic.com>
parents:
6647
diff
changeset
|
622 fp.write('%s %s\n' % (hex(node), m)) |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
623 fp.close() |
5081
ea7b982b6c08
Remove trailing spaces
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4932
diff
changeset
|
624 |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
625 prevtags = '' |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
626 if local: |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
627 try: |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
628 fp = self.vfs('localtags', 'r+') |
7875
553aa0cbeab6
cleanup: drop unused assignments
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7848
diff
changeset
|
629 except IOError: |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
630 fp = self.vfs('localtags', 'a') |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
631 else: |
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
632 prevtags = fp.read() |
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
633 |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
634 # local tags are stored in the current charset |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
635 writetags(fp, names, None, prevtags) |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
636 for name in names: |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
637 self.hook('tag', node=hex(node), tag=name, local=local) |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
638 return |
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
639 |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
640 try: |
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
641 fp = self.wfile('.hgtags', 'rb+') |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
642 except IOError as e: |
14646
001788ef4bbb
localrepo: don't attempt to open .hgtags twice if the error isn't ENOENT
Idan Kamara <idankk86@gmail.com>
parents:
14603
diff
changeset
|
643 if e.errno != errno.ENOENT: |
001788ef4bbb
localrepo: don't attempt to open .hgtags twice if the error isn't ENOENT
Idan Kamara <idankk86@gmail.com>
parents:
14603
diff
changeset
|
644 raise |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
645 fp = self.wfile('.hgtags', 'ab') |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
646 else: |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
647 prevtags = fp.read() |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
648 |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
649 # committed tags are stored in UTF-8 |
7948
de377b1a9a84
move encoding bits from util to encoding
Matt Mackall <mpm@selenic.com>
parents:
7930
diff
changeset
|
650 writetags(fp, names, encoding.fromlocal, prevtags) |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
651 |
13400
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13391
diff
changeset
|
652 fp.close() |
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13391
diff
changeset
|
653 |
15929
4091660dc130
tag: invalidate tag cache immediately after adding new tag (issue3210)
Mads Kiilerich <mads@kiilerich.com>
parents:
15922
diff
changeset
|
654 self.invalidatecaches() |
4091660dc130
tag: invalidate tag cache immediately after adding new tag (issue3210)
Mads Kiilerich <mads@kiilerich.com>
parents:
15922
diff
changeset
|
655 |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
656 if '.hgtags' not in self.dirstate: |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11301
diff
changeset
|
657 self[None].add(['.hgtags']) |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
658 |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
659 m = matchmod.exact(self.root, '', ['.hgtags']) |
21237
0054a77f49df
localrepo: add "editor" argument to "tag()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21186
diff
changeset
|
660 tagnode = self.commit(message, user, date, extra=extra, match=m, |
0054a77f49df
localrepo: add "editor" argument to "tag()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21186
diff
changeset
|
661 editor=editor) |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
662 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
663 for name in names: |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
664 self.hook('tag', node=hex(node), tag=name, local=local) |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
665 |
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
666 return tagnode |
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
667 |
21237
0054a77f49df
localrepo: add "editor" argument to "tag()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21186
diff
changeset
|
668 def tag(self, names, node, message, local, user, date, editor=False): |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
669 '''tag a revision with one or more symbolic names. |
2601
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
670 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
671 names is a list of strings or, when adding a single tag, names may be a |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
672 string. |
6334
7016f7fb8fe3
tab/space cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6321
diff
changeset
|
673 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
674 if local is True, the tags are stored in a per-repository file. |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
675 otherwise, they are stored in the .hgtags file, and a new |
2601
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
676 changeset is committed with the change. |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
677 |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
678 keyword arguments: |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
679 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
680 local: whether to store tags in non-version-controlled file |
2601
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
681 (default False) |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
682 |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
683 message: commit message to use if committing |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
684 |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
685 user: name of user to use if committing |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
686 |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
687 date: date tuple to use if committing''' |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
688 |
13133
c1492615cdee
tag: don't check .hgtags status if --local passed
Kevin Bullock <kbullock@ringworld.org>
parents:
13000
diff
changeset
|
689 if not local: |
22679
aa8ecc199892
tag: only check the status of .hgtags
Matt Mackall <mpm@selenic.com>
parents:
22678
diff
changeset
|
690 m = matchmod.exact(self.root, '', ['.hgtags']) |
25149
3f0744eeaeaf
cleanup: use __builtins__.any instead of util.any
Augie Fackler <augie@google.com>
parents:
25119
diff
changeset
|
691 if any(self.status(match=m, unknown=True, ignored=True)): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
692 raise error.Abort(_('working copy of .hgtags is changed'), |
22680 | 693 hint=_('please commit .hgtags manually')) |
2601
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
694 |
7814
4421abf8c85d
tag: force load of tag cache
Matt Mackall <mpm@selenic.com>
parents:
7803
diff
changeset
|
695 self.tags() # instantiate the cache |
21237
0054a77f49df
localrepo: add "editor" argument to "tag()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21186
diff
changeset
|
696 self._tag(names, node, message, local, user, date, editor=editor) |
2601
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
697 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
698 @filteredpropertycache |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
699 def _tagscache(self): |
16683 | 700 '''Returns a tagscache object that contains various tags related |
701 caches.''' | |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
702 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
703 # This simplifies its cache management by having one decorated |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
704 # function (this one) and the rest simply fetch things from it. |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
705 class tagscache(object): |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
706 def __init__(self): |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
707 # These two define the set of tags for this repository. tags |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
708 # maps tag name to node; tagtypes maps tag name to 'global' or |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
709 # 'local'. (Global tags are defined by .hgtags across all |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
710 # heads, and local tags are defined in .hg/localtags.) |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
711 # They constitute the in-memory cache of tags. |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
712 self.tags = self.tagtypes = None |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
713 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
714 self.nodetagscache = self.tagslist = None |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
715 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
716 cache = tagscache() |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
717 cache.tags, cache.tagtypes = self._findtags() |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
718 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
719 return cache |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
720 |
343 | 721 def tags(self): |
722 '''return a mapping of tag to node''' | |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
723 t = {} |
17715
21c503480986
clfilter: do not use tags cache if there are filtered changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17714
diff
changeset
|
724 if self.changelog.filteredrevs: |
21c503480986
clfilter: do not use tags cache if there are filtered changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17714
diff
changeset
|
725 tags, tt = self._findtags() |
21c503480986
clfilter: do not use tags cache if there are filtered changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17714
diff
changeset
|
726 else: |
21c503480986
clfilter: do not use tags cache if there are filtered changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17714
diff
changeset
|
727 tags = self._tagscache.tags |
21c503480986
clfilter: do not use tags cache if there are filtered changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17714
diff
changeset
|
728 for k, v in tags.iteritems(): |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
729 try: |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
730 # ignore tags to unknown nodes |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
731 self.changelog.rev(v) |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
732 t[k] = v |
16679
2950d186a927
parsers: strictly check for 20-byte hashes where they're required
Bryan O'Sullivan <bryano@fb.com>
parents:
16551
diff
changeset
|
733 except (error.LookupError, ValueError): |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
734 pass |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
735 return t |
4210
caff92047e87
Refactor tags code to prepare for improving the algorithm
Matt Mackall <mpm@selenic.com>
parents:
4178
diff
changeset
|
736 |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
737 def _findtags(self): |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
738 '''Do the hard work of finding tags. Return a pair of dicts |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
739 (tags, tagtypes) where tags maps tag name to node, and tagtypes |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
740 maps tag name to a string like \'global\' or \'local\'. |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
741 Subclasses or extensions are free to add their own tags, but |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
742 should be aware that the returned dicts will be retained for the |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
743 duration of the localrepo object.''' |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
744 |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
745 # XXX what tagtype should subclasses/extensions use? Currently |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
746 # mq and bookmarks add tags, but do not set the tagtype at all. |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
747 # Should each extension invent its own tag type? Should there |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
748 # be one tagtype for all such "virtual" tags? Or is the status |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
749 # quo fine? |
4210
caff92047e87
Refactor tags code to prepare for improving the algorithm
Matt Mackall <mpm@selenic.com>
parents:
4178
diff
changeset
|
750 |
9148
b7837f0ed9fe
localrepo: factor updatetags() out of readtags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9147
diff
changeset
|
751 alltags = {} # map tag name to (node, hist) |
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
752 tagtypes = {} |
659 | 753 |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
754 tagsmod.findglobaltags(self.ui, self, alltags, tagtypes) |
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
755 tagsmod.readlocaltags(self.ui, self, alltags, tagtypes) |
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
756 |
9152
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
757 # Build the return dicts. Have to re-encode tag names because |
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
758 # the tags module always uses UTF-8 (in order not to lose info |
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
759 # writing to the cache), but the rest of Mercurial wants them in |
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
760 # local encoding. |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
761 tags = {} |
9147
234a230cc33b
localrepo: improve readability of _findtags(), readtags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9146
diff
changeset
|
762 for (name, (node, hist)) in alltags.iteritems(): |
234a230cc33b
localrepo: improve readability of _findtags(), readtags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9146
diff
changeset
|
763 if node != nullid: |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
764 tags[encoding.tolocal(name)] = node |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
765 tags['tip'] = self.changelog.tip() |
9152
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
766 tagtypes = dict([(encoding.tolocal(name), value) |
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
767 for (name, value) in tagtypes.iteritems()]) |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
768 return (tags, tagtypes) |
343 | 769 |
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
770 def tagtype(self, tagname): |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
771 ''' |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
772 return the type of the given tag. result can be: |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
773 |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
774 'local' : a local tag |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
775 'global' : a global tag |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
776 None : tag does not exist |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
777 ''' |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
778 |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
779 return self._tagscache.tagtypes.get(tagname) |
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
780 |
343 | 781 def tagslist(self): |
782 '''return a list of tags ordered by revision''' | |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
783 if not self._tagscache.tagslist: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
784 l = [] |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
785 for t, n in self.tags().iteritems(): |
22201
269688a398c4
cleanup: fix some list comprehension redefinitions of existing vars
Mads Kiilerich <madski@unity3d.com>
parents:
22080
diff
changeset
|
786 l.append((self.changelog.rev(n), t, n)) |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
787 self._tagscache.tagslist = [(t, n) for r, t, n in sorted(l)] |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
788 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
789 return self._tagscache.tagslist |
343 | 790 |
791 def nodetags(self, node): | |
792 '''return the tags associated with a node''' | |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
793 if not self._tagscache.nodetagscache: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
794 nodetagscache = {} |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
795 for t, n in self._tagscache.tags.iteritems(): |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
796 nodetagscache.setdefault(n, []).append(t) |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
797 for tags in nodetagscache.itervalues(): |
11047
c7dbd6c4877a
tags: return tags in sorted order
Eric Eisner <ede@mit.edu>
parents:
10970
diff
changeset
|
798 tags.sort() |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
799 self._tagscache.nodetagscache = nodetagscache |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
800 return self._tagscache.nodetagscache.get(node, []) |
343 | 801 |
13384
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
802 def nodebookmarks(self, node): |
27166
263db31329a6
localrepo: document nodebookmarks
Augie Fackler <augie@google.com>
parents:
27165
diff
changeset
|
803 """return the list of bookmarks pointing to the specified node""" |
13384
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
804 marks = [] |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
805 for bookmark, n in self._bookmarks.iteritems(): |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
806 if n == node: |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
807 marks.append(bookmark) |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
808 return sorted(marks) |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
809 |
12066
d01e28657429
localrepo: introduce method for explicit branch cache update
Georg Brandl <georg@python.org>
parents:
12035
diff
changeset
|
810 def branchmap(self): |
20245
4edd179fefb8
help: branch names primarily denote the tipmost unclosed branch head
Mads Kiilerich <madski@unity3d.com>
parents:
20226
diff
changeset
|
811 '''returns a dictionary {branch: [branchheads]} with branchheads |
4edd179fefb8
help: branch names primarily denote the tipmost unclosed branch head
Mads Kiilerich <madski@unity3d.com>
parents:
20226
diff
changeset
|
812 ordered by increasing revision number''' |
18189
b9026ba002f6
branchmap: enable caching for filtered version too
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18186
diff
changeset
|
813 branchmap.updatecache(self) |
b9026ba002f6
branchmap: enable caching for filtered version too
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18186
diff
changeset
|
814 return self._branchcaches[self.filtername] |
17714
5210e5a556d9
clfilter: do not use branchmap cache if there are filtered changesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17675
diff
changeset
|
815 |
24373
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
816 @unfilteredmethod |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
817 def revbranchcache(self): |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
818 if not self._revbranchcache: |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
819 self._revbranchcache = branchmap.revbranchcache(self.unfiltered()) |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
820 return self._revbranchcache |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
821 |
23775
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
822 def branchtip(self, branch, ignoremissing=False): |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
823 '''return the tip node for a given branch |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
824 |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
825 If ignoremissing is True, then this method will not raise an error. |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
826 This is helpful for callers that only expect None for a missing branch |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
827 (e.g. namespace). |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
828 |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
829 ''' |
20187
4d6d5ef88538
localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents:
20184
diff
changeset
|
830 try: |
4d6d5ef88538
localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents:
20184
diff
changeset
|
831 return self.branchmap().branchtip(branch) |
4d6d5ef88538
localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents:
20184
diff
changeset
|
832 except KeyError: |
23775
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
833 if not ignoremissing: |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
834 raise error.RepoLookupError(_("unknown branch '%s'") % branch) |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
835 else: |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
836 pass |
16719
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16716
diff
changeset
|
837 |
343 | 838 def lookup(self, key): |
16378
c463f46fe050
localrepo: lookup now goes through context
Matt Mackall <mpm@selenic.com>
parents:
16371
diff
changeset
|
839 return self[key].node() |
67 | 840 |
10960
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
841 def lookupbranch(self, key, remote=None): |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
842 repo = remote or self |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
843 if key in repo.branchmap(): |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
844 return key |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
845 |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
846 repo = (remote and remote.local()) and remote or self |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
847 return repo[key].branch() |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
848 |
13723
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
849 def known(self, nodes): |
27319
b64b6fdc5c9b
discovery: properly filter changeset in 'peer.known' (issue4982)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27291
diff
changeset
|
850 cl = self.changelog |
b64b6fdc5c9b
discovery: properly filter changeset in 'peer.known' (issue4982)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27291
diff
changeset
|
851 nm = cl.nodemap |
b64b6fdc5c9b
discovery: properly filter changeset in 'peer.known' (issue4982)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27291
diff
changeset
|
852 filtered = cl.filteredrevs |
15889
816209eaf963
phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15888
diff
changeset
|
853 result = [] |
816209eaf963
phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15888
diff
changeset
|
854 for n in nodes: |
816209eaf963
phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15888
diff
changeset
|
855 r = nm.get(n) |
27319
b64b6fdc5c9b
discovery: properly filter changeset in 'peer.known' (issue4982)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27291
diff
changeset
|
856 resp = not (r is None or r in filtered) |
15889
816209eaf963
phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15888
diff
changeset
|
857 result.append(resp) |
816209eaf963
phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15888
diff
changeset
|
858 return result |
13723
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
859 |
926 | 860 def local(self): |
14603
68a43fdd7d80
localrepo: local() returns self
Matt Mackall <mpm@selenic.com>
parents:
14549
diff
changeset
|
861 return self |
926 | 862 |
25623
0bee97fa1fa8
publishing: add helper method to localrepo
Matt Mackall <mpm@selenic.com>
parents:
25290
diff
changeset
|
863 def publishing(self): |
25625
ce9e231265c1
publishing: unconditionally trust publishing flag
Matt Mackall <mpm@selenic.com>
parents:
25624
diff
changeset
|
864 # it's safe (and desirable) to trust the publish flag unconditionally |
ce9e231265c1
publishing: unconditionally trust publishing flag
Matt Mackall <mpm@selenic.com>
parents:
25624
diff
changeset
|
865 # so that we don't finalize changes shared between users via ssh or nfs |
ce9e231265c1
publishing: unconditionally trust publishing flag
Matt Mackall <mpm@selenic.com>
parents:
25624
diff
changeset
|
866 return self.ui.configbool('phases', 'publish', True, untrusted=True) |
25623
0bee97fa1fa8
publishing: add helper method to localrepo
Matt Mackall <mpm@selenic.com>
parents:
25290
diff
changeset
|
867 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
868 def cancopy(self): |
20332
a959f7167077
clone: do not turn hidden changeset public on publishing clone (issue3935)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20314
diff
changeset
|
869 # so statichttprepo's override of local() works |
a959f7167077
clone: do not turn hidden changeset public on publishing clone (issue3935)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20314
diff
changeset
|
870 if not self.local(): |
a959f7167077
clone: do not turn hidden changeset public on publishing clone (issue3935)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20314
diff
changeset
|
871 return False |
25624
f0745da75056
publishing: use new helper method
Matt Mackall <mpm@selenic.com>
parents:
25623
diff
changeset
|
872 if not self.publishing(): |
20332
a959f7167077
clone: do not turn hidden changeset public on publishing clone (issue3935)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20314
diff
changeset
|
873 return True |
a959f7167077
clone: do not turn hidden changeset public on publishing clone (issue3935)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20314
diff
changeset
|
874 # if publishing we can't copy if there is filtered content |
a959f7167077
clone: do not turn hidden changeset public on publishing clone (issue3935)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
20314
diff
changeset
|
875 return not self.filtered('visible').changelog.filteredrevs |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
876 |
23666
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
877 def shared(self): |
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
878 '''the type of shared repository (None if not shared)''' |
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
879 if self.sharedpath != self.path: |
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
880 return 'store' |
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
881 return None |
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
882 |
22362
c9b32c6a2944
localrepo: make it possible to pass multiple path elements to join and wjoin
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
22342
diff
changeset
|
883 def join(self, f, *insidef): |
23667
f8df993516d0
localrepo: use the vfs join method to implement the localrepo join method
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23666
diff
changeset
|
884 return self.vfs.join(os.path.join(f, *insidef)) |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
885 |
22362
c9b32c6a2944
localrepo: make it possible to pass multiple path elements to join and wjoin
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
22342
diff
changeset
|
886 def wjoin(self, f, *insidef): |
23714
e3a0e7e21f54
localrepo: use vfs.reljoin rather than os.path.join in the localrepository class
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23710
diff
changeset
|
887 return self.vfs.reljoin(self.root, f, *insidef) |
244 | 888 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
889 def file(self, f): |
1615
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
890 if f[0] == '/': |
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
891 f = f[1:] |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
892 return filelog.filelog(self.svfs, f) |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
893 |
27277
07ae7e8c8ac9
localrepo: reinstate localrepo.parents with a deprecation warning
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27233
diff
changeset
|
894 def parents(self, changeid=None): |
07ae7e8c8ac9
localrepo: reinstate localrepo.parents with a deprecation warning
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27233
diff
changeset
|
895 '''get list of changectxs for parents of changeid''' |
07ae7e8c8ac9
localrepo: reinstate localrepo.parents with a deprecation warning
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27233
diff
changeset
|
896 msg = 'repo.parents() is deprecated, use repo[%r].parents()' % changeid |
07ae7e8c8ac9
localrepo: reinstate localrepo.parents with a deprecation warning
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27233
diff
changeset
|
897 self.ui.deprecwarn(msg, '3.7') |
07ae7e8c8ac9
localrepo: reinstate localrepo.parents with a deprecation warning
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27233
diff
changeset
|
898 return self[changeid].parents() |
07ae7e8c8ac9
localrepo: reinstate localrepo.parents with a deprecation warning
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27233
diff
changeset
|
899 |
6739
c9fbd6ec3489
context: avoid using None for working parent
Matt Mackall <mpm@selenic.com>
parents:
6736
diff
changeset
|
900 def changectx(self, changeid): |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
901 return self[changeid] |
3218
8d4855fd9d7b
merge: use new working context object in update
Matt Mackall <mpm@selenic.com>
parents:
3164
diff
changeset
|
902 |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
903 def setparents(self, p1, p2=nullid): |
22405
6f63c47cbb86
dirstate: wrap setparent calls with begin/endparentchange (issue4353)
Durham Goode <durham@fb.com>
parents:
22404
diff
changeset
|
904 self.dirstate.beginparentchange() |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
905 copies = self.dirstate.setparents(p1, p2) |
18739
5b7175377bab
setparents: drop copies from dropped p2 (issue3843)
Matt Mackall <mpm@selenic.com>
parents:
18520
diff
changeset
|
906 pctx = self[p1] |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
907 if copies: |
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
908 # Adjust copy records, the dirstate cannot do it, it |
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
909 # requires access to parents manifests. Preserve them |
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
910 # only for entries added to first parent. |
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
911 for f in copies: |
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
912 if f not in pctx and copies[f] in pctx: |
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
913 self.dirstate.copy(copies[f], f) |
18739
5b7175377bab
setparents: drop copies from dropped p2 (issue3843)
Matt Mackall <mpm@selenic.com>
parents:
18520
diff
changeset
|
914 if p2 == nullid: |
5b7175377bab
setparents: drop copies from dropped p2 (issue3843)
Matt Mackall <mpm@selenic.com>
parents:
18520
diff
changeset
|
915 for f, s in sorted(self.dirstate.copies().items()): |
5b7175377bab
setparents: drop copies from dropped p2 (issue3843)
Matt Mackall <mpm@selenic.com>
parents:
18520
diff
changeset
|
916 if f not in pctx and s not in pctx: |
5b7175377bab
setparents: drop copies from dropped p2 (issue3843)
Matt Mackall <mpm@selenic.com>
parents:
18520
diff
changeset
|
917 self.dirstate.copy(None, f) |
22405
6f63c47cbb86
dirstate: wrap setparent calls with begin/endparentchange (issue4353)
Durham Goode <durham@fb.com>
parents:
22404
diff
changeset
|
918 self.dirstate.endparentchange() |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
919 |
2564
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
920 def filectx(self, path, changeid=None, fileid=None): |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
921 """changeid can be a changeset revision, node, or tag. |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
922 fileid can be a file revision or node.""" |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
923 return context.filectx(self, path, changeid, fileid) |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
924 |
627 | 925 def getcwd(self): |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
839
diff
changeset
|
926 return self.dirstate.getcwd() |
627 | 927 |
4525
78b6add1f966
Add dirstate.pathto and localrepo.pathto.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4516
diff
changeset
|
928 def pathto(self, f, cwd=None): |
78b6add1f966
Add dirstate.pathto and localrepo.pathto.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4516
diff
changeset
|
929 return self.dirstate.pathto(f, cwd) |
78b6add1f966
Add dirstate.pathto and localrepo.pathto.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4516
diff
changeset
|
930 |
291
2c4f2be05587
Add wopener for opening files in the working directory
mpm@selenic.com
parents:
288
diff
changeset
|
931 def wfile(self, f, mode='r'): |
23854
f6070d3a9cb8
localrepo: remove all internal uses of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23853
diff
changeset
|
932 return self.wvfs(f, mode) |
291
2c4f2be05587
Add wopener for opening files in the working directory
mpm@selenic.com
parents:
288
diff
changeset
|
933 |
4275
81402b2b294d
use os.path.islink instead of util.is_link; remove util.is_link
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4273
diff
changeset
|
934 def _link(self, f): |
18949
138978f20180
localrepo: use "vfs.islink()" instead of "os.path.islink()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18948
diff
changeset
|
935 return self.wvfs.islink(f) |
4275
81402b2b294d
use os.path.islink instead of util.is_link; remove util.is_link
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4273
diff
changeset
|
936 |
11698
9df481f8036d
localrepo: refactor filter computation
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11669
diff
changeset
|
937 def _loadfilter(self, filter): |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
938 if filter not in self.filterpats: |
1258 | 939 l = [] |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
940 for pat, cmd in self.ui.configitems(filter): |
7226
b71a52f101dc
Make it possible to disable filtering for a pattern.
Mads Kiilerich <mads@kiilerich.com>
parents:
7208
diff
changeset
|
941 if cmd == '!': |
b71a52f101dc
Make it possible to disable filtering for a pattern.
Mads Kiilerich <mads@kiilerich.com>
parents:
7208
diff
changeset
|
942 continue |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
943 mf = matchmod.match(self.root, '', [pat]) |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
944 fn = None |
6066
f3a8b5360100
Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents:
6065
diff
changeset
|
945 params = cmd |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
946 for name, filterfn in self._datafilters.iteritems(): |
6210
942287cb1f57
Removed trailing spaces from everything except test output
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6201
diff
changeset
|
947 if cmd.startswith(name): |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
948 fn = filterfn |
6066
f3a8b5360100
Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents:
6065
diff
changeset
|
949 params = cmd[len(name):].lstrip() |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
950 break |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
951 if not fn: |
5967
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
952 fn = lambda s, c, **kwargs: util.filter(s, c) |
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
953 # Wrap old filters not supporting keyword arguments |
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
954 if not inspect.getargspec(fn)[2]: |
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
955 oldfn = fn |
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
956 fn = lambda s, c, **kwargs: oldfn(s, c) |
6066
f3a8b5360100
Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents:
6065
diff
changeset
|
957 l.append((mf, fn, params)) |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
958 self.filterpats[filter] = l |
12706
9ca08fbb750a
localrepo: have _loadfilter return the loaded filter patterns
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12687
diff
changeset
|
959 return self.filterpats[filter] |
1258 | 960 |
12707
2216ab103ea8
localrepo: load filter patterns outside of _filter
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12706
diff
changeset
|
961 def _filter(self, filterpats, filename, data): |
2216ab103ea8
localrepo: load filter patterns outside of _filter
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12706
diff
changeset
|
962 for mf, fn, cmd in filterpats: |
1258 | 963 if mf(filename): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9437
diff
changeset
|
964 self.ui.debug("filtering %s through %s\n" % (filename, cmd)) |
5967
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
965 data = fn(data, cmd, ui=self.ui, repo=self, filename=filename) |
1258 | 966 break |
967 | |
968 return data | |
1019
a9cca981c423
Create helper functions for I/O to files in the working directory
mpm@selenic.com
parents:
1013
diff
changeset
|
969 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
970 @unfilteredpropertycache |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
971 def _encodefilterpats(self): |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
972 return self._loadfilter('encode') |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
973 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
974 @unfilteredpropertycache |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
975 def _decodefilterpats(self): |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
976 return self._loadfilter('decode') |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
977 |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
978 def adddatafilter(self, name, filter): |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
979 self._datafilters[name] = filter |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
980 |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
981 def wread(self, filename): |
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
982 if self._link(filename): |
18950
647e3b0c8751
localrepo: use "vfs.readlink()" instead of "os.readlink()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18949
diff
changeset
|
983 data = self.wvfs.readlink(filename) |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
984 else: |
23854
f6070d3a9cb8
localrepo: remove all internal uses of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23853
diff
changeset
|
985 data = self.wvfs.read(filename) |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
986 return self._filter(self._encodefilterpats, filename, data) |
1258 | 987 |
4006
67982d3ee76c
symlinks: add flags param to wwrite
Matt Mackall <mpm@selenic.com>
parents:
4005
diff
changeset
|
988 def wwrite(self, filename, data, flags): |
24843
21b33f0460e0
revert: apply normallookup on reverted file if size isn't changed (issue4583)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24825
diff
changeset
|
989 """write ``data`` into ``filename`` in the working directory |
21b33f0460e0
revert: apply normallookup on reverted file if size isn't changed (issue4583)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24825
diff
changeset
|
990 |
21b33f0460e0
revert: apply normallookup on reverted file if size isn't changed (issue4583)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24825
diff
changeset
|
991 This returns length of written (maybe decoded) data. |
21b33f0460e0
revert: apply normallookup on reverted file if size isn't changed (issue4583)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24825
diff
changeset
|
992 """ |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
993 data = self._filter(self._decodefilterpats, filename, data) |
6877
1d38f3605b20
util: set_flags shouldn't know about repo flag formats
Matt Mackall <mpm@selenic.com>
parents:
6875
diff
changeset
|
994 if 'l' in flags: |
23854
f6070d3a9cb8
localrepo: remove all internal uses of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23853
diff
changeset
|
995 self.wvfs.symlink(data, filename) |
6877
1d38f3605b20
util: set_flags shouldn't know about repo flag formats
Matt Mackall <mpm@selenic.com>
parents:
6875
diff
changeset
|
996 else: |
23854
f6070d3a9cb8
localrepo: remove all internal uses of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23853
diff
changeset
|
997 self.wvfs.write(filename, data) |
6877
1d38f3605b20
util: set_flags shouldn't know about repo flag formats
Matt Mackall <mpm@selenic.com>
parents:
6875
diff
changeset
|
998 if 'x' in flags: |
18951
d13916a00b7e
localrepo: use "vfs.setflags()" instead of "util.setflags()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18950
diff
changeset
|
999 self.wvfs.setflags(filename, False, True) |
24843
21b33f0460e0
revert: apply normallookup on reverted file if size isn't changed (issue4583)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24825
diff
changeset
|
1000 return len(data) |
1258 | 1001 |
4005
656e06eebda7
replace filehandle version of wwrite with wwritedata
Matt Mackall <mpm@selenic.com>
parents:
4004
diff
changeset
|
1002 def wwritedata(self, filename, data): |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
1003 return self._filter(self._decodefilterpats, filename, data) |
1019
a9cca981c423
Create helper functions for I/O to files in the working directory
mpm@selenic.com
parents:
1013
diff
changeset
|
1004 |
23379
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1005 def currenttransaction(self): |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1006 """return the current transaction or None if non exists""" |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1007 if self._transref: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1008 tr = self._transref() |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1009 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1010 tr = None |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1011 |
8072
ecf7795479d5
transaction: support multiple, separate transactions
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7948
diff
changeset
|
1012 if tr and tr.running(): |
23379
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1013 return tr |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1014 return None |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1015 |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1016 def transaction(self, desc, report=None): |
25290
8f88f768e24c
devel: rename 'all' to 'all-warnings' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25274
diff
changeset
|
1017 if (self.ui.configbool('devel', 'all-warnings') |
24388
026f8af88e49
devel: also warn about transaction started without a lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24386
diff
changeset
|
1018 or self.ui.configbool('devel', 'check-locks')): |
026f8af88e49
devel: also warn about transaction started without a lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24386
diff
changeset
|
1019 l = self._lockref and self._lockref() |
026f8af88e49
devel: also warn about transaction started without a lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24386
diff
changeset
|
1020 if l is None or not l.held: |
25629
52e5f68d8363
devel-warn: move the develwarn function as a method of the ui object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25625
diff
changeset
|
1021 self.ui.develwarn('transaction with no lock') |
23379
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1022 tr = self.currenttransaction() |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1023 if tr is not None: |
8072
ecf7795479d5
transaction: support multiple, separate transactions
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7948
diff
changeset
|
1024 return tr.nest() |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
1025 |
5865
e7127f669edb
transactions: don't show a backtrace when journal exists
Matt Mackall <mpm@selenic.com>
parents:
5814
diff
changeset
|
1026 # abort here if the journal already exists |
18947
9b82f93e3a7a
localrepo: use "vfs.exists()" instead of "os.path.exists()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18946
diff
changeset
|
1027 if self.svfs.exists("journal"): |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1028 raise error.RepoError( |
21274
3b4c75690206
journal: set Abort hint when failing due to an abandoned transaction
Johan Bjork <jbjoerk@gmail.com>
parents:
21237
diff
changeset
|
1029 _("abandoned transaction found"), |
3b4c75690206
journal: set Abort hint when failing due to an abandoned transaction
Johan Bjork <jbjoerk@gmail.com>
parents:
21237
diff
changeset
|
1030 hint=_("run 'hg recover' to clean up transaction")) |
5865
e7127f669edb
transactions: don't show a backtrace when journal exists
Matt Mackall <mpm@selenic.com>
parents:
5814
diff
changeset
|
1031 |
25878
800e090e9c64
localrepo: make journal.dirstate contain in-memory changes before transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25841
diff
changeset
|
1032 # make journal.dirstate contain in-memory changes at this point |
26748
5ba0a99ff27f
dirstate: make dirstate.write() callers pass transaction object to it
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26741
diff
changeset
|
1033 self.dirstate.write(None) |
25878
800e090e9c64
localrepo: make journal.dirstate contain in-memory changes before transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25841
diff
changeset
|
1034 |
25267
69c5cab0b893
transaction: separate calculating TXNID from creating transaction object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25219
diff
changeset
|
1035 idbase = "%.40f#%f" % (random.random(), time.time()) |
69c5cab0b893
transaction: separate calculating TXNID from creating transaction object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25219
diff
changeset
|
1036 txnid = 'TXN:' + util.sha1(idbase).hexdigest() |
25268
a973b050621d
localrepo: pass hook argument txnid to pretxnopen hooks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25267
diff
changeset
|
1037 self.hook('pretxnopen', throw=True, txnname=desc, txnid=txnid) |
24281
e9ede9b4c2f8
hook: have a generic hook for transaction opening
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24234
diff
changeset
|
1038 |
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
1039 self._writejournal(desc) |
18952
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1040 renames = [(vfs, x, undoname(x)) for vfs, x in self._journalfiles()] |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1041 if report: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1042 rp = report |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1043 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1044 rp = self.ui.warn |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1045 vfsmap = {'plain': self.vfs} # root of .hg/ |
24284
ff14b26fe5f4
hook: add a generic hook right before we commit a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24282
diff
changeset
|
1046 # we must avoid cyclic reference between repo and transaction. |
ff14b26fe5f4
hook: add a generic hook right before we commit a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24282
diff
changeset
|
1047 reporef = weakref.ref(self) |
ff14b26fe5f4
hook: add a generic hook right before we commit a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24282
diff
changeset
|
1048 def validate(tr): |
ff14b26fe5f4
hook: add a generic hook right before we commit a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24282
diff
changeset
|
1049 """will run pre-closing hooks""" |
26751
520defbc0335
hook: centralize passing HG_PENDING to external hook process
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26748
diff
changeset
|
1050 reporef().hook('pretxnclose', throw=True, |
25219
2664f536a97e
localrepo: use correct argument name for pretxnclose hooks (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25218
diff
changeset
|
1051 txnname=desc, **tr.hookargs) |
26577
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1052 def releasefn(tr, success): |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1053 repo = reporef() |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1054 if success: |
26634
09bb1ee7e73e
dirstate: make writing in-memory changes aware of transaction activity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26631
diff
changeset
|
1055 # this should be explicitly invoked here, because |
09bb1ee7e73e
dirstate: make writing in-memory changes aware of transaction activity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26631
diff
changeset
|
1056 # in-memory changes aren't written out at closing |
09bb1ee7e73e
dirstate: make writing in-memory changes aware of transaction activity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26631
diff
changeset
|
1057 # transaction, if tr.addfilegenerator (via |
09bb1ee7e73e
dirstate: make writing in-memory changes aware of transaction activity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26631
diff
changeset
|
1058 # dirstate.write or so) isn't invoked while |
09bb1ee7e73e
dirstate: make writing in-memory changes aware of transaction activity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26631
diff
changeset
|
1059 # transaction running |
26748
5ba0a99ff27f
dirstate: make dirstate.write() callers pass transaction object to it
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26741
diff
changeset
|
1060 repo.dirstate.write(None) |
26577
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1061 else: |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1062 # prevent in-memory changes from being written out at |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1063 # the end of outer wlock scope or so |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1064 repo.dirstate.invalidate() |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1065 |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1066 # discard all changes (including ones already written |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1067 # out) in this transaction |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1068 repo.vfs.rename('journal.dirstate', 'dirstate') |
24284
ff14b26fe5f4
hook: add a generic hook right before we commit a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24282
diff
changeset
|
1069 |
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1070 repo.invalidate(clearfilecache=True) |
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1071 |
25667
a69bb29b9638
localrepo: kill off sopener (API)
Siddharth Agarwal <sid0@fb.com>
parents:
25660
diff
changeset
|
1072 tr = transaction.transaction(rp, self.svfs, vfsmap, |
20087
cf3b8285af00
transaction: take journal file path relative to vfs to use file API via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20082
diff
changeset
|
1073 "journal", |
23903
426607be9c69
transaction: pass the name of the "undo" journal to the transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23902
diff
changeset
|
1074 "undo", |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1075 aftertrans(renames), |
24284
ff14b26fe5f4
hook: add a generic hook right before we commit a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24282
diff
changeset
|
1076 self.store.createmode, |
26577
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1077 validator=validate, |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1078 releasefn=releasefn) |
24740
d283517b260b
transaction: introduce a transaction ID, to be available to all hooks
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24739
diff
changeset
|
1079 |
25267
69c5cab0b893
transaction: separate calculating TXNID from creating transaction object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25219
diff
changeset
|
1080 tr.hookargs['txnid'] = txnid |
23511
acc73273b27e
fncache: document the fact fncache is outdate at hook run time
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23510
diff
changeset
|
1081 # note: writing the fncache only during finalize mean that the file is |
acc73273b27e
fncache: document the fact fncache is outdate at hook run time
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23510
diff
changeset
|
1082 # outdated when running hooks. As fncache is used for streaming clone, |
acc73273b27e
fncache: document the fact fncache is outdate at hook run time
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23510
diff
changeset
|
1083 # this is not expected to break anything that happen during the hooks. |
acc73273b27e
fncache: document the fact fncache is outdate at hook run time
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23510
diff
changeset
|
1084 tr.addfinalize('flush-fncache', self.store.write) |
24282
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
1085 def txnclosehook(tr2): |
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
1086 """To be run if transaction is successful, will schedule a hook run |
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
1087 """ |
27907
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1088 # Don't reference tr2 in hook() so we don't hold a reference. |
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1089 # This reduces memory consumption when there are multiple |
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1090 # transactions per lock. This can likely go away if issue5045 |
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1091 # fixes the function accumulation. |
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1092 hookargs = tr2.hookargs |
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1093 |
24282
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
1094 def hook(): |
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
1095 reporef().hook('txnclose', throw=False, txnname=desc, |
27907
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1096 **hookargs) |
24282
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
1097 reporef()._afterlock(hook) |
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
1098 tr.addfinalize('txnclose-hook', txnclosehook) |
24792
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1099 def txnaborthook(tr2): |
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1100 """To be run if transaction is aborted |
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1101 """ |
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1102 reporef().hook('txnabort', throw=False, txnname=desc, |
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1103 **tr2.hookargs) |
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1104 tr.addabort('txnabort-hook', txnaborthook) |
26251
5c0f5db65c6b
localrepo: refresh filecache stats only if transaction finished successfully
Yuya Nishihara <yuya@tcha.org>
parents:
26250
diff
changeset
|
1105 # avoid eager cache invalidation. in-memory data should be identical |
5c0f5db65c6b
localrepo: refresh filecache stats only if transaction finished successfully
Yuya Nishihara <yuya@tcha.org>
parents:
26250
diff
changeset
|
1106 # to stored data if transaction has no error. |
5c0f5db65c6b
localrepo: refresh filecache stats only if transaction finished successfully
Yuya Nishihara <yuya@tcha.org>
parents:
26250
diff
changeset
|
1107 tr.addpostclose('refresh-filecachestats', self._refreshfilecachestats) |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1108 self._transref = weakref.ref(tr) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1109 return tr |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1110 |
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
1111 def _journalfiles(self): |
18952
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1112 return ((self.svfs, 'journal'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1113 (self.vfs, 'journal.dirstate'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1114 (self.vfs, 'journal.branch'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1115 (self.vfs, 'journal.desc'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1116 (self.vfs, 'journal.bookmarks'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1117 (self.svfs, 'journal.phaseroots')) |
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
1118 |
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
1119 def undofiles(self): |
20975
37cdf1fca1b2
localrepo: make "undofiles()" return list of tuples "(vfs, relative filename)"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20969
diff
changeset
|
1120 return [(vfs, undoname(x)) for vfs, x in self._journalfiles()] |
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
1121 |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1122 def _writejournal(self, desc): |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1123 self.vfs.write("journal.dirstate", |
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1124 self.vfs.tryread("dirstate")) |
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1125 self.vfs.write("journal.branch", |
14168
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14162
diff
changeset
|
1126 encoding.fromlocal(self.dirstate.branch())) |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1127 self.vfs.write("journal.desc", |
14168
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14162
diff
changeset
|
1128 "%d\n%s\n" % (len(self), desc)) |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1129 self.vfs.write("journal.bookmarks", |
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1130 self.vfs.tryread("bookmarks")) |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
1131 self.svfs.write("journal.phaseroots", |
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
1132 self.svfs.tryread("phaseroots")) |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1133 |
210 | 1134 def recover(self): |
27846
63821023ea79
with: use context manager in localrepo recover
Bryan O'Sullivan <bryano@fb.com>
parents:
27698
diff
changeset
|
1135 with self.lock(): |
18947
9b82f93e3a7a
localrepo: use "vfs.exists()" instead of "os.path.exists()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18946
diff
changeset
|
1136 if self.svfs.exists("journal"): |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1137 self.ui.status(_("rolling back interrupted transaction\n")) |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
1138 vfsmap = {'': self.svfs, |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1139 'plain': self.vfs,} |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
1140 transaction.rollback(self.svfs, vfsmap, "journal", |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1141 self.ui.warn) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1142 self.invalidate() |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1143 return True |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1144 else: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1145 self.ui.warn(_("no interrupted transaction available\n")) |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1146 return False |
210 | 1147 |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1148 def rollback(self, dryrun=False, force=False): |
26631
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1149 wlock = lock = dsguard = None |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1150 try: |
1712
21dcf38e5d7d
Allow callers to pass in the dirstate lock in most localrepo.py funcs.
mason@suse.com
parents:
1709
diff
changeset
|
1151 wlock = self.wlock() |
4438
3900f684a150
Fix hg import --exact bug that hangs hg on failure.
Eric Hopper <hopper@omnifarious.org>
parents:
4417
diff
changeset
|
1152 lock = self.lock() |
18947
9b82f93e3a7a
localrepo: use "vfs.exists()" instead of "os.path.exists()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18946
diff
changeset
|
1153 if self.svfs.exists("undo"): |
26631
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1154 dsguard = cmdutil.dirstateguard(self, 'rollback') |
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1155 |
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1156 return self._rollback(dryrun, force, dsguard) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1157 else: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1158 self.ui.warn(_("no rollback information available\n")) |
11177
6a64813276ed
commands: initial audit of exit codes
Matt Mackall <mpm@selenic.com>
parents:
11174
diff
changeset
|
1159 return 1 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1160 finally: |
26631
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1161 release(dsguard, lock, wlock) |
162 | 1162 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
1163 @unfilteredmethod # Until we get smarter cache management |
26631
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1164 def _rollback(self, dryrun, force, dsguard): |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1165 ui = self.ui |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
1166 try: |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1167 args = self.vfs.read('undo.desc').splitlines() |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1168 (oldlen, desc, detail) = (int(args[0]), args[1], None) |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1169 if len(args) >= 3: |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1170 detail = args[2] |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1171 oldtip = oldlen - 1 |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1172 |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1173 if detail and ui.verbose: |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1174 msg = (_('repository tip rolled back to revision %s' |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1175 ' (undo %s: %s)\n') |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1176 % (oldtip, desc, detail)) |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1177 else: |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1178 msg = (_('repository tip rolled back to revision %s' |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1179 ' (undo %s)\n') |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1180 % (oldtip, desc)) |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
1181 except IOError: |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1182 msg = _('rolling back unknown transaction\n') |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1183 desc = None |
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1184 |
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1185 if not force and self['.'] != self['tip'] and desc == 'commit': |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
1186 raise error.Abort( |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1187 _('rollback of last commit while not checked out ' |
15187
0292f88d3b86
rollback: use a hint for force
Matt Mackall <mpm@selenic.com>
parents:
15183
diff
changeset
|
1188 'may lose data'), hint=_('use -f to force')) |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1189 |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1190 ui.status(msg) |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
1191 if dryrun: |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
1192 return 0 |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1193 |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1194 parents = self.dirstate.parents() |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1195 self.destroying() |
23902
bfa52f4ecf54
rollback: have an empty entry for the vfsmap in rollback
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23854
diff
changeset
|
1196 vfsmap = {'plain': self.vfs, '': self.svfs} |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
1197 transaction.rollback(self.svfs, vfsmap, 'undo', ui.warn) |
18947
9b82f93e3a7a
localrepo: use "vfs.exists()" instead of "os.path.exists()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18946
diff
changeset
|
1198 if self.vfs.exists('undo.bookmarks'): |
18948
2f05fa162316
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18947
diff
changeset
|
1199 self.vfs.rename('undo.bookmarks', 'bookmarks') |
18947
9b82f93e3a7a
localrepo: use "vfs.exists()" instead of "os.path.exists()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18946
diff
changeset
|
1200 if self.svfs.exists('undo.phaseroots'): |
18948
2f05fa162316
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18947
diff
changeset
|
1201 self.svfs.rename('undo.phaseroots', 'phaseroots') |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
1202 self.invalidate() |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1203 |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1204 parentgone = (parents[0] not in self.changelog.nodemap or |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1205 parents[1] not in self.changelog.nodemap) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1206 if parentgone: |
26631
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1207 # prevent dirstateguard from overwriting already restored one |
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1208 dsguard.close() |
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1209 |
18948
2f05fa162316
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18947
diff
changeset
|
1210 self.vfs.rename('undo.dirstate', 'dirstate') |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1211 try: |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1212 branch = self.vfs.read('undo.branch') |
17360
935831597e16
rollback: write dirstate branch with correct encoding
Sune Foldager <cryo@cyanite.org>
parents:
17324
diff
changeset
|
1213 self.dirstate.setbranch(encoding.tolocal(branch)) |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1214 except IOError: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1215 ui.warn(_('named branch could not be reset: ' |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1216 'current branch is still \'%s\'\n') |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1217 % self.dirstate.branch()) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1218 |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1219 self.dirstate.invalidate() |
27167
3fe8cb40c9c5
commands: inline definition of localrepo.parents() and drop the method (API)
Augie Fackler <augie@google.com>
parents:
27166
diff
changeset
|
1220 parents = tuple([p.rev() for p in self[None].parents()]) |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1221 if len(parents) > 1: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1222 ui.status(_('working directory now based on ' |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1223 'revisions %d and %d\n') % parents) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1224 else: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1225 ui.status(_('working directory now based on ' |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1226 'revision %d\n') % parents) |
26989
a65ea44f163e
localrepo: switch to mergestate.clean()
Siddharth Agarwal <sid0@fb.com>
parents:
26907
diff
changeset
|
1227 mergemod.mergestate.clean(self, self['.'].node()) |
24784
59406b8b1303
rollback: clear resolve state (issue4593)
Matt Mackall <mpm@selenic.com>
parents:
24750
diff
changeset
|
1228 |
17013
c8eda7bbdcab
strip: incrementally update the branchheads cache after a strip
Joshua Redstone <joshua.redstone@fb.com>
parents:
17012
diff
changeset
|
1229 # TODO: if we know which new heads may result from this rollback, pass |
c8eda7bbdcab
strip: incrementally update the branchheads cache after a strip
Joshua Redstone <joshua.redstone@fb.com>
parents:
17012
diff
changeset
|
1230 # them to destroy(), which will prevent the branchhead cache from being |
c8eda7bbdcab
strip: incrementally update the branchheads cache after a strip
Joshua Redstone <joshua.redstone@fb.com>
parents:
17012
diff
changeset
|
1231 # invalidated. |
15604
b8d8599410da
rollback: always call destroyed() (regression from 1.9)
Greg Ward <greg-hg@gerg.ca>
parents:
15381
diff
changeset
|
1232 self.destroyed() |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
1233 return 0 |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
1234 |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
1235 def invalidatecaches(self): |
15988
827e0126738d
localrepo: delete _phaserev when invalidating caches
Idan Kamara <idankk86@gmail.com>
parents:
15987
diff
changeset
|
1236 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
1237 if '_tagscache' in vars(self): |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
1238 # can't use delattr on proxy |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
1239 del self.__dict__['_tagscache'] |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
1240 |
18189
b9026ba002f6
branchmap: enable caching for filtered version too
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18186
diff
changeset
|
1241 self.unfiltered()._branchcaches.clear() |
18105
312262ebc223
cache: group obscache and revsfiltercache invalidation in a single function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18101
diff
changeset
|
1242 self.invalidatevolatilesets() |
312262ebc223
cache: group obscache and revsfiltercache invalidation in a single function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18101
diff
changeset
|
1243 |
312262ebc223
cache: group obscache and revsfiltercache invalidation in a single function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18101
diff
changeset
|
1244 def invalidatevolatilesets(self): |
312262ebc223
cache: group obscache and revsfiltercache invalidation in a single function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18101
diff
changeset
|
1245 self.filteredrevcache.clear() |
17469
fb72eec7efd8
obsolete: introduce caches for all meaningful sets
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17434
diff
changeset
|
1246 obsolete.clearobscaches(self) |
1784
2e0a288ca93e
revalidate revlog data after locking the repo (issue132)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1782
diff
changeset
|
1247 |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1248 def invalidatedirstate(self): |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1249 '''Invalidates the dirstate, causing the next call to dirstate |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1250 to check if it was modified since the last time it was read, |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1251 rereading it if it has. |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1252 |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1253 This is different to dirstate.invalidate() that it doesn't always |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1254 rereads the dirstate. Use dirstate.invalidate() if you want to |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1255 explicitly read the dirstate again (i.e. restoring it to a previous |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1256 known good state).''' |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
1257 if hasunfilteredcache(self, 'dirstate'): |
16200
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1258 for k in self.dirstate._filecache: |
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1259 try: |
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1260 delattr(self.dirstate, k) |
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1261 except AttributeError: |
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1262 pass |
17997
6089956e9880
clfilter: ensure cache invalidation is done on the main unfiltered repo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17996
diff
changeset
|
1263 delattr(self.unfiltered(), 'dirstate') |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1264 |
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1265 def invalidate(self, clearfilecache=False): |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18520
diff
changeset
|
1266 unfiltered = self.unfiltered() # all file caches are stored unfiltered |
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1267 for k in self._filecache.keys(): |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1268 # dirstate is invalidated separately in invalidatedirstate() |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1269 if k == 'dirstate': |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1270 continue |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1271 |
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1272 if clearfilecache: |
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1273 del self._filecache[k] |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1274 try: |
17997
6089956e9880
clfilter: ensure cache invalidation is done on the main unfiltered repo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17996
diff
changeset
|
1275 delattr(unfiltered, k) |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1276 except AttributeError: |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1277 pass |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
1278 self.invalidatecaches() |
20884
2efdd186925d
caches: invalidate store caches when lock is taken
Durham Goode <durham@fb.com>
parents:
20883
diff
changeset
|
1279 self.store.invalidatecaches() |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
1280 |
20627
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1281 def invalidateall(self): |
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1282 '''Fully invalidates both store and non-store parts, causing the |
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1283 subsequent operation to reread any outside changes.''' |
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1284 # extension should hook this to invalidate its caches |
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1285 self.invalidate() |
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1286 self.invalidatedirstate() |
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1287 |
26251
5c0f5db65c6b
localrepo: refresh filecache stats only if transaction finished successfully
Yuya Nishihara <yuya@tcha.org>
parents:
26250
diff
changeset
|
1288 def _refreshfilecachestats(self, tr): |
26250
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
1289 """Reload stats of cached files so that they are flagged as valid""" |
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
1290 for k, ce in self._filecache.items(): |
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
1291 if k == 'dirstate' or k not in self.__dict__: |
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
1292 continue |
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
1293 ce.refresh() |
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
1294 |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1295 def _lock(self, vfs, lockname, wait, releasefn, acquirefn, desc, |
26499
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1296 inheritchecker=None, parentenvvar=None): |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1297 parentlock = None |
26472
406a654b41cb
localrepo: add a note about parentenvvar
Siddharth Agarwal <sid0@fb.com>
parents:
26449
diff
changeset
|
1298 # the contents of parentenvvar are used by the underlying lock to |
406a654b41cb
localrepo: add a note about parentenvvar
Siddharth Agarwal <sid0@fb.com>
parents:
26449
diff
changeset
|
1299 # determine whether it can be inherited |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1300 if parentenvvar is not None: |
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1301 parentlock = os.environ.get(parentenvvar) |
161 | 1302 try: |
26321
db4c192cb9b3
lock: move acquirefn call to inside the lock
Siddharth Agarwal <sid0@fb.com>
parents:
26320
diff
changeset
|
1303 l = lockmod.lock(vfs, lockname, 0, releasefn=releasefn, |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1304 acquirefn=acquirefn, desc=desc, |
26499
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1305 inheritchecker=inheritchecker, |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1306 parentlock=parentlock) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
1307 except error.LockHeld as inst: |
1531
2ba8bf7defda
add localrepo.wlock for protecting the dirstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1516
diff
changeset
|
1308 if not wait: |
2016
ff5c9a92f556
fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1998
diff
changeset
|
1309 raise |
3688
d92dad355000
Corrected "waiting for lock on repository FOO held by BAR" message.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3687
diff
changeset
|
1310 self.ui.warn(_("waiting for lock on %s held by %r\n") % |
d92dad355000
Corrected "waiting for lock on repository FOO held by BAR" message.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3687
diff
changeset
|
1311 (desc, inst.locker)) |
2016
ff5c9a92f556
fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1998
diff
changeset
|
1312 # default to 600 seconds timeout |
20091
abfe6a8e619b
lock: take both vfs and lock file path relative to vfs to access via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20088
diff
changeset
|
1313 l = lockmod.lock(vfs, lockname, |
20088
7cbb79bddee7
localrepo: import "lock" module as "lockmod" for readability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20087
diff
changeset
|
1314 int(self.ui.config("ui", "timeout", "600")), |
26321
db4c192cb9b3
lock: move acquirefn call to inside the lock
Siddharth Agarwal <sid0@fb.com>
parents:
26320
diff
changeset
|
1315 releasefn=releasefn, acquirefn=acquirefn, |
db4c192cb9b3
lock: move acquirefn call to inside the lock
Siddharth Agarwal <sid0@fb.com>
parents:
26320
diff
changeset
|
1316 desc=desc) |
20380
c697b70f295f
localrepo: give a sigh of relief when getting lock after waiting for it
Mads Kiilerich <madski@unity3d.com>
parents:
20364
diff
changeset
|
1317 self.ui.warn(_("got lock after %s seconds\n") % l.delay) |
1751
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
1318 return l |
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
1319 |
15587
809d5d30e377
localrepo: rename _postrelease to _afterlock
Matt Mackall <mpm@selenic.com>
parents:
15586
diff
changeset
|
1320 def _afterlock(self, callback): |
24821
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1321 """add a callback to be run when the repository is fully unlocked |
15583
926a06f7a353
lock: add mechanism to register post release callback
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15486
diff
changeset
|
1322 |
24821
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1323 The callback will be executed when the outermost lock is released |
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1324 (with wlock being higher level than 'lock').""" |
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1325 for ref in (self._wlockref, self._lockref): |
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1326 l = ref and ref() |
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1327 if l and l.held: |
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1328 l.postrelease.append(callback) |
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1329 break |
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1330 else: # no lock have been found. |
16680
d0e419b0f7de
tag: run commit hook when lock is released (issue3344)
Mads Kiilerich <mads@kiilerich.com>
parents:
16679
diff
changeset
|
1331 callback() |
15583
926a06f7a353
lock: add mechanism to register post release callback
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15486
diff
changeset
|
1332 |
4914 | 1333 def lock(self, wait=True): |
9309
cfdcb7a465af
localrepo: document the locking scheme a little better
Greg Ward <greg-hg@gerg.ca>
parents:
9152
diff
changeset
|
1334 '''Lock the repository store (.hg/store) and return a weak reference |
cfdcb7a465af
localrepo: document the locking scheme a little better
Greg Ward <greg-hg@gerg.ca>
parents:
9152
diff
changeset
|
1335 to the lock. Use this before modifying the store (e.g. committing or |
24746
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1336 stripping). If you are opening a transaction, get a lock as well.) |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1337 |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1338 If both 'lock' and 'wlock' must be acquired, ensure you always acquires |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1339 'wlock' first to avoid a dead-lock hazard.''' |
8108
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
1340 l = self._lockref and self._lockref() |
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
1341 if l is not None and l.held: |
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
1342 l.lock() |
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
1343 return l |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
1344 |
26251
5c0f5db65c6b
localrepo: refresh filecache stats only if transaction finished successfully
Yuya Nishihara <yuya@tcha.org>
parents:
26250
diff
changeset
|
1345 l = self._lock(self.svfs, "lock", wait, None, |
13391
d00bbff8600e
fncachestore: defer updating the fncache file to a single file open
Adrian Buehlmann <adrian@cadifra.com>
parents:
13390
diff
changeset
|
1346 self.invalidate, _('repository %s') % self.origroot) |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
1347 self._lockref = weakref.ref(l) |
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
1348 return l |
1751
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
1349 |
26499
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1350 def _wlockchecktransaction(self): |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1351 if self.currenttransaction() is not None: |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1352 raise error.LockInheritanceContractViolation( |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1353 'wlock cannot be inherited in the middle of a transaction') |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1354 |
4914 | 1355 def wlock(self, wait=True): |
9309
cfdcb7a465af
localrepo: document the locking scheme a little better
Greg Ward <greg-hg@gerg.ca>
parents:
9152
diff
changeset
|
1356 '''Lock the non-store parts of the repository (everything under |
cfdcb7a465af
localrepo: document the locking scheme a little better
Greg Ward <greg-hg@gerg.ca>
parents:
9152
diff
changeset
|
1357 .hg except .hg/store) and return a weak reference to the lock. |
24746
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1358 |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1359 Use this before modifying files in .hg. |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1360 |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1361 If both 'lock' and 'wlock' must be acquired, ensure you always acquires |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1362 'wlock' first to avoid a dead-lock hazard.''' |
24744
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24740
diff
changeset
|
1363 l = self._wlockref and self._wlockref() |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24740
diff
changeset
|
1364 if l is not None and l.held: |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24740
diff
changeset
|
1365 l.lock() |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24740
diff
changeset
|
1366 return l |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24740
diff
changeset
|
1367 |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26767
diff
changeset
|
1368 # We do not need to check for non-waiting lock acquisition. Such |
24750
aaf835407bf2
wlock: do not warn for non-wait locking
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24748
diff
changeset
|
1369 # acquisition would not cause dead-lock as they would just fail. |
25290
8f88f768e24c
devel: rename 'all' to 'all-warnings' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25274
diff
changeset
|
1370 if wait and (self.ui.configbool('devel', 'all-warnings') |
24750
aaf835407bf2
wlock: do not warn for non-wait locking
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24748
diff
changeset
|
1371 or self.ui.configbool('devel', 'check-locks')): |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24383
diff
changeset
|
1372 l = self._lockref and self._lockref() |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24383
diff
changeset
|
1373 if l is not None and l.held: |
25629
52e5f68d8363
devel-warn: move the develwarn function as a method of the ui object
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25625
diff
changeset
|
1374 self.ui.develwarn('"wlock" acquired after "lock"') |
1531
2ba8bf7defda
add localrepo.wlock for protecting the dirstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1516
diff
changeset
|
1375 |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1376 def unlock(): |
22404
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
1377 if self.dirstate.pendingparentchange(): |
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
1378 self.dirstate.invalidate() |
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
1379 else: |
26748
5ba0a99ff27f
dirstate: make dirstate.write() callers pass transaction object to it
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26741
diff
changeset
|
1380 self.dirstate.write(None) |
22404
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
1381 |
18318
948f495fb230
localrepo: drop unnecessary check on wlock unlock
Idan Kamara <idankk86@gmail.com>
parents:
18314
diff
changeset
|
1382 self._filecache['dirstate'].refresh() |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1383 |
20091
abfe6a8e619b
lock: take both vfs and lock file path relative to vfs to access via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20088
diff
changeset
|
1384 l = self._lock(self.vfs, "wlock", wait, unlock, |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1385 self.invalidatedirstate, _('working directory of %s') % |
26499
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1386 self.origroot, |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1387 inheritchecker=self._wlockchecktransaction, |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1388 parentenvvar='HG_WLOCK_LOCKER') |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
1389 self._wlockref = weakref.ref(l) |
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
1390 return l |
1531
2ba8bf7defda
add localrepo.wlock for protecting the dirstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1516
diff
changeset
|
1391 |
26488
df2dc5141721
localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26475
diff
changeset
|
1392 def _currentlock(self, lockref): |
df2dc5141721
localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26475
diff
changeset
|
1393 """Returns the lock if it's held, or None if it's not.""" |
df2dc5141721
localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26475
diff
changeset
|
1394 if lockref is None: |
df2dc5141721
localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26475
diff
changeset
|
1395 return None |
df2dc5141721
localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26475
diff
changeset
|
1396 l = lockref() |
df2dc5141721
localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26475
diff
changeset
|
1397 if l is None or not l.held: |
df2dc5141721
localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26475
diff
changeset
|
1398 return None |
df2dc5141721
localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26475
diff
changeset
|
1399 return l |
df2dc5141721
localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26475
diff
changeset
|
1400 |
26489
2a3fc0272e3f
localrepo: add a way to get the current wlock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26488
diff
changeset
|
1401 def currentwlock(self): |
2a3fc0272e3f
localrepo: add a way to get the current wlock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26488
diff
changeset
|
1402 """Returns the wlock if it's held, or None if it's not.""" |
2a3fc0272e3f
localrepo: add a way to get the current wlock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26488
diff
changeset
|
1403 return self._currentlock(self._wlockref) |
2a3fc0272e3f
localrepo: add a way to get the current wlock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26488
diff
changeset
|
1404 |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1405 def _filecommit(self, fctx, manifest1, manifest2, linkrev, tr, changelist): |
3292
764688cf51e5
merge: remember rename copies and parents properly on commit
Matt Mackall <mpm@selenic.com>
parents:
3241
diff
changeset
|
1406 """ |
3294
a2d93b186a0e
commit: unify file-level commit code
Matt Mackall <mpm@selenic.com>
parents:
3293
diff
changeset
|
1407 commit an individual file as part of a larger transaction |
a2d93b186a0e
commit: unify file-level commit code
Matt Mackall <mpm@selenic.com>
parents:
3293
diff
changeset
|
1408 """ |
3292
764688cf51e5
merge: remember rename copies and parents properly on commit
Matt Mackall <mpm@selenic.com>
parents:
3241
diff
changeset
|
1409 |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1410 fname = fctx.path() |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1411 fparent1 = manifest1.get(fname, nullid) |
22492
d5261db0011f
commit: catch changed exec bit on files from p1 (issue4382)
Matt Mackall <mpm@selenic.com>
parents:
21866
diff
changeset
|
1412 fparent2 = manifest2.get(fname, nullid) |
24394
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1413 if isinstance(fctx, context.filectx): |
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1414 node = fctx.filenode() |
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1415 if node in [fparent1, fparent2]: |
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1416 self.ui.debug('reusing %s filelog entry\n' % fname) |
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1417 return node |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1418 |
24394
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1419 flog = self.file(fname) |
3292
764688cf51e5
merge: remember rename copies and parents properly on commit
Matt Mackall <mpm@selenic.com>
parents:
3241
diff
changeset
|
1420 meta = {} |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1421 copy = fctx.renamed() |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1422 if copy and copy[0] != fname: |
4058
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1423 # Mark the new revision of this file as a copy of another |
4516
96d8a56d4ef9
Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4510
diff
changeset
|
1424 # file. This copy data will effectively act as a parent |
96d8a56d4ef9
Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4510
diff
changeset
|
1425 # of this new revision. If this is a merge, the first |
4058
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1426 # parent will be the nullid (meaning "look up the copy data") |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1427 # and the second one will be the other parent. For example: |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1428 # |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1429 # 0 --- 1 --- 3 rev1 changes file foo |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1430 # \ / rev2 renames foo to bar and changes it |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1431 # \- 2 -/ rev3 should have bar with all changes and |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1432 # should record that bar descends from |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1433 # bar in rev2 and foo in rev1 |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1434 # |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1435 # this allows this merge to succeed: |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1436 # |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1437 # 0 --- 1 --- 3 rev4 reverts the content change from rev2 |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1438 # \ / merging rev3 and rev4 should use bar@rev2 |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1439 # \- 2 --- 4 as the merge base |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
1440 # |
6874
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
1441 |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1442 cfname = copy[0] |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1443 crev = manifest1.get(cfname) |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1444 newfparent = fparent2 |
6874
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
1445 |
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
1446 if manifest2: # branch merge |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1447 if fparent2 == nullid or crev is None: # copied on remote side |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1448 if cfname in manifest2: |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1449 crev = manifest2[cfname] |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1450 newfparent = fparent1 |
6874
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
1451 |
23929
a43fdf33a6be
commit: remove reverse search for copy source when not in parent (issue4476)
Ryan McElroy <rmcelroy@fb.com>
parents:
23917
diff
changeset
|
1452 # Here, we used to search backwards through history to try to find |
a43fdf33a6be
commit: remove reverse search for copy source when not in parent (issue4476)
Ryan McElroy <rmcelroy@fb.com>
parents:
23917
diff
changeset
|
1453 # where the file copy came from if the source of a copy was not in |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24114
diff
changeset
|
1454 # the parent directory. However, this doesn't actually make sense to |
23929
a43fdf33a6be
commit: remove reverse search for copy source when not in parent (issue4476)
Ryan McElroy <rmcelroy@fb.com>
parents:
23917
diff
changeset
|
1455 # do (what does a copy from something not in your working copy even |
a43fdf33a6be
commit: remove reverse search for copy source when not in parent (issue4476)
Ryan McElroy <rmcelroy@fb.com>
parents:
23917
diff
changeset
|
1456 # mean?) and it causes bugs (eg, issue4476). Instead, we will warn |
a43fdf33a6be
commit: remove reverse search for copy source when not in parent (issue4476)
Ryan McElroy <rmcelroy@fb.com>
parents:
23917
diff
changeset
|
1457 # the user that copy information was dropped, so if they didn't |
a43fdf33a6be
commit: remove reverse search for copy source when not in parent (issue4476)
Ryan McElroy <rmcelroy@fb.com>
parents:
23917
diff
changeset
|
1458 # expect this outcome it can be fixed, but this is the correct |
a43fdf33a6be
commit: remove reverse search for copy source when not in parent (issue4476)
Ryan McElroy <rmcelroy@fb.com>
parents:
23917
diff
changeset
|
1459 # behavior in this circumstance. |
6875 | 1460 |
13000
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1461 if crev: |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1462 self.ui.debug(" %s: copy %s:%s\n" % (fname, cfname, hex(crev))) |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1463 meta["copy"] = cfname |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1464 meta["copyrev"] = hex(crev) |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1465 fparent1, fparent2 = nullid, newfparent |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1466 else: |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1467 self.ui.warn(_("warning: can't find ancestor for '%s' " |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1468 "copied from '%s'!\n") % (fname, cfname)) |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1469 |
20556
db0740a487ab
localrepo: commit: avoid calling expensive ancestor function when p1 is nullrev
Mads Kiilerich <madski@unity3d.com>
parents:
20469
diff
changeset
|
1470 elif fparent1 == nullid: |
db0740a487ab
localrepo: commit: avoid calling expensive ancestor function when p1 is nullrev
Mads Kiilerich <madski@unity3d.com>
parents:
20469
diff
changeset
|
1471 fparent1, fparent2 = fparent2, nullid |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1472 elif fparent2 != nullid: |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1473 # is one parent an ancestor of the other? |
21106
53433d8f1faa
localrepo: use commonancestorsheads for checking linear heritage in file commit
Mads Kiilerich <madski@unity3d.com>
parents:
21071
diff
changeset
|
1474 fparentancestors = flog.commonancestorsheads(fparent1, fparent2) |
20987
298c9f346dde
commit: use revlog.commonancestors instead of .ancestor
Mads Kiilerich <madski@unity3d.com>
parents:
20975
diff
changeset
|
1475 if fparent1 in fparentancestors: |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1476 fparent1, fparent2 = fparent2, nullid |
20987
298c9f346dde
commit: use revlog.commonancestors instead of .ancestor
Mads Kiilerich <madski@unity3d.com>
parents:
20975
diff
changeset
|
1477 elif fparent2 in fparentancestors: |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1478 fparent2 = nullid |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1479 |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1480 # is the file changed? |
24394
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1481 text = fctx.data() |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1482 if fparent2 != nullid or flog.cmp(fparent1, text) or meta: |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1483 changelist.append(fname) |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1484 return flog.add(text, meta, tr, linkrev, fparent1, fparent2) |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1485 # are just the flags changed during merge? |
22492
d5261db0011f
commit: catch changed exec bit on files from p1 (issue4382)
Matt Mackall <mpm@selenic.com>
parents:
21866
diff
changeset
|
1486 elif fname in manifest1 and manifest1.flags(fname) != fctx.flags(): |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1487 changelist.append(fname) |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1488 |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1489 return fparent1 |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1490 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
1491 @unfilteredmethod |
8706
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1492 def commit(self, text="", user=None, date=None, match=None, force=False, |
26322
2cd19782d2d4
commit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26321
diff
changeset
|
1493 editor=False, extra=None): |
8515
865e08a7d6b0
localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8503
diff
changeset
|
1494 """Add a new revision to current repository. |
865e08a7d6b0
localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8503
diff
changeset
|
1495 |
8706
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1496 Revision information is gathered from the working directory, |
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1497 match can be used to filter the committed files. If editor is |
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1498 supplied, it is called to get a commit message. |
8515
865e08a7d6b0
localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8503
diff
changeset
|
1499 """ |
26322
2cd19782d2d4
commit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26321
diff
changeset
|
1500 if extra is None: |
2cd19782d2d4
commit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26321
diff
changeset
|
1501 extra = {} |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1502 |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1503 def fail(f, msg): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
1504 raise error.Abort('%s: %s' % (f, msg)) |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1505 |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1506 if not match: |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
1507 match = matchmod.always(self.root, '') |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1508 |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1509 if not force: |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1510 vdirs = [] |
19138
e579687cb5d8
localrepo.commit: hook into match.explicitdir
Siddharth Agarwal <sid0@fb.com>
parents:
19097
diff
changeset
|
1511 match.explicitdir = vdirs.append |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1512 match.bad = fail |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1513 |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1514 wlock = lock = tr = None |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1515 try: |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1516 wlock = self.wlock() |
27291
a18328aad48c
commit: make commit acquire store lock before processing for consistency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27278
diff
changeset
|
1517 lock = self.lock() # for recent changelog (see issue4368) |
a18328aad48c
commit: make commit acquire store lock before processing for consistency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27278
diff
changeset
|
1518 |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1519 wctx = self[None] |
10970
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1520 merge = len(wctx.parents()) > 1 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1521 |
25114
d1d69ca78883
match: add match.ispartial()
Drew Gottlieb <drgott@google.com>
parents:
25021
diff
changeset
|
1522 if not force and merge and match.ispartial(): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
1523 raise error.Abort(_('cannot partially commit a merge ' |
8397
613ac2856535
remove deprecated rawcommit
Matt Mackall <mpm@selenic.com>
parents:
8395
diff
changeset
|
1524 '(do not specify files or patterns)')) |
6706
716a1296e182
localrepo: replace dirstate by workingfilectx in filecommit()
Patrick Mezard <pmezard@gmail.com>
parents:
6705
diff
changeset
|
1525 |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1526 status = self.status(match=match, clean=force) |
8706
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1527 if force: |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1528 status.modified.extend(status.clean) # mq may commit clean files |
3621
7d3d603e7df9
localrepo: factor commit and rawcommit
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3620
diff
changeset
|
1529 |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1530 # check subrepos |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1531 subs = [] |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1532 commitsubs = set() |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1533 newstate = wctx.substate.copy() |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1534 # only manage subrepos and .hgsubstate if .hgsub is present |
14536
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1535 if '.hgsub' in wctx: |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1536 # we'll decide whether to track this ourselves, thanks |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1537 for c in status.modified, status.added, status.removed: |
20827
ca5dd216cb62
localrepo: omit ".hgsubstate" also from "added" files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20776
diff
changeset
|
1538 if '.hgsubstate' in c: |
ca5dd216cb62
localrepo: omit ".hgsubstate" also from "added" files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20776
diff
changeset
|
1539 c.remove('.hgsubstate') |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1540 |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1541 # compare current state to last committed state |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1542 # build new substate based on last committed state |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1543 oldstate = wctx.p1().substate |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1544 for s in sorted(newstate.keys()): |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1545 if not match(s): |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1546 # ignore working copy, use old state if present |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1547 if s in oldstate: |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1548 newstate[s] = oldstate[s] |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1549 continue |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1550 if not force: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
1551 raise error.Abort( |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1552 _("commit with new subrepo %s excluded") % s) |
24470
76b0b0fed2e3
subrepo: add dirtyreason to centralize composing dirty reason message
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24414
diff
changeset
|
1553 dirtyreason = wctx.sub(s).dirtyreason(True) |
76b0b0fed2e3
subrepo: add dirtyreason to centralize composing dirty reason message
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24414
diff
changeset
|
1554 if dirtyreason: |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1555 if not self.ui.configbool('ui', 'commitsubrepos'): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
1556 raise error.Abort(dirtyreason, |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1557 hint=_("use --subrepos for recursive commit")) |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1558 subs.append(s) |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1559 commitsubs.add(s) |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1560 else: |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1561 bs = wctx.sub(s).basestate() |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1562 newstate[s] = (newstate[s][0], bs, newstate[s][2]) |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1563 if oldstate.get(s, (None, None, None))[1] != bs: |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1564 subs.append(s) |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1565 |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1566 # check for removed subrepos |
14536
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1567 for p in wctx.parents(): |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1568 r = [s for s in p.substate if s not in newstate] |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1569 subs += [s for s in r if match(s)] |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1570 if subs: |
14536
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1571 if (not match('.hgsub') and |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1572 '.hgsub' in (wctx.modified() + wctx.added())): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
1573 raise error.Abort( |
14536
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1574 _("can't commit subrepos without .hgsub")) |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1575 status.modified.insert(0, '.hgsubstate') |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1576 |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1577 elif '.hgsub' in status.removed: |
14536
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1578 # clean up .hgsubstate when .hgsub is removed |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1579 if ('.hgsubstate' in wctx and |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1580 '.hgsubstate' not in (status.modified + status.added + |
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1581 status.removed)): |
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1582 status.removed.insert(0, '.hgsubstate') |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1583 |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1584 # make sure all explicit patterns are matched |
25274
144085249c3f
commit: avoid match.files() in conditions
Martin von Zweigbergk <martinvonz@google.com>
parents:
25270
diff
changeset
|
1585 if not force and (match.isexact() or match.prefix()): |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1586 matched = set(status.modified + status.added + status.removed) |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1587 |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1588 for f in match.files(): |
17378
b05e517c2236
commit: normalize filenames when checking explicit files (issue3576)
Matt Mackall <mpm@selenic.com>
parents:
17360
diff
changeset
|
1589 f = self.dirstate.normalize(f) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1590 if f == '.' or f in matched or f in wctx.substate: |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1591 continue |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1592 if f in status.deleted: |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1593 fail(f, _('file not found!')) |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1594 if f in vdirs: # visited directory |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1595 d = f + '/' |
8710
bcb6e5bebd93
commit: trade O(n^2) file checks for O(n^2) dir checks
Matt Mackall <mpm@selenic.com>
parents:
8709
diff
changeset
|
1596 for mf in matched: |
bcb6e5bebd93
commit: trade O(n^2) file checks for O(n^2) dir checks
Matt Mackall <mpm@selenic.com>
parents:
8709
diff
changeset
|
1597 if mf.startswith(d): |
bcb6e5bebd93
commit: trade O(n^2) file checks for O(n^2) dir checks
Matt Mackall <mpm@selenic.com>
parents:
8709
diff
changeset
|
1598 break |
bcb6e5bebd93
commit: trade O(n^2) file checks for O(n^2) dir checks
Matt Mackall <mpm@selenic.com>
parents:
8709
diff
changeset
|
1599 else: |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1600 fail(f, _("no match under directory!")) |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1601 elif f not in self.dirstate: |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1602 fail(f, _("file not tracked!")) |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1603 |
23710
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23667
diff
changeset
|
1604 cctx = context.workingcommitctx(self, status, |
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23667
diff
changeset
|
1605 text, user, date, extra) |
18659
b946470efed9
localrepo: create context used for actual commit earlier
David Schleimer <dschleimer@fb.com>
parents:
18644
diff
changeset
|
1606 |
25840
25897d778738
commit: mark internal-only option
Matt Mackall <mpm@selenic.com>
parents:
25839
diff
changeset
|
1607 # internal config: ui.allowemptycommit |
25021
9a74b9919581
commit: no longer allow empty commit with the 'force' argument (API)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25018
diff
changeset
|
1608 allowemptycommit = (wctx.branch() != wctx.p1().branch() |
25018
93e015a3d1ea
commit: add ui.allowemptycommit config option
Durham Goode <durham@fb.com>
parents:
25017
diff
changeset
|
1609 or extra.get('close') or merge or cctx.files() |
93e015a3d1ea
commit: add ui.allowemptycommit config option
Durham Goode <durham@fb.com>
parents:
25017
diff
changeset
|
1610 or self.ui.configbool('ui', 'allowemptycommit')) |
25017
4e857213d2d1
commit: move empty commit condition to a new line
Durham Goode <durham@fb.com>
parents:
24992
diff
changeset
|
1611 if not allowemptycommit: |
8404
a2bc39ade36b
commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents:
8403
diff
changeset
|
1612 return None |
a2bc39ade36b
commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents:
8403
diff
changeset
|
1613 |
18660
7e6946ed5756
localrepo: use workingctx for validation in commit
David Schleimer <dschleimer@fb.com>
parents:
18659
diff
changeset
|
1614 if merge and cctx.deleted(): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
1615 raise error.Abort(_("cannot commit merge with missing files")) |
16536
63c817ea4a70
commit: abort on merge with missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16456
diff
changeset
|
1616 |
26996
bf3eec62212f
localrepo.commit: switch to mergestate.read()
Siddharth Agarwal <sid0@fb.com>
parents:
26989
diff
changeset
|
1617 ms = mergemod.mergestate.read(self) |
26741
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1618 |
27102
f97bb61b51e6
localrepo.commit: check all files for resolve state (issue4972)
Siddharth Agarwal <sid0@fb.com>
parents:
26831
diff
changeset
|
1619 if list(ms.unresolved()): |
26741
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1620 raise error.Abort(_('unresolved merge conflicts ' |
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1621 '(see "hg help resolve")')) |
27102
f97bb61b51e6
localrepo.commit: check all files for resolve state (issue4972)
Siddharth Agarwal <sid0@fb.com>
parents:
26831
diff
changeset
|
1622 if ms.mdstate() != 's' or list(ms.driverresolved()): |
26741
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1623 raise error.Abort(_('driver-resolved merge conflicts'), |
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1624 hint=_('run "hg resolve --all" to resolve')) |
8496
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1625 |
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1626 if editor: |
8994
4a1187d3cb00
commit: report modified subrepos in commit editor
Matt Mackall <mpm@selenic.com>
parents:
8954
diff
changeset
|
1627 cctx._text = editor(self, cctx, subs) |
9935
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1628 edited = (text != cctx._text) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1629 |
20765
f042d4b263f4
localrepo: save manually edited commit message as soon as possible
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20332
diff
changeset
|
1630 # Save commit message in case this transaction gets rolled back |
f042d4b263f4
localrepo: save manually edited commit message as soon as possible
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20332
diff
changeset
|
1631 # (e.g. by a pretxncommit hook). Leave the content alone on |
f042d4b263f4
localrepo: save manually edited commit message as soon as possible
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20332
diff
changeset
|
1632 # the assumption that the user will use the same editor again. |
f042d4b263f4
localrepo: save manually edited commit message as soon as possible
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20332
diff
changeset
|
1633 msgfn = self.savecommitmessage(cctx._text) |
f042d4b263f4
localrepo: save manually edited commit message as soon as possible
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20332
diff
changeset
|
1634 |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1635 # commit subs and write new state |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1636 if subs: |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1637 for s in sorted(commitsubs): |
11112
4a9bee613737
subrepo: print paths relative to upper repo root for push/pull/commit
Edouard Gomez <ed.gomez@free.fr>
parents:
11063
diff
changeset
|
1638 sub = wctx.sub(s) |
4a9bee613737
subrepo: print paths relative to upper repo root for push/pull/commit
Edouard Gomez <ed.gomez@free.fr>
parents:
11063
diff
changeset
|
1639 self.ui.status(_('committing subrepository %s\n') % |
12752
18b5b6392fcf
subrepo: rename relpath to subrelpath and introduce reporelpath
Mads Kiilerich <mads@kiilerich.com>
parents:
12708
diff
changeset
|
1640 subrepo.subrelpath(sub)) |
11112
4a9bee613737
subrepo: print paths relative to upper repo root for push/pull/commit
Edouard Gomez <ed.gomez@free.fr>
parents:
11063
diff
changeset
|
1641 sr = sub.commit(cctx._text, user, date) |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1642 newstate[s] = (newstate[s][0], sr) |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1643 subrepo.writestate(self, newstate) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1644 |
10970
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1645 p1, p2 = self.dirstate.parents() |
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1646 hookp1, hookp2 = hex(p1), (p2 != nullid and hex(p2) or '') |
9935
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1647 try: |
16683 | 1648 self.hook("precommit", throw=True, parent1=hookp1, |
1649 parent2=hookp2) | |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1650 tr = self.transaction('commit') |
9935
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1651 ret = self.commitctx(cctx, True) |
16705
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16699
diff
changeset
|
1652 except: # re-raises |
9935
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1653 if edited: |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1654 self.ui.write( |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1655 _('note: commit message saved in %s\n') % msgfn) |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1656 raise |
13357
b67867940bd1
bookmarks: move commit action into core
Matt Mackall <mpm@selenic.com>
parents:
13356
diff
changeset
|
1657 # update bookmarks, dirstate and mergestate |
16706
a270ec977ba6
bookmarks: delete divergent bookmarks on merge
David Soria Parra <dsp@php.net>
parents:
16705
diff
changeset
|
1658 bookmarks.update(self, [p1, p2], ret) |
18661
4fb92f14a97a
commit: factor out post-commit cleanup into workingctx
David Schleimer <dschleimer@fb.com>
parents:
18660
diff
changeset
|
1659 cctx.markcommitted(ret) |
8503
90f86a5330bb
commit: tidy up mergestate slightly
Matt Mackall <mpm@selenic.com>
parents:
8502
diff
changeset
|
1660 ms.reset() |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1661 tr.close() |
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1662 |
6710
0aa91f69a4c4
localrepo: extract _commitctx() from commit()
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1663 finally: |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1664 lockmod.release(tr, lock, wlock) |
6710
0aa91f69a4c4
localrepo: extract _commitctx() from commit()
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1665 |
16680
d0e419b0f7de
tag: run commit hook when lock is released (issue3344)
Mads Kiilerich <mads@kiilerich.com>
parents:
16679
diff
changeset
|
1666 def commithook(node=hex(ret), parent1=hookp1, parent2=hookp2): |
23129
eb315418224c
hook: protect commit hooks against stripping of temporary commit (issue4422)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23126
diff
changeset
|
1667 # hack for command that use a temporary commit (eg: histedit) |
eb315418224c
hook: protect commit hooks against stripping of temporary commit (issue4422)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23126
diff
changeset
|
1668 # temporary commit got stripped before hook release |
24992
7df090c9c9fe
localrepo: use changelog.hasnode instead of self.__contains__
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24956
diff
changeset
|
1669 if self.changelog.hasnode(ret): |
23129
eb315418224c
hook: protect commit hooks against stripping of temporary commit (issue4422)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23126
diff
changeset
|
1670 self.hook("commit", node=node, parent1=parent1, |
eb315418224c
hook: protect commit hooks against stripping of temporary commit (issue4422)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23126
diff
changeset
|
1671 parent2=parent2) |
16680
d0e419b0f7de
tag: run commit hook when lock is released (issue3344)
Mads Kiilerich <mads@kiilerich.com>
parents:
16679
diff
changeset
|
1672 self._afterlock(commithook) |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
1673 return ret |
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
1674 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
1675 @unfilteredmethod |
8496
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1676 def commitctx(self, ctx, error=False): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7072
diff
changeset
|
1677 """Add a new revision to current repository. |
8410
1d11d985c179
commit: combine _commitctx and commitctx, drop unused force argument
Matt Mackall <mpm@selenic.com>
parents:
8407
diff
changeset
|
1678 Revision information is passed via the context argument. |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7072
diff
changeset
|
1679 """ |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6712
diff
changeset
|
1680 |
22908
71570f310417
commit: remove dead initialization of 'lock'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22907
diff
changeset
|
1681 tr = None |
8414
2348ce25849b
commitctx: use contexts more fully
Matt Mackall <mpm@selenic.com>
parents:
8412
diff
changeset
|
1682 p1, p2 = ctx.p1(), ctx.p2() |
8412
2bf4f380f6ab
commitctx: eliminate some variables
Matt Mackall <mpm@selenic.com>
parents:
8411
diff
changeset
|
1683 user = ctx.user() |
990 | 1684 |
8411
4d5916358abd
commit: move lots of commitctx outside of the repo lock
Matt Mackall <mpm@selenic.com>
parents:
8410
diff
changeset
|
1685 lock = self.lock() |
4d5916358abd
commit: move lots of commitctx outside of the repo lock
Matt Mackall <mpm@selenic.com>
parents:
8410
diff
changeset
|
1686 try: |
10881
a685011ed38e
localrepo: add desc parameter to transaction
Steve Borho <steve@borho.org>
parents:
10877
diff
changeset
|
1687 tr = self.transaction("commit") |
4970
30d4d8985dd8
transactions: avoid late tear-down (issue641)
Matt Mackall <mpm@selenic.com>
parents:
4917
diff
changeset
|
1688 trp = weakref.proxy(tr) |
151 | 1689 |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1690 if ctx.files(): |
22909
4545c5b53013
commit: use separate variable for p1 manifest and new manifest
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22908
diff
changeset
|
1691 m1 = p1.manifest() |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1692 m2 = p2.manifest() |
22909
4545c5b53013
commit: use separate variable for p1 manifest and new manifest
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22908
diff
changeset
|
1693 m = m1.copy() |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1694 |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1695 # check in files |
22910
4f2a5c7cdf78
commit: update file nodeid and flags in the same place
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22909
diff
changeset
|
1696 added = [] |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1697 changed = [] |
22907
a337f4b9b99d
commit: reduce scope of 'removed' variable
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22852
diff
changeset
|
1698 removed = list(ctx.removed()) |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1699 linkrev = len(self) |
23749
a387b0390082
localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents:
23714
diff
changeset
|
1700 self.ui.note(_("committing files:\n")) |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1701 for f in sorted(ctx.modified() + ctx.added()): |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1702 self.ui.note(f + "\n") |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1703 try: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1704 fctx = ctx[f] |
22296
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22201
diff
changeset
|
1705 if fctx is None: |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22201
diff
changeset
|
1706 removed.append(f) |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22201
diff
changeset
|
1707 else: |
22910
4f2a5c7cdf78
commit: update file nodeid and flags in the same place
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22909
diff
changeset
|
1708 added.append(f) |
4f2a5c7cdf78
commit: update file nodeid and flags in the same place
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22909
diff
changeset
|
1709 m[f] = self._filecommit(fctx, m1, m2, linkrev, |
4f2a5c7cdf78
commit: update file nodeid and flags in the same place
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22909
diff
changeset
|
1710 trp, changed) |
22942
03602f76deee
manifest: rename ambiguously-named set to setflag
Augie Fackler <raf@durin42.com>
parents:
22928
diff
changeset
|
1711 m.setflag(f, fctx.flags()) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
1712 except OSError as inst: |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1713 self.ui.warn(_("trouble committing %s!\n") % f) |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1714 raise |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
1715 except IOError as inst: |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1716 errcode = getattr(inst, 'errno', errno.ENOENT) |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1717 if error or errcode and errcode != errno.ENOENT: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1718 self.ui.warn(_("trouble committing %s!\n") % f) |
22296
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22201
diff
changeset
|
1719 raise |
220 | 1720 |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1721 # update manifest |
23749
a387b0390082
localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents:
23714
diff
changeset
|
1722 self.ui.note(_("committing manifest\n")) |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1723 removed = [f for f in sorted(removed) if f in m1 or f in m2] |
22909
4545c5b53013
commit: use separate variable for p1 manifest and new manifest
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22908
diff
changeset
|
1724 drop = [f for f in removed if f in m] |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1725 for f in drop: |
22909
4545c5b53013
commit: use separate variable for p1 manifest and new manifest
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22908
diff
changeset
|
1726 del m[f] |
4545c5b53013
commit: use separate variable for p1 manifest and new manifest
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22908
diff
changeset
|
1727 mn = self.manifest.add(m, trp, linkrev, |
4545c5b53013
commit: use separate variable for p1 manifest and new manifest
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22908
diff
changeset
|
1728 p1.manifestnode(), p2.manifestnode(), |
22910
4f2a5c7cdf78
commit: update file nodeid and flags in the same place
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22909
diff
changeset
|
1729 added, drop) |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1730 files = changed + removed |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1731 else: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1732 mn = p1.manifestnode() |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1733 files = [] |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1734 |
8499
fb9b83df45f3
commit: move description trimming into changelog
Matt Mackall <mpm@selenic.com>
parents:
8498
diff
changeset
|
1735 # update changelog |
23749
a387b0390082
localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents:
23714
diff
changeset
|
1736 self.ui.note(_("committing changelog\n")) |
23203
3872d563e01a
changelog: handle writepending in the transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23129
diff
changeset
|
1737 self.changelog.delayupdate(tr) |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1738 n = self.changelog.add(mn, files, ctx.description(), |
8499
fb9b83df45f3
commit: move description trimming into changelog
Matt Mackall <mpm@selenic.com>
parents:
8498
diff
changeset
|
1739 trp, p1.node(), p2.node(), |
8412
2bf4f380f6ab
commitctx: eliminate some variables
Matt Mackall <mpm@selenic.com>
parents:
8411
diff
changeset
|
1740 user, ctx.date(), ctx.extra().copy()) |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
1741 xp1, xp2 = p1.hex(), p2 and p2.hex() or '' |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1742 self.hook('pretxncommit', throw=True, node=hex(n), parent1=xp1, |
26751
520defbc0335
hook: centralize passing HG_PENDING to external hook process
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26748
diff
changeset
|
1743 parent2=xp2) |
15706
ebaefd8c6028
Add a phases.new-commit option to control minimal phase of new commit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15659
diff
changeset
|
1744 # set the new commit is proper phase |
20176
4c96c50ef937
subrepo: check phase of state in each subrepositories before committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20091
diff
changeset
|
1745 targetphase = subrepo.newcommitphase(self.ui, ctx) |
15706
ebaefd8c6028
Add a phases.new-commit option to control minimal phase of new commit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15659
diff
changeset
|
1746 if targetphase: |
ebaefd8c6028
Add a phases.new-commit option to control minimal phase of new commit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15659
diff
changeset
|
1747 # retract boundary do not alter parent changeset. |
ebaefd8c6028
Add a phases.new-commit option to control minimal phase of new commit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15659
diff
changeset
|
1748 # if a parent have higher the resulting phase will |
ebaefd8c6028
Add a phases.new-commit option to control minimal phase of new commit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15659
diff
changeset
|
1749 # be compliant anyway |
ebaefd8c6028
Add a phases.new-commit option to control minimal phase of new commit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15659
diff
changeset
|
1750 # |
ebaefd8c6028
Add a phases.new-commit option to control minimal phase of new commit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15659
diff
changeset
|
1751 # if minimal phase was 0 we don't need to retract anything |
22070
c1ca47204590
phase: add a transaction argument to retractboundary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21989
diff
changeset
|
1752 phases.retractboundary(self, tr, targetphase, [n]) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1753 tr.close() |
18394
5010448197bc
branchmap: update cache of 'unserved' filter on new changesets
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18382
diff
changeset
|
1754 branchmap.updatecache(self.filtered('served')) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1755 return n |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1756 finally: |
11230
5116a077c3da
make transactions work on non-refcounted python implementations
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
11228
diff
changeset
|
1757 if tr: |
5116a077c3da
make transactions work on non-refcounted python implementations
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
11228
diff
changeset
|
1758 tr.release() |
8405
7cbf8fcd2453
commit: push repo lock down into _commitctx
Matt Mackall <mpm@selenic.com>
parents:
8404
diff
changeset
|
1759 lock.release() |
660
2c83350784c3
Move commit hook after commit completes
Matt Mackall <mpm@selenic.com>
parents:
659
diff
changeset
|
1760 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
1761 @unfilteredmethod |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1762 def destroying(self): |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1763 '''Inform the repository that nodes are about to be destroyed. |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1764 Intended for use by strip and rollback, so there's a common |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1765 place for anything that has to be done before destroying history. |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1766 |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1767 This is mostly useful for saving state that is in memory and waiting |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1768 to be flushed when the current lock is released. Because a call to |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1769 destroyed is imminent, the repo will be invalidated causing those |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1770 changes to stay in memory (waiting for the next unlock), or vanish |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1771 completely. |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1772 ''' |
18312
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1773 # When using the same lock to commit and strip, the phasecache is left |
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1774 # dirty after committing. Then when we strip, the repo is invalidated, |
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1775 # causing those changes to disappear. |
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1776 if '_phasecache' in vars(self): |
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1777 self._phasecache.write() |
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1778 |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1779 @unfilteredmethod |
18395
904b7109938e
destroyed: drop complex branchcache rebuilt logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18394
diff
changeset
|
1780 def destroyed(self): |
9150
09a1ee498756
localrepo: add destroyed() method for strip/rollback to use (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9149
diff
changeset
|
1781 '''Inform the repository that nodes have been destroyed. |
09a1ee498756
localrepo: add destroyed() method for strip/rollback to use (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9149
diff
changeset
|
1782 Intended for use by strip and rollback, so there's a common |
17013
c8eda7bbdcab
strip: incrementally update the branchheads cache after a strip
Joshua Redstone <joshua.redstone@fb.com>
parents:
17012
diff
changeset
|
1783 place for anything that has to be done after destroying history. |
c8eda7bbdcab
strip: incrementally update the branchheads cache after a strip
Joshua Redstone <joshua.redstone@fb.com>
parents:
17012
diff
changeset
|
1784 ''' |
18221
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1785 # When one tries to: |
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1786 # 1) destroy nodes thus calling this method (e.g. strip) |
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1787 # 2) use phasecache somewhere (e.g. commit) |
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1788 # |
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1789 # then 2) will fail because the phasecache contains nodes that were |
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1790 # removed. We can either remove phasecache from the filecache, |
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1791 # causing it to reload next time it is accessed, or simply filter |
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1792 # the removed nodes now and write the updated cache. |
18757
1c8e0d6ac3b0
localrepo: always write the filtered phasecache when nodes are destroyed (issue3827)
Idan Kamara <idankk86@gmail.com>
parents:
18739
diff
changeset
|
1793 self._phasecache.filterunknown(self) |
1c8e0d6ac3b0
localrepo: always write the filtered phasecache when nodes are destroyed (issue3827)
Idan Kamara <idankk86@gmail.com>
parents:
18739
diff
changeset
|
1794 self._phasecache.write() |
18221
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1795 |
18396
dd3fd3353e23
destroyed: update `unserved` branchcache instead
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18395
diff
changeset
|
1796 # update the 'served' branch cache to help read only server process |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18520
diff
changeset
|
1797 # Thanks to branchcache collaboration this is done from the nearest |
18396
dd3fd3353e23
destroyed: update `unserved` branchcache instead
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18395
diff
changeset
|
1798 # filtered subset and it is expected to be fast. |
dd3fd3353e23
destroyed: update `unserved` branchcache instead
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18395
diff
changeset
|
1799 branchmap.updatecache(self.filtered('served')) |
18223
6d6d0248530b
destroyed: filter unknown before computing branchcache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18222
diff
changeset
|
1800 |
9151
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1801 # Ensure the persistent tag cache is updated. Doing it now |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1802 # means that the tag cache only has to worry about destroyed |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1803 # heads immediately after a strip/rollback. That in turn |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1804 # guarantees that "cachetip == currenttip" (comparing both rev |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1805 # and node) always means no nodes have been added or destroyed. |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1806 |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1807 # XXX this is suboptimal when qrefresh'ing: we strip the current |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1808 # head, refresh the tag cache, then immediately add a new head. |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1809 # But I think doing it this way is necessary for the "instant |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1810 # tag cache retrieval" case to work. |
18313
3e4a944c0d04
destroyed: keep the filecache in sync with __dict__ (issue3335) (issue3693) (issue3743)
Idan Kamara <idankk86@gmail.com>
parents:
18312
diff
changeset
|
1811 self.invalidate() |
17324
9f94358f9f93
localrepo: clear the filecache on _rollback() and destroyed()
Idan Kamara <idankk86@gmail.com>
parents:
17306
diff
changeset
|
1812 |
6585 | 1813 def walk(self, match, node=None): |
3532 | 1814 ''' |
1815 walk recursively through the directory tree or a given | |
1816 changeset, finding all files matched by the match | |
1817 function | |
1818 ''' | |
6764 | 1819 return self[node].walk(match) |
3532 | 1820 |
6769 | 1821 def status(self, node1='.', node2=None, match=None, |
12166
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1822 ignored=False, clean=False, unknown=False, |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1823 listsubrepos=False): |
21596
83bbfb23cb24
localrepo: replace status method with a shim
Sean Farley <sean.michael.farley@gmail.com>
parents:
21591
diff
changeset
|
1824 '''a convenience method that calls node1.status(node2)''' |
83bbfb23cb24
localrepo: replace status method with a shim
Sean Farley <sean.michael.farley@gmail.com>
parents:
21591
diff
changeset
|
1825 return self[node1].status(node2, match, ignored, clean, unknown, |
83bbfb23cb24
localrepo: replace status method with a shim
Sean Farley <sean.michael.farley@gmail.com>
parents:
21591
diff
changeset
|
1826 listsubrepos) |
2661
5c10b7ed3411
status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2621
diff
changeset
|
1827 |
8796
2bcef677a6c3
localrepo: remove 'closed' argument to heads(...) function
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
8731
diff
changeset
|
1828 def heads(self, start=None): |
1550
ccb9b62de892
add a -r/--rev option to heads to show only heads descendant from rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1532
diff
changeset
|
1829 heads = self.changelog.heads(start) |
ccb9b62de892
add a -r/--rev option to heads to show only heads descendant from rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1532
diff
changeset
|
1830 # sort the output in rev descending order |
13075
d73c3034deee
coding style: fix gratuitous whitespace after Python keywords
Thomas Arendsen Hein <thomas@jtah.de>
parents:
13047
diff
changeset
|
1831 return sorted(heads, key=self.changelog.rev, reverse=True) |
222 | 1832 |
8694
ca8d05e1f1d1
localrepo: set heads and branchheads to be closed=False by default
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
8680
diff
changeset
|
1833 def branchheads(self, branch=None, start=None, closed=False): |
9475
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1834 '''return a (possibly filtered) list of heads for the given branch |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1835 |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1836 Heads are returned in topological order, from newest to oldest. |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1837 If branch is None, use the dirstate branch. |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1838 If start is not None, return only heads reachable from start. |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1839 If closed is True, return heads that are marked as closed as well. |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1840 ''' |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
1841 if branch is None: |
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
1842 branch = self[None].branch() |
9675
ee913987e4b0
localrepo/branchcache: remove lbranchmap(), convert users to use utf-8 names
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9674
diff
changeset
|
1843 branches = self.branchmap() |
4648
8e503fa54d2d
Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents:
4635
diff
changeset
|
1844 if branch not in branches: |
8e503fa54d2d
Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents:
4635
diff
changeset
|
1845 return [] |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
1846 # the cache returns heads ordered lowest to highest |
20189
1831993d0902
localrepo: refactor repo.branchheads() to use repo.branchmap().branchheads()
Brodie Rao <brodie@sf.io>
parents:
20187
diff
changeset
|
1847 bheads = list(reversed(branches.branchheads(branch, closed=closed))) |
4648
8e503fa54d2d
Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents:
4635
diff
changeset
|
1848 if start is not None: |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
1849 # filter out the heads that cannot be reached from startrev |
9475
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1850 fbheads = set(self.changelog.nodesbetween([start], bheads)[2]) |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1851 bheads = [h for h in bheads if h in fbheads] |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
1852 return bheads |
4648
8e503fa54d2d
Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents:
4635
diff
changeset
|
1853 |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1854 def branches(self, nodes): |
1615
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
1855 if not nodes: |
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
1856 nodes = [self.changelog.tip()] |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1857 b = [] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1858 for n in nodes: |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1859 t = n |
14494
1ffeeb91c55d
check-code: flag 0/1 used as constant Boolean expression
Martin Geisler <mg@lazybytes.net>
parents:
14482
diff
changeset
|
1860 while True: |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1861 p = self.changelog.parents(n) |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1862 if p[1] != nullid or p[0] == nullid: |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1863 b.append((t, n, p[0], p[1])) |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1864 break |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1865 n = p[0] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1866 return b |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1867 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1868 def between(self, pairs): |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1869 r = [] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1870 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1871 for top, bottom in pairs: |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1872 n, l, i = top, [], 0 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1873 f = 1 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1874 |
7708
a32847fa0df0
wire protocol: avoid infinite loop (issue1483)
Matt Mackall <mpm@selenic.com>
parents:
7564
diff
changeset
|
1875 while n != bottom and n != nullid: |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1876 p = self.changelog.parents(n)[0] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1877 if i == f: |
575 | 1878 l.append(n) |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1879 f = f * 2 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1880 n = p |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1881 i += 1 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1882 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1883 r.append(l) |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1884 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1885 return r |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1886 |
20924
e10000369b47
push: pass a `pushoperation` object to localrepo.checkpush
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20884
diff
changeset
|
1887 def checkpush(self, pushop): |
13327
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1888 """Extensions can override this function if additional checks have |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1889 to be performed before pushing, or call it if they override push |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1890 command. |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1891 """ |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1892 pass |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1893 |
21043
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
1894 @unfilteredpropertycache |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
1895 def prepushoutgoinghooks(self): |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
1896 """Return util.hooks consists of "(repo, remote, outgoing)" |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
1897 functions, which are called before pushing changesets. |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
1898 """ |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
1899 return util.hooks() |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
1900 |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
1901 def pushkey(self, namespace, key, old, new): |
23416
53a65929ef1f
pushkey: gracefully handle prepushkey hook failure (issue4455)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23129
diff
changeset
|
1902 try: |
24824
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
1903 tr = self.currenttransaction() |
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
1904 hookargs = {} |
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
1905 if tr is not None: |
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
1906 hookargs.update(tr.hookargs) |
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
1907 hookargs['namespace'] = namespace |
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
1908 hookargs['key'] = key |
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
1909 hookargs['old'] = old |
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
1910 hookargs['new'] = new |
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
1911 self.hook('prepushkey', throw=True, **hookargs) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
1912 except error.HookAbort as exc: |
23416
53a65929ef1f
pushkey: gracefully handle prepushkey hook failure (issue4455)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23129
diff
changeset
|
1913 self.ui.write_err(_("pushkey-abort: %s\n") % exc) |
53a65929ef1f
pushkey: gracefully handle prepushkey hook failure (issue4455)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23129
diff
changeset
|
1914 if exc.hint: |
53a65929ef1f
pushkey: gracefully handle prepushkey hook failure (issue4455)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23129
diff
changeset
|
1915 self.ui.write_err(_("(%s)\n") % exc.hint) |
53a65929ef1f
pushkey: gracefully handle prepushkey hook failure (issue4455)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23129
diff
changeset
|
1916 return False |
17293
d3f84ccc5495
pushkey: add more verbose debug output regarding pushkey
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17252
diff
changeset
|
1917 self.ui.debug('pushing key for "%s:%s"\n' % (namespace, key)) |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
1918 ret = pushkey.push(self, namespace, key, old, new) |
23648
915ac9403e13
pushkey: run hook after the lock release
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23630
diff
changeset
|
1919 def runhook(): |
915ac9403e13
pushkey: run hook after the lock release
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23630
diff
changeset
|
1920 self.hook('pushkey', namespace=namespace, key=key, old=old, new=new, |
915ac9403e13
pushkey: run hook after the lock release
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23630
diff
changeset
|
1921 ret=ret) |
915ac9403e13
pushkey: run hook after the lock release
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23630
diff
changeset
|
1922 self._afterlock(runhook) |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
1923 return ret |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
1924 |
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
1925 def listkeys(self, namespace): |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
1926 self.hook('prelistkeys', throw=True, namespace=namespace) |
17293
d3f84ccc5495
pushkey: add more verbose debug output regarding pushkey
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17252
diff
changeset
|
1927 self.ui.debug('listing keys for "%s"\n' % namespace) |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
1928 values = pushkey.list(self, namespace) |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
1929 self.hook('listkeys', namespace=namespace, values=values) |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
1930 return values |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
1931 |
14048
58e58406ed19
wireproto: add test for new optional arg missing on server
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14036
diff
changeset
|
1932 def debugwireargs(self, one, two, three=None, four=None, five=None): |
13720
9c4e04fe267e
debug: add debugwireargs to test argument passing over the wire
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13716
diff
changeset
|
1933 '''used to test argument passing over the wire''' |
14048
58e58406ed19
wireproto: add test for new optional arg missing on server
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14036
diff
changeset
|
1934 return "%s %s %s %s %s" % (one, two, three, four, five) |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
1935 |
14529
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
1936 def savecommitmessage(self, text): |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1937 fp = self.vfs('last-message.txt', 'wb') |
14529
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
1938 try: |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
1939 fp.write(text) |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
1940 finally: |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
1941 fp.close() |
18054
b35e3364f94a
check-code: there must also be whitespace between ')' and operator
Mads Kiilerich <madski@unity3d.com>
parents:
18044
diff
changeset
|
1942 return self.pathto(fp.name[len(self.root) + 1:]) |
14529
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
1943 |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
1944 # used to avoid circular references so destructors work |
3790
f183c18568df
localrepo: change aftertrans to be independant of the store path
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3773
diff
changeset
|
1945 def aftertrans(files): |
f183c18568df
localrepo: change aftertrans to be independant of the store path
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3773
diff
changeset
|
1946 renamefiles = [tuple(t) for t in files] |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
1947 def a(): |
18952
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1948 for vfs, src, dest in renamefiles: |
16441
9dd10a574af2
localrepo: do not complain about missing journal files
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
16426
diff
changeset
|
1949 try: |
18952
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1950 vfs.rename(src, dest) |
16441
9dd10a574af2
localrepo: do not complain about missing journal files
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
16426
diff
changeset
|
1951 except OSError: # journal file does not yet exist |
9dd10a574af2
localrepo: do not complain about missing journal files
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
16426
diff
changeset
|
1952 pass |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
1953 return a |
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
1954 |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1955 def undoname(fn): |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1956 base, name = os.path.split(fn) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1957 assert name.startswith('journal') |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1958 return os.path.join(base, name.replace('journal', 'undo', 1)) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1959 |
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
1960 def instance(ui, path, create): |
14825
de9eb6b1da4f
util: rename the util.localpath that uses url to urllocalpath (issue2875)
Mads Kiilerich <mads@kiilerich.com>
parents:
14756
diff
changeset
|
1961 return localrepository(ui, util.urllocalpath(path), create) |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3164
diff
changeset
|
1962 |
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
1963 def islocal(path): |
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
1964 return True |