Mercurial > hg
annotate mercurial/localrepo.py @ 27197:6df3ec5bb813
shelve: widen wlock scope of shelve for consistency while processing
Before this patch, "hg shelve" of shelve extension executes/refers
below before acquisition of wlock:
- 'repo.dirstate.parents()' via 'repo[None].parents()'
- 'repo._activebookmark'
It may cause unintentional result, if another command runs parallelly
(see also issue4368).
This patch widens wlock scope of "hg shelve" of shelve extension for
consistency while processing.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Wed, 02 Dec 2015 03:12:08 +0900 |
parents | 3fe8cb40c9c5 |
children | dfb836a31b61 |
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. |
25764
22049b565d57
localrepo: provide workingctx by integer revision
Yuya Nishihara <yuya@tcha.org>
parents:
25667
diff
changeset
|
7 from node import hex, nullid, wdirrev, short |
3891 | 8 from i18n import _ |
21141
d8dd19e09ed4
bundle2: advertise bundle2 caps in server capabilities
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21140
diff
changeset
|
9 import urllib |
20930
4a987060d97e
localrepo: move the getbundle method in changegroup module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20928
diff
changeset
|
10 import peer, changegroup, subrepo, pushkey, obsolete, repoview |
15418
cf729af26963
phases: basic I/O logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15403
diff
changeset
|
11 import changelog, dirstate, filelog, manifest, context, bookmarks, phases |
20088
7cbb79bddee7
localrepo: import "lock" module as "lockmod" for readability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20087
diff
changeset
|
12 import lock as lockmod |
21068
c15b66a6bbb4
bundle2: return a stream from exchange.getbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
13 import transaction, store, encoding, exchange, bundle2 |
26631
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
14 import scmutil, util, extensions, hook, error, revset, cmdutil |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
15 import match as matchmod |
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
16 import merge as mergemod |
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
17 import tags as tagsmod |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8108
diff
changeset
|
18 from lock import release |
25267
69c5cab0b893
transaction: separate calculating TXNID from creating transaction object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25219
diff
changeset
|
19 import weakref, errno, os, time, inspect, random |
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
|
20 import branchmap, pathutil |
23558
3198aac7a95d
namespaces: add bookmarks to the names data structure
Sean Farley <sean.michael.farley@gmail.com>
parents:
23546
diff
changeset
|
21 import namespaces |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
22 propertycache = util.propertycache |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
23 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
|
24 |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
25 class repofilecache(filecache): |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
26 """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
|
27 """ |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
28 |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
29 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
|
30 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
|
31 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
|
32 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
|
33 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
|
34 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
|
35 |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
36 class storecache(repofilecache): |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
37 """filecache for files in the store""" |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
38 def join(self, obj, fname): |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
39 return obj.sjoin(fname) |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
40 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
41 class unfilteredpropertycache(propertycache): |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
42 """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
|
43 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
44 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
|
45 unfi = repo.unfiltered() |
9789670992d6
repoview: have unfilteredpropertycache using the underlying cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19515
diff
changeset
|
46 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
|
47 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
|
48 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
|
49 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
50 class filteredpropertycache(propertycache): |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
51 """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
|
52 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
53 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
|
54 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
|
55 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
56 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
57 def hasunfilteredcache(repo, name): |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18520
diff
changeset
|
58 """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
|
59 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
|
60 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
61 def unfilteredmethod(orig): |
17994
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
62 """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
|
63 def wrapper(repo, *args, **kwargs): |
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
64 return orig(repo.unfiltered(), *args, **kwargs) |
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
65 return wrapper |
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
66 |
20955
12f161f08d74
bundle2: allow pulling changegroups using bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20954
diff
changeset
|
67 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
|
68 'unbundle')) |
20776
d00c731f4637
localrepo: rename capability set to lower case.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20773
diff
changeset
|
69 legacycaps = moderncaps.union(set(['changegroupsubset'])) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
70 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
71 class localpeer(peer.peerrepository): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
72 '''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
|
73 |
20776
d00c731f4637
localrepo: rename capability set to lower case.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20773
diff
changeset
|
74 def __init__(self, repo, caps=moderncaps): |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
75 peer.peerrepository.__init__(self) |
18382
f3b21beb9802
filtering: rename filters to their antonyms
Kevin Bullock <kbullock@ringworld.org>
parents:
18364
diff
changeset
|
76 self._repo = repo.filtered('served') |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
77 self.ui = repo.ui |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
78 self._caps = repo._restrictcapabilities(caps) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
79 self.requirements = repo.requirements |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
80 self.supportedformats = repo.supportedformats |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
81 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
82 def close(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
83 self._repo.close() |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
84 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
85 def _capabilities(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
86 return self._caps |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
87 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
88 def local(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
89 return self._repo |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
90 |
17193
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17192
diff
changeset
|
91 def canpush(self): |
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17192
diff
changeset
|
92 return True |
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17192
diff
changeset
|
93 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
94 def url(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
95 return self._repo.url() |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
96 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
97 def lookup(self, key): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
98 return self._repo.lookup(key) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
99 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
100 def branchmap(self): |
18279
679767c38cb5
clfilter: drop extra filtering in localpeer
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18278
diff
changeset
|
101 return self._repo.branchmap() |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
102 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
103 def heads(self): |
18279
679767c38cb5
clfilter: drop extra filtering in localpeer
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18278
diff
changeset
|
104 return self._repo.heads() |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
105 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
106 def known(self, nodes): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
107 return self._repo.known(nodes) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
108 |
20953
8d853cad6b14
localpeer: propagate bundlecaps in getbundle call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20933
diff
changeset
|
109 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
|
110 **kwargs): |
21068
c15b66a6bbb4
bundle2: return a stream from exchange.getbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
111 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
|
112 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
|
113 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
|
114 # 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
|
115 # 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
|
116 # 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
|
117 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
|
118 return cg |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
119 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
120 # 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
|
121 # unbundle instead. |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
122 |
20969
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
123 def unbundle(self, cg, heads, url): |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
124 """apply a bundle on a repo |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
125 |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
126 This function handles the repo locking itself.""" |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
127 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
|
128 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
|
129 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
|
130 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
|
131 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
|
132 # 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
|
133 # 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
|
134 # 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
|
135 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
|
136 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
|
137 return ret |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
138 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
|
139 # 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
|
140 # 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
|
141 # 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
|
142 # 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
|
143 # |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
144 # 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
|
145 # issue4594 |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
146 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
|
147 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
|
148 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
|
149 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
|
150 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
|
151 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
|
152 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
|
153 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
|
154 raise |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
155 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
|
156 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
|
157 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
158 def lock(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
159 return self._repo.lock() |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
160 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
161 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
|
162 return cg.apply(self._repo, source, url) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
163 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
164 def pushkey(self, namespace, key, old, new): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
165 return self._repo.pushkey(namespace, key, old, new) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
166 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
167 def listkeys(self, namespace): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
168 return self._repo.listkeys(namespace) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
169 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
170 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
|
171 '''used to test argument passing over the wire''' |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
172 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
|
173 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
174 class locallegacypeer(localpeer): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
175 '''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
|
176 restricted capabilities''' |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
177 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
178 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
|
179 localpeer.__init__(self, repo, caps=legacycaps) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
180 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
181 def branches(self, nodes): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
182 return self._repo.branches(nodes) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
183 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
184 def between(self, pairs): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
185 return self._repo.between(pairs) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
186 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
187 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
|
188 return changegroup.changegroup(self._repo, basenodes, source) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
189 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
190 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
|
191 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
|
192 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
193 class localrepository(object): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
194 |
24956
48583a1e44f3
treemanifest: set requires at repo creation time, ignore config after
Martin von Zweigbergk <martinvonz@google.com>
parents:
24947
diff
changeset
|
195 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
|
196 'manifestv2')) |
19778
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
197 _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
|
198 'dotencode')) |
24956
48583a1e44f3
treemanifest: set requires at repo creation time, ignore config after
Martin von Zweigbergk <martinvonz@google.com>
parents:
24947
diff
changeset
|
199 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
|
200 filtername = None |
17137
b090601a80d1
localrepo: make requirements and openerreqs mutable by subclasses
Bryan O'Sullivan <bryano@fb.com>
parents:
17075
diff
changeset
|
201 |
19928
d1ac3790e10a
localrepo: invoke only feature setup functions for enabled extensions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19884
diff
changeset
|
202 # 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
|
203 # 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
|
204 featuresetupfuncs = set() |
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
205 |
17137
b090601a80d1
localrepo: make requirements and openerreqs mutable by subclasses
Bryan O'Sullivan <bryano@fb.com>
parents:
17075
diff
changeset
|
206 def _baserequirements(self, create): |
24913
e3a928bd1cd4
localrepo: eliminate requirements class variable (API)
Drew Gottlieb <drgott@google.com>
parents:
24843
diff
changeset
|
207 return ['revlogv1'] |
2439
e8c4f3d3df8c
extend network protocol to stop clients from locking servers
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2424
diff
changeset
|
208 |
14363
82f3b0f3f0a5
localrepo, sshrepo: use Boolean create argument in __init__
Martin Geisler <mg@lazybytes.net>
parents:
14333
diff
changeset
|
209 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
|
210 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
|
211 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
|
212 self.wopener = self.wvfs |
17157
87e8440964a0
localrepo: use path expansion API via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17156
diff
changeset
|
213 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
|
214 self.path = self.wvfs.join(".hg") |
3850
a4457828ca1a
move code around
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3803
diff
changeset
|
215 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
|
216 self.auditor = pathutil.pathauditor(self.root, self._checknested) |
17650
bf2eb3a126d2
localrepo: use "vfs" constructor instead of "opener" one
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17550
diff
changeset
|
217 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
|
218 self.opener = self.vfs |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
219 self.baseui = baseui |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
220 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
|
221 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
|
222 # 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
|
223 # 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
|
224 # 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
|
225 self._phasedefaults = [] |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
226 try: |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
227 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
|
228 extensions.loadall(self.ui) |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
229 except IOError: |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
230 pass |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
231 |
19778
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
232 if self.featuresetupfuncs: |
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
233 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
|
234 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
|
235 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
|
236 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
|
237 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
|
238 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
|
239 else: |
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
240 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
|
241 |
17161
be016e96117a
localrepo: use file API via vfs while ensuring repository directory
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17160
diff
changeset
|
242 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
|
243 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
|
244 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
|
245 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
|
246 self.vfs.makedir(notindexed=True) |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
247 self.requirements.update(self._baserequirements(create)) |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
248 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
|
249 self.vfs.mkdir("store") |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
250 self.requirements.add("store") |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
251 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
|
252 self.requirements.add("fncache") |
12687
34d8247a4595
store: encode first period or space in filenames (issue1713)
Adrian Buehlmann <adrian@cadifra.com>
parents:
12622
diff
changeset
|
253 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
|
254 self.requirements.add('dotencode') |
4166
c0271aba6abe
small fixes for the parent patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4163
diff
changeset
|
255 # 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
|
256 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
|
257 "00changelog.i", |
4166
c0271aba6abe
small fixes for the parent patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4163
diff
changeset
|
258 '\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
|
259 ' 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
|
260 ) |
26906
e40af07e518e
scmutil: extract general delta config handling in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26831
diff
changeset
|
261 if scmutil.gdinitconfig(self.ui): |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
262 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
|
263 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
|
264 self.requirements.add("treemanifest") |
24571
919f8ce040be
manifestv2: set requires at repo creation time
Martin von Zweigbergk <martinvonz@google.com>
parents:
24526
diff
changeset
|
265 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
|
266 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
|
267 else: |
7637 | 268 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
|
269 elif create: |
7637 | 270 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
|
271 else: |
8f18e31c4441
add "requires" file to the repo, specifying the requirements
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3850
diff
changeset
|
272 try: |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
273 self.requirements = scmutil.readrequires( |
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
274 self.vfs, self.supported) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
275 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
|
276 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
|
277 raise |
405 | 278 |
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
279 self.sharedpath = self.path |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
280 try: |
18946
3d4f41eaae67
localrepo: use vfs instead of "os.path.*" in sharedpath checking
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18945
diff
changeset
|
281 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
|
282 realpath=True) |
3d4f41eaae67
localrepo: use vfs instead of "os.path.*" in sharedpath checking
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18945
diff
changeset
|
283 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
|
284 if not vfs.exists(): |
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
285 raise error.RepoError( |
8908
105343f9f744
Fix warning: Seen unexpected token "%"
Dongsheng Song <dongsheng.song@gmail.com>
parents:
8813
diff
changeset
|
286 _('.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
|
287 self.sharedpath = s |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
288 except IOError as inst: |
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
289 if inst.errno != errno.ENOENT: |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
290 raise |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
291 |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
292 self.store = store.store( |
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
293 self.requirements, self.sharedpath, scmutil.vfs) |
6840
80e51429cb9a
introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents:
6839
diff
changeset
|
294 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
|
295 self.svfs = self.store.vfs |
6840
80e51429cb9a
introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents:
6839
diff
changeset
|
296 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
|
297 self.vfs.createmode = self.store.createmode |
24915
1c40408770f7
localrepo: make _applyrequirements more specific
Drew Gottlieb <drgott@google.com>
parents:
24914
diff
changeset
|
298 self._applyopenerreqs() |
12295
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
299 if create: |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
300 self._writerequirements() |
3850
a4457828ca1a
move code around
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3803
diff
changeset
|
301 |
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
302 self._dirstatevalidatewarned = False |
9146
5614a628d173
localrepo: rename in-memory tag cache instance attributes (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9145
diff
changeset
|
303 |
18189
b9026ba002f6
branchmap: enable caching for filtered version too
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18186
diff
changeset
|
304 self._branchcaches = {} |
24373
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
305 self._revbranchcache = None |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
306 self.filterpats = {} |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
307 self._datafilters = {} |
4916
5c5d23d93447
Use a weakref for recursive transactions
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
308 self._transref = self._lockref = self._wlockref = None |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
309 |
14929
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
310 # 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
|
311 # (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
|
312 # |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
313 # 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
|
314 self._filecache = {} |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
315 |
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
|
316 # 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
|
317 # 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
|
318 # - 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
|
319 # - 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
|
320 # - 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
|
321 # - 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
|
322 # - 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
|
323 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
|
324 |
23558
3198aac7a95d
namespaces: add bookmarks to the names data structure
Sean Farley <sean.michael.farley@gmail.com>
parents:
23546
diff
changeset
|
325 # generic mapping between names and nodes |
23561
3c2419e07df5
namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents:
23558
diff
changeset
|
326 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
|
327 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
328 def close(self): |
24378
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
329 self._writecaches() |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
330 |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
331 def _writecaches(self): |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
332 if self._revbranchcache: |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
333 self._revbranchcache.write() |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
334 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
335 def _restrictcapabilities(self, caps): |
24696
553dc2b094d9
bundle2: advertise bundle2 by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24686
diff
changeset
|
336 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
|
337 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
|
338 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
|
339 caps.add('bundle2=' + urllib.quote(capsblob)) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
340 return caps |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
341 |
24915
1c40408770f7
localrepo: make _applyrequirements more specific
Drew Gottlieb <drgott@google.com>
parents:
24914
diff
changeset
|
342 def _applyopenerreqs(self): |
1c40408770f7
localrepo: make _applyrequirements more specific
Drew Gottlieb <drgott@google.com>
parents:
24914
diff
changeset
|
343 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
|
344 if r in self.openerreqs) |
25839
1f8287b41935
localrepo: mark format options
Matt Mackall <mpm@selenic.com>
parents:
25764
diff
changeset
|
345 # 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
|
346 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
|
347 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
|
348 self.svfs.options['chunkcachesize'] = chunkcachesize |
25839
1f8287b41935
localrepo: mark format options
Matt Mackall <mpm@selenic.com>
parents:
25764
diff
changeset
|
349 # experimental config: format.maxchainlen |
23256
1c11393d5dfb
localrepo: rename revlog.maxchainlen to format.maxchainlen
Augie Fackler <raf@durin42.com>
parents:
23255
diff
changeset
|
350 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
|
351 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
|
352 self.svfs.options['maxchainlen'] = maxchainlen |
25839
1f8287b41935
localrepo: mark format options
Matt Mackall <mpm@selenic.com>
parents:
25764
diff
changeset
|
353 # experimental config: format.manifestcachesize |
24033
ed5e8a9598ce
manifest: make lru size configurable
Durham Goode <durham@fb.com>
parents:
23929
diff
changeset
|
354 manifestcachesize = self.ui.configint('format', 'manifestcachesize') |
ed5e8a9598ce
manifest: make lru size configurable
Durham Goode <durham@fb.com>
parents:
23929
diff
changeset
|
355 if manifestcachesize is not None: |
ed5e8a9598ce
manifest: make lru size configurable
Durham Goode <durham@fb.com>
parents:
23929
diff
changeset
|
356 self.svfs.options['manifestcachesize'] = manifestcachesize |
26118
049005de325e
revlog: add an aggressivemergedelta option
Durham Goode <durham@fb.com>
parents:
25878
diff
changeset
|
357 # experimental config: format.aggressivemergedeltas |
049005de325e
revlog: add an aggressivemergedelta option
Durham Goode <durham@fb.com>
parents:
25878
diff
changeset
|
358 aggressivemergedeltas = self.ui.configbool('format', |
049005de325e
revlog: add an aggressivemergedelta option
Durham Goode <durham@fb.com>
parents:
25878
diff
changeset
|
359 'aggressivemergedeltas', False) |
049005de325e
revlog: add an aggressivemergedelta option
Durham Goode <durham@fb.com>
parents:
25878
diff
changeset
|
360 self.svfs.options['aggressivemergedeltas'] = aggressivemergedeltas |
26907
dfab6edb98e3
format: introduce 'format.usegeneraldelta`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26906
diff
changeset
|
361 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
|
362 |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
363 def _writerequirements(self): |
24934
5abd0a76bc8f
requires: move requires file writing func from localrepo to scmutil
Drew Gottlieb <drgott@google.com>
parents:
24918
diff
changeset
|
364 scmutil.writerequires(self.vfs, self.requirements) |
12295
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
365 |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
366 def _checknested(self, path): |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
367 """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
|
368 if not path.startswith(self.root): |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
369 return False |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
370 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
|
371 normsubpath = util.pconvert(subpath) |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
372 |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
373 # 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
|
374 # 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
|
375 # |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
376 # $ 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
|
377 # |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
378 # 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
|
379 # parent revision. |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
380 # |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
381 # 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
|
382 # 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
|
383 # 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
|
384 # 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
|
385 # panics when it sees sub/.hg/. |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
386 # |
12174
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
387 # 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
|
388 # 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
|
389 # the filesystem *now*. |
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
390 ctx = self[None] |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
391 parts = util.splitpath(subpath) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
392 while parts: |
15722
417127af3996
windows: use normalized path to check repository nesting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15604
diff
changeset
|
393 prefix = '/'.join(parts) |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
394 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
|
395 if prefix == normsubpath: |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
396 return True |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
397 else: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
398 sub = ctx.sub(prefix) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
399 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
|
400 else: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
401 parts.pop() |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
402 return False |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
403 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
404 def peer(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
405 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
|
406 |
17993
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
407 def unfiltered(self): |
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
408 """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
|
409 |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18520
diff
changeset
|
410 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
|
411 return self |
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
412 |
18100
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
413 def filtered(self, name): |
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
414 """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
|
415 # 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
|
416 # (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
|
417 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
|
418 pass |
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
419 return proxycls(self, name) |
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
420 |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
421 @repofilecache('bookmarks') |
13355
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
422 def _bookmarks(self): |
17922
7f5dab94e48c
bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents:
17857
diff
changeset
|
423 return bookmarks.bmstore(self) |
13355
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
424 |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
425 @repofilecache('bookmarks.current') |
24947
a02d293a1079
bookmarks: rename bookmarkcurrent to activebookmark (API)
Ryan McElroy <rmcelroy@fb.com>
parents:
24946
diff
changeset
|
426 def _activebookmark(self): |
24946
c44534209a0a
bookmarks: rename readcurrent to readactive (API)
Ryan McElroy <rmcelroy@fb.com>
parents:
24934
diff
changeset
|
427 return bookmarks.readactive(self) |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
428 |
16707
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
429 def bookmarkheads(self, bookmark): |
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
430 name = bookmark.split('@', 1)[0] |
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
431 heads = [] |
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
432 for mark, n in self._bookmarks.iteritems(): |
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
433 if mark.split('@', 1)[0] == name: |
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
434 heads.append(n) |
f8dee1a8f844
localrepo: introduce bookmarkheads
David Soria Parra <dsp@php.net>
parents:
16706
diff
changeset
|
435 return heads |
15418
cf729af26963
phases: basic I/O logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15403
diff
changeset
|
436 |
26405
c15d8f84343e
localrepo: recreate phasecache if changelog was modified (issue4855)
Yuya Nishihara <yuya@tcha.org>
parents:
25878
diff
changeset
|
437 # _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
|
438 # 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
|
439 # 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
|
440 @storecache('phaseroots', '00changelog.i') |
16657
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16646
diff
changeset
|
441 def _phasecache(self): |
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16646
diff
changeset
|
442 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
|
443 |
17070
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
444 @storecache('obsstore') |
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
445 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
|
446 # read default format for new obsstore. |
25839
1f8287b41935
localrepo: mark format options
Matt Mackall <mpm@selenic.com>
parents:
25764
diff
changeset
|
447 # 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
|
448 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
|
449 # 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
|
450 kwargs = {} |
e994b034e91e
obsolete: add a "format.obsstore-version" config option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22787
diff
changeset
|
451 if defaultformat is not None: |
22948
c136e26953aa
obsstore: fix defaultformat option passing
Durham Goode <durham@fb.com>
parents:
22942
diff
changeset
|
452 kwargs['defaultformat'] = defaultformat |
22951
6c86c673dde6
obsolete: add createmarkers option
Durham Goode <durham@fb.com>
parents:
22950
diff
changeset
|
453 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
|
454 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
|
455 **kwargs) |
22951
6c86c673dde6
obsolete: add createmarkers option
Durham Goode <durham@fb.com>
parents:
22950
diff
changeset
|
456 if store and readonly: |
24414
f247fbfe07f3
obsolete: mark warning for translation
Matt Mackall <mpm@selenic.com>
parents:
24402
diff
changeset
|
457 self.ui.warn( |
f247fbfe07f3
obsolete: mark warning for translation
Matt Mackall <mpm@selenic.com>
parents:
24402
diff
changeset
|
458 _('obsolete feature not enabled but %i markers found!\n') |
f247fbfe07f3
obsolete: mark warning for translation
Matt Mackall <mpm@selenic.com>
parents:
24402
diff
changeset
|
459 % len(list(store))) |
17070
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
460 return store |
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
461 |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
462 @storecache('00changelog.i') |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
463 def changelog(self): |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
464 c = changelog.changelog(self.svfs) |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
465 if 'HG_PENDING' in os.environ: |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
466 p = os.environ['HG_PENDING'] |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
467 if p.startswith(self.root): |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
468 c.readpending('00changelog.i.a') |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
469 return c |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
470 |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
471 @storecache('00manifest.i') |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
472 def manifest(self): |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
473 return manifest.manifest(self.svfs) |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
474 |
25119
49c583ca48c4
treemanifest: add --dir option to debug{revlog,data,index}
Martin von Zweigbergk <martinvonz@google.com>
parents:
25114
diff
changeset
|
475 def dirlog(self, dir): |
25185
bf6b476f3b36
treemanifest: cache directory logs and manifests
Martin von Zweigbergk <martinvonz@google.com>
parents:
25149
diff
changeset
|
476 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
|
477 |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
478 @repofilecache('dirstate') |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
479 def dirstate(self): |
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
480 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
|
481 self._dirstatevalidate) |
13032
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
482 |
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
483 def _dirstatevalidate(self, node): |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
484 try: |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
485 self.changelog.rev(node) |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
486 return node |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
487 except error.LookupError: |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
488 if not self._dirstatevalidatewarned: |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
489 self._dirstatevalidatewarned = True |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
490 self.ui.warn(_("warning: ignoring unknown" |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
491 " working parent %s!\n") % short(node)) |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
492 return nullid |
2155
ff255b41b4aa
support hooks written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2150
diff
changeset
|
493 |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
494 def __getitem__(self, changeid): |
25764
22049b565d57
localrepo: provide workingctx by integer revision
Yuya Nishihara <yuya@tcha.org>
parents:
25667
diff
changeset
|
495 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
|
496 return context.workingctx(self) |
23630
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
497 if isinstance(changeid, slice): |
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
498 return [context.changectx(self, i) |
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
499 for i in xrange(*changeid.indices(len(self))) |
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
500 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
|
501 return context.changectx(self, changeid) |
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
502 |
9924
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
503 def __contains__(self, changeid): |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
504 try: |
24320
b9f7f3eeb99c
localrepo: extend "changeid in repo" to return True for workingctx revision
Yuya Nishihara <yuya@tcha.org>
parents:
24306
diff
changeset
|
505 self[changeid] |
b9f7f3eeb99c
localrepo: extend "changeid in repo" to return True for workingctx revision
Yuya Nishihara <yuya@tcha.org>
parents:
24306
diff
changeset
|
506 return True |
9924
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
507 except error.RepoLookupError: |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
508 return False |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
509 |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
510 def __nonzero__(self): |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
511 return True |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
512 |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
513 def __len__(self): |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
514 return len(self.changelog) |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
515 |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
516 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
|
517 return iter(self.changelog) |
2155
ff255b41b4aa
support hooks written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2150
diff
changeset
|
518 |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
519 def revs(self, expr, *args): |
27071
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
520 '''Find revisions matching a revset. |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
521 |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
522 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
|
523 %-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
|
524 |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
525 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
|
526 that contains integer revisions. |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
527 ''' |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
528 expr = revset.formatspec(expr, *args) |
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
529 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
|
530 return m(self) |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
531 |
14902
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
532 def set(self, expr, *args): |
27071
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
533 '''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
|
534 |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
535 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
|
536 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
|
537 ''' |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
538 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
|
539 yield self[r] |
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
540 |
2673
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
541 def url(self): |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
542 return 'file:' + self.root |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
543 |
1718
c1996b84d4f5
make hook code nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1717
diff
changeset
|
544 def hook(self, name, throw=False, **args): |
21866
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
545 """Call a hook, passing this repo instance. |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
546 |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
547 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
|
548 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
|
549 replacing code that is expected to call a hook. |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
550 """ |
4622
fff50306e6dd
hooks: separate hook code into a separate module
Matt Mackall <mpm@selenic.com>
parents:
4619
diff
changeset
|
551 return hook.hook(self.ui, self, name, throw, **args) |
487 | 552 |
24234
7977d35df13b
localrepo: back out changeset b08af8f0ac01
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24180
diff
changeset
|
553 @unfilteredmethod |
26323
ed884807dc48
tag: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26322
diff
changeset
|
554 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
|
555 editor=False): |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
556 if isinstance(names, str): |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
557 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
|
558 |
11063
eb23c876c111
tag: warn users about tag/branch possible name conflicts
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11047
diff
changeset
|
559 branches = self.branchmap() |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
560 for name in names: |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
561 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
|
562 local=local) |
11063
eb23c876c111
tag: warn users about tag/branch possible name conflicts
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11047
diff
changeset
|
563 if name in branches: |
eb23c876c111
tag: warn users about tag/branch possible name conflicts
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11047
diff
changeset
|
564 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
|
565 " 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
|
566 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
567 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
|
568 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
|
569 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
|
570 fp.write('\n') |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
571 for name in names: |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
572 if munge: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
573 m = munge(name) |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
574 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
575 m = name |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
576 |
16683 | 577 if (self._tagscache.tagtypes and |
578 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
|
579 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
|
580 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
|
581 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
|
582 fp.close() |
5081
ea7b982b6c08
Remove trailing spaces
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4932
diff
changeset
|
583 |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
584 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
|
585 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
|
586 try: |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
587 fp = self.vfs('localtags', 'r+') |
7875
553aa0cbeab6
cleanup: drop unused assignments
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7848
diff
changeset
|
588 except IOError: |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
589 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
|
590 else: |
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
591 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
|
592 |
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
|
593 # 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
|
594 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
|
595 for name in names: |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
596 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
|
597 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
|
598 |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
599 try: |
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
600 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
|
601 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
|
602 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
|
603 raise |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
604 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
|
605 else: |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
606 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
|
607 |
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
|
608 # 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
|
609 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
|
610 |
13400
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13391
diff
changeset
|
611 fp.close() |
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13391
diff
changeset
|
612 |
15929
4091660dc130
tag: invalidate tag cache immediately after adding new tag (issue3210)
Mads Kiilerich <mads@kiilerich.com>
parents:
15922
diff
changeset
|
613 self.invalidatecaches() |
4091660dc130
tag: invalidate tag cache immediately after adding new tag (issue3210)
Mads Kiilerich <mads@kiilerich.com>
parents:
15922
diff
changeset
|
614 |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
615 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
|
616 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
|
617 |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
618 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
|
619 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
|
620 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
|
621 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
622 for name in names: |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
623 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
|
624 |
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
625 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
|
626 |
21237
0054a77f49df
localrepo: add "editor" argument to "tag()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21186
diff
changeset
|
627 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
|
628 '''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
|
629 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
630 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
|
631 string. |
6334
7016f7fb8fe3
tab/space cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6321
diff
changeset
|
632 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
633 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
|
634 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
|
635 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
|
636 |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
637 keyword arguments: |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
638 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
639 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
|
640 (default False) |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
641 |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
642 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
|
643 |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
644 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
|
645 |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
646 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
|
647 |
13133
c1492615cdee
tag: don't check .hgtags status if --local passed
Kevin Bullock <kbullock@ringworld.org>
parents:
13000
diff
changeset
|
648 if not local: |
22679
aa8ecc199892
tag: only check the status of .hgtags
Matt Mackall <mpm@selenic.com>
parents:
22678
diff
changeset
|
649 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
|
650 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
|
651 raise error.Abort(_('working copy of .hgtags is changed'), |
22680 | 652 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
|
653 |
7814
4421abf8c85d
tag: force load of tag cache
Matt Mackall <mpm@selenic.com>
parents:
7803
diff
changeset
|
654 self.tags() # instantiate the cache |
21237
0054a77f49df
localrepo: add "editor" argument to "tag()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21186
diff
changeset
|
655 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
|
656 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
657 @filteredpropertycache |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
658 def _tagscache(self): |
16683 | 659 '''Returns a tagscache object that contains various tags related |
660 caches.''' | |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
661 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
662 # 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
|
663 # 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
|
664 class tagscache(object): |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
665 def __init__(self): |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
666 # 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
|
667 # 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
|
668 # '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
|
669 # 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
|
670 # 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
|
671 self.tags = self.tagtypes = None |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
672 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
673 self.nodetagscache = self.tagslist = None |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
674 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
675 cache = tagscache() |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
676 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
|
677 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
678 return cache |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
679 |
343 | 680 def tags(self): |
681 '''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
|
682 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
|
683 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
|
684 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
|
685 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
|
686 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
|
687 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
|
688 try: |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
689 # ignore tags to unknown nodes |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
690 self.changelog.rev(v) |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
691 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
|
692 except (error.LookupError, ValueError): |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
693 pass |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
694 return t |
4210
caff92047e87
Refactor tags code to prepare for improving the algorithm
Matt Mackall <mpm@selenic.com>
parents:
4178
diff
changeset
|
695 |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
696 def _findtags(self): |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
697 '''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
|
698 (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
|
699 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
|
700 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
|
701 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
|
702 duration of the localrepo object.''' |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
703 |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
704 # 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
|
705 # 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
|
706 # 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
|
707 # 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
|
708 # quo fine? |
4210
caff92047e87
Refactor tags code to prepare for improving the algorithm
Matt Mackall <mpm@selenic.com>
parents:
4178
diff
changeset
|
709 |
9148
b7837f0ed9fe
localrepo: factor updatetags() out of readtags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9147
diff
changeset
|
710 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
|
711 tagtypes = {} |
659 | 712 |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
713 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
|
714 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
|
715 |
9152
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
716 # 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
|
717 # 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
|
718 # 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
|
719 # local encoding. |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
720 tags = {} |
9147
234a230cc33b
localrepo: improve readability of _findtags(), readtags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9146
diff
changeset
|
721 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
|
722 if node != nullid: |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
723 tags[encoding.tolocal(name)] = node |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
724 tags['tip'] = self.changelog.tip() |
9152
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
725 tagtypes = dict([(encoding.tolocal(name), value) |
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
726 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
|
727 return (tags, tagtypes) |
343 | 728 |
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
729 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
|
730 ''' |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
731 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
|
732 |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
733 '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
|
734 '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
|
735 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
|
736 ''' |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
737 |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
738 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
|
739 |
343 | 740 def tagslist(self): |
741 '''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
|
742 if not self._tagscache.tagslist: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
743 l = [] |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
744 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
|
745 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
|
746 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
|
747 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
748 return self._tagscache.tagslist |
343 | 749 |
750 def nodetags(self, node): | |
751 '''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
|
752 if not self._tagscache.nodetagscache: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
753 nodetagscache = {} |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
754 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
|
755 nodetagscache.setdefault(n, []).append(t) |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
756 for tags in nodetagscache.itervalues(): |
11047
c7dbd6c4877a
tags: return tags in sorted order
Eric Eisner <ede@mit.edu>
parents:
10970
diff
changeset
|
757 tags.sort() |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
758 self._tagscache.nodetagscache = nodetagscache |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
759 return self._tagscache.nodetagscache.get(node, []) |
343 | 760 |
13384
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
761 def nodebookmarks(self, node): |
27166
263db31329a6
localrepo: document nodebookmarks
Augie Fackler <augie@google.com>
parents:
27165
diff
changeset
|
762 """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
|
763 marks = [] |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
764 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
|
765 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
|
766 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
|
767 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
|
768 |
12066
d01e28657429
localrepo: introduce method for explicit branch cache update
Georg Brandl <georg@python.org>
parents:
12035
diff
changeset
|
769 def branchmap(self): |
20245
4edd179fefb8
help: branch names primarily denote the tipmost unclosed branch head
Mads Kiilerich <madski@unity3d.com>
parents:
20226
diff
changeset
|
770 '''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
|
771 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
|
772 branchmap.updatecache(self) |
b9026ba002f6
branchmap: enable caching for filtered version too
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18186
diff
changeset
|
773 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
|
774 |
24373
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
775 @unfilteredmethod |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
776 def revbranchcache(self): |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
777 if not self._revbranchcache: |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
778 self._revbranchcache = branchmap.revbranchcache(self.unfiltered()) |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
779 return self._revbranchcache |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
780 |
23775
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
781 def branchtip(self, branch, ignoremissing=False): |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
782 '''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
|
783 |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
784 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
|
785 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
|
786 (e.g. namespace). |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
787 |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
788 ''' |
20187
4d6d5ef88538
localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents:
20184
diff
changeset
|
789 try: |
4d6d5ef88538
localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents:
20184
diff
changeset
|
790 return self.branchmap().branchtip(branch) |
4d6d5ef88538
localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents:
20184
diff
changeset
|
791 except KeyError: |
23775
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
792 if not ignoremissing: |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
793 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
|
794 else: |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
795 pass |
16719
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16716
diff
changeset
|
796 |
343 | 797 def lookup(self, key): |
16378
c463f46fe050
localrepo: lookup now goes through context
Matt Mackall <mpm@selenic.com>
parents:
16371
diff
changeset
|
798 return self[key].node() |
67 | 799 |
10960
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
800 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
|
801 repo = remote or self |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
802 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
|
803 return key |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
804 |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
805 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
|
806 return repo[key].branch() |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
807 |
13723
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
808 def known(self, nodes): |
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
809 nm = self.changelog.nodemap |
16657
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16646
diff
changeset
|
810 pc = self._phasecache |
15889
816209eaf963
phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15888
diff
changeset
|
811 result = [] |
816209eaf963
phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15888
diff
changeset
|
812 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
|
813 r = nm.get(n) |
16657
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16646
diff
changeset
|
814 resp = not (r is None or pc.phase(self, r) >= phases.secret) |
15889
816209eaf963
phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15888
diff
changeset
|
815 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
|
816 return result |
13723
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
817 |
926 | 818 def local(self): |
14603
68a43fdd7d80
localrepo: local() returns self
Matt Mackall <mpm@selenic.com>
parents:
14549
diff
changeset
|
819 return self |
926 | 820 |
25623
0bee97fa1fa8
publishing: add helper method to localrepo
Matt Mackall <mpm@selenic.com>
parents:
25290
diff
changeset
|
821 def publishing(self): |
25625
ce9e231265c1
publishing: unconditionally trust publishing flag
Matt Mackall <mpm@selenic.com>
parents:
25624
diff
changeset
|
822 # 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
|
823 # 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
|
824 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
|
825 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
826 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
|
827 # 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
|
828 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
|
829 return False |
25624
f0745da75056
publishing: use new helper method
Matt Mackall <mpm@selenic.com>
parents:
25623
diff
changeset
|
830 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
|
831 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
|
832 # 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
|
833 return not self.filtered('visible').changelog.filteredrevs |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
834 |
23666
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
835 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
|
836 '''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
|
837 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
|
838 return 'store' |
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
839 return None |
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
840 |
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
|
841 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
|
842 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
|
843 |
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
|
844 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
|
845 return self.vfs.reljoin(self.root, f, *insidef) |
244 | 846 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
847 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
|
848 if f[0] == '/': |
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
849 f = f[1:] |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
850 return filelog.filelog(self.svfs, f) |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
851 |
6739
c9fbd6ec3489
context: avoid using None for working parent
Matt Mackall <mpm@selenic.com>
parents:
6736
diff
changeset
|
852 def changectx(self, changeid): |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
853 return self[changeid] |
3218
8d4855fd9d7b
merge: use new working context object in update
Matt Mackall <mpm@selenic.com>
parents:
3164
diff
changeset
|
854 |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
855 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
|
856 self.dirstate.beginparentchange() |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
857 copies = self.dirstate.setparents(p1, p2) |
18739
5b7175377bab
setparents: drop copies from dropped p2 (issue3843)
Matt Mackall <mpm@selenic.com>
parents:
18520
diff
changeset
|
858 pctx = self[p1] |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
859 if copies: |
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
860 # 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
|
861 # 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
|
862 # 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
|
863 for f in copies: |
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
864 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
|
865 self.dirstate.copy(copies[f], f) |
18739
5b7175377bab
setparents: drop copies from dropped p2 (issue3843)
Matt Mackall <mpm@selenic.com>
parents:
18520
diff
changeset
|
866 if p2 == nullid: |
5b7175377bab
setparents: drop copies from dropped p2 (issue3843)
Matt Mackall <mpm@selenic.com>
parents:
18520
diff
changeset
|
867 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
|
868 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
|
869 self.dirstate.copy(None, f) |
22405
6f63c47cbb86
dirstate: wrap setparent calls with begin/endparentchange (issue4353)
Durham Goode <durham@fb.com>
parents:
22404
diff
changeset
|
870 self.dirstate.endparentchange() |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
871 |
2564
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
872 def filectx(self, path, changeid=None, fileid=None): |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
873 """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
|
874 fileid can be a file revision or node.""" |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
875 return context.filectx(self, path, changeid, fileid) |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
876 |
627 | 877 def getcwd(self): |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
839
diff
changeset
|
878 return self.dirstate.getcwd() |
627 | 879 |
4525
78b6add1f966
Add dirstate.pathto and localrepo.pathto.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4516
diff
changeset
|
880 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
|
881 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
|
882 |
291
2c4f2be05587
Add wopener for opening files in the working directory
mpm@selenic.com
parents:
288
diff
changeset
|
883 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
|
884 return self.wvfs(f, mode) |
291
2c4f2be05587
Add wopener for opening files in the working directory
mpm@selenic.com
parents:
288
diff
changeset
|
885 |
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
|
886 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
|
887 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
|
888 |
11698
9df481f8036d
localrepo: refactor filter computation
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11669
diff
changeset
|
889 def _loadfilter(self, filter): |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
890 if filter not in self.filterpats: |
1258 | 891 l = [] |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
892 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
|
893 if cmd == '!': |
b71a52f101dc
Make it possible to disable filtering for a pattern.
Mads Kiilerich <mads@kiilerich.com>
parents:
7208
diff
changeset
|
894 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
|
895 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
|
896 fn = None |
6066
f3a8b5360100
Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents:
6065
diff
changeset
|
897 params = cmd |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
898 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
|
899 if cmd.startswith(name): |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
900 fn = filterfn |
6066
f3a8b5360100
Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents:
6065
diff
changeset
|
901 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
|
902 break |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
903 if not fn: |
5967
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
904 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
|
905 # 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
|
906 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
|
907 oldfn = fn |
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
908 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
|
909 l.append((mf, fn, params)) |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
910 self.filterpats[filter] = l |
12706
9ca08fbb750a
localrepo: have _loadfilter return the loaded filter patterns
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12687
diff
changeset
|
911 return self.filterpats[filter] |
1258 | 912 |
12707
2216ab103ea8
localrepo: load filter patterns outside of _filter
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12706
diff
changeset
|
913 def _filter(self, filterpats, filename, data): |
2216ab103ea8
localrepo: load filter patterns outside of _filter
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12706
diff
changeset
|
914 for mf, fn, cmd in filterpats: |
1258 | 915 if mf(filename): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9437
diff
changeset
|
916 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
|
917 data = fn(data, cmd, ui=self.ui, repo=self, filename=filename) |
1258 | 918 break |
919 | |
920 return data | |
1019
a9cca981c423
Create helper functions for I/O to files in the working directory
mpm@selenic.com
parents:
1013
diff
changeset
|
921 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
922 @unfilteredpropertycache |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
923 def _encodefilterpats(self): |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
924 return self._loadfilter('encode') |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
925 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
926 @unfilteredpropertycache |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
927 def _decodefilterpats(self): |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
928 return self._loadfilter('decode') |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
929 |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
930 def adddatafilter(self, name, filter): |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
931 self._datafilters[name] = filter |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
932 |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
933 def wread(self, filename): |
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
934 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
|
935 data = self.wvfs.readlink(filename) |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
936 else: |
23854
f6070d3a9cb8
localrepo: remove all internal uses of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23853
diff
changeset
|
937 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
|
938 return self._filter(self._encodefilterpats, filename, data) |
1258 | 939 |
4006
67982d3ee76c
symlinks: add flags param to wwrite
Matt Mackall <mpm@selenic.com>
parents:
4005
diff
changeset
|
940 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
|
941 """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
|
942 |
21b33f0460e0
revert: apply normallookup on reverted file if size isn't changed (issue4583)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24825
diff
changeset
|
943 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
|
944 """ |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
945 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
|
946 if 'l' in flags: |
23854
f6070d3a9cb8
localrepo: remove all internal uses of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23853
diff
changeset
|
947 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
|
948 else: |
23854
f6070d3a9cb8
localrepo: remove all internal uses of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23853
diff
changeset
|
949 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
|
950 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
|
951 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
|
952 return len(data) |
1258 | 953 |
4005
656e06eebda7
replace filehandle version of wwrite with wwritedata
Matt Mackall <mpm@selenic.com>
parents:
4004
diff
changeset
|
954 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
|
955 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
|
956 |
23379
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
957 def currenttransaction(self): |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
958 """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
|
959 if self._transref: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
960 tr = self._transref() |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
961 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
962 tr = None |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
963 |
8072
ecf7795479d5
transaction: support multiple, separate transactions
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7948
diff
changeset
|
964 if tr and tr.running(): |
23379
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
965 return tr |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
966 return None |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
967 |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
968 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
|
969 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
|
970 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
|
971 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
|
972 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
|
973 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
|
974 tr = self.currenttransaction() |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
975 if tr is not None: |
8072
ecf7795479d5
transaction: support multiple, separate transactions
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7948
diff
changeset
|
976 return tr.nest() |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
977 |
5865
e7127f669edb
transactions: don't show a backtrace when journal exists
Matt Mackall <mpm@selenic.com>
parents:
5814
diff
changeset
|
978 # 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
|
979 if self.svfs.exists("journal"): |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
980 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
|
981 _("abandoned transaction found"), |
3b4c75690206
journal: set Abort hint when failing due to an abandoned transaction
Johan Bjork <jbjoerk@gmail.com>
parents:
21237
diff
changeset
|
982 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
|
983 |
25878
800e090e9c64
localrepo: make journal.dirstate contain in-memory changes before transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25841
diff
changeset
|
984 # 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
|
985 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
|
986 |
25267
69c5cab0b893
transaction: separate calculating TXNID from creating transaction object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25219
diff
changeset
|
987 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
|
988 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
|
989 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
|
990 |
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
991 self._writejournal(desc) |
18952
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
992 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
|
993 if report: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
994 rp = report |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
995 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
996 rp = self.ui.warn |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
997 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
|
998 # 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
|
999 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
|
1000 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
|
1001 """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
|
1002 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
|
1003 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
|
1004 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
|
1005 repo = reporef() |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1006 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
|
1007 # 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
|
1008 # 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
|
1009 # 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
|
1010 # 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
|
1011 # 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
|
1012 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
|
1013 else: |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1014 # 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
|
1015 # 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
|
1016 repo.dirstate.invalidate() |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1017 |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1018 # 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
|
1019 # 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
|
1020 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
|
1021 |
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1022 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
|
1023 |
25667
a69bb29b9638
localrepo: kill off sopener (API)
Siddharth Agarwal <sid0@fb.com>
parents:
25660
diff
changeset
|
1024 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
|
1025 "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
|
1026 "undo", |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1027 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
|
1028 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
|
1029 validator=validate, |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1030 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
|
1031 |
25267
69c5cab0b893
transaction: separate calculating TXNID from creating transaction object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25219
diff
changeset
|
1032 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
|
1033 # 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
|
1034 # 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
|
1035 # 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
|
1036 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
|
1037 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
|
1038 """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
|
1039 """ |
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
1040 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
|
1041 reporef().hook('txnclose', throw=False, txnname=desc, |
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
1042 **tr2.hookargs) |
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
1043 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
|
1044 tr.addfinalize('txnclose-hook', txnclosehook) |
24792
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1045 def txnaborthook(tr2): |
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1046 """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
|
1047 """ |
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1048 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
|
1049 **tr2.hookargs) |
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1050 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
|
1051 # 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
|
1052 # 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
|
1053 tr.addpostclose('refresh-filecachestats', self._refreshfilecachestats) |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1054 self._transref = weakref.ref(tr) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1055 return tr |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1056 |
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
1057 def _journalfiles(self): |
18952
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1058 return ((self.svfs, 'journal'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1059 (self.vfs, 'journal.dirstate'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1060 (self.vfs, 'journal.branch'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1061 (self.vfs, 'journal.desc'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1062 (self.vfs, 'journal.bookmarks'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1063 (self.svfs, 'journal.phaseroots')) |
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
1064 |
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
1065 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
|
1066 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
|
1067 |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1068 def _writejournal(self, desc): |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1069 self.vfs.write("journal.dirstate", |
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1070 self.vfs.tryread("dirstate")) |
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1071 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
|
1072 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
|
1073 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
|
1074 "%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
|
1075 self.vfs.write("journal.bookmarks", |
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1076 self.vfs.tryread("bookmarks")) |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
1077 self.svfs.write("journal.phaseroots", |
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
1078 self.svfs.tryread("phaseroots")) |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1079 |
210 | 1080 def recover(self): |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8108
diff
changeset
|
1081 lock = self.lock() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1082 try: |
18947
9b82f93e3a7a
localrepo: use "vfs.exists()" instead of "os.path.exists()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18946
diff
changeset
|
1083 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
|
1084 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
|
1085 vfsmap = {'': self.svfs, |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1086 'plain': self.vfs,} |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
1087 transaction.rollback(self.svfs, vfsmap, "journal", |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1088 self.ui.warn) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1089 self.invalidate() |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1090 return True |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1091 else: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1092 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
|
1093 return False |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1094 finally: |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8108
diff
changeset
|
1095 lock.release() |
210 | 1096 |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1097 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
|
1098 wlock = lock = dsguard = None |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1099 try: |
1712
21dcf38e5d7d
Allow callers to pass in the dirstate lock in most localrepo.py funcs.
mason@suse.com
parents:
1709
diff
changeset
|
1100 wlock = self.wlock() |
4438
3900f684a150
Fix hg import --exact bug that hangs hg on failure.
Eric Hopper <hopper@omnifarious.org>
parents:
4417
diff
changeset
|
1101 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
|
1102 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
|
1103 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
|
1104 |
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1105 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
|
1106 else: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1107 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
|
1108 return 1 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1109 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
|
1110 release(dsguard, lock, wlock) |
162 | 1111 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
1112 @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
|
1113 def _rollback(self, dryrun, force, dsguard): |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1114 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
|
1115 try: |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1116 args = self.vfs.read('undo.desc').splitlines() |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1117 (oldlen, desc, detail) = (int(args[0]), args[1], None) |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1118 if len(args) >= 3: |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1119 detail = args[2] |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1120 oldtip = oldlen - 1 |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1121 |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1122 if detail and ui.verbose: |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1123 msg = (_('repository tip rolled back to revision %s' |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1124 ' (undo %s: %s)\n') |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1125 % (oldtip, desc, detail)) |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1126 else: |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1127 msg = (_('repository tip rolled back to revision %s' |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1128 ' (undo %s)\n') |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1129 % (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
|
1130 except IOError: |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1131 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
|
1132 desc = None |
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1133 |
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1134 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
|
1135 raise error.Abort( |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1136 _('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
|
1137 '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
|
1138 |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1139 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
|
1140 if dryrun: |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
1141 return 0 |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1142 |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1143 parents = self.dirstate.parents() |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1144 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
|
1145 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
|
1146 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
|
1147 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
|
1148 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
|
1149 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
|
1150 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
|
1151 self.invalidate() |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1152 |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1153 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
|
1154 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
|
1155 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
|
1156 # 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
|
1157 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
|
1158 |
18948
2f05fa162316
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18947
diff
changeset
|
1159 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
|
1160 try: |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1161 branch = self.vfs.read('undo.branch') |
17360
935831597e16
rollback: write dirstate branch with correct encoding
Sune Foldager <cryo@cyanite.org>
parents:
17324
diff
changeset
|
1162 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
|
1163 except IOError: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1164 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
|
1165 'current branch is still \'%s\'\n') |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1166 % self.dirstate.branch()) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1167 |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1168 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
|
1169 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
|
1170 if len(parents) > 1: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1171 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
|
1172 'revisions %d and %d\n') % parents) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1173 else: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1174 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
|
1175 'revision %d\n') % parents) |
26989
a65ea44f163e
localrepo: switch to mergestate.clean()
Siddharth Agarwal <sid0@fb.com>
parents:
26907
diff
changeset
|
1176 mergemod.mergestate.clean(self, self['.'].node()) |
24784
59406b8b1303
rollback: clear resolve state (issue4593)
Matt Mackall <mpm@selenic.com>
parents:
24750
diff
changeset
|
1177 |
17013
c8eda7bbdcab
strip: incrementally update the branchheads cache after a strip
Joshua Redstone <joshua.redstone@fb.com>
parents:
17012
diff
changeset
|
1178 # 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
|
1179 # 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
|
1180 # invalidated. |
15604
b8d8599410da
rollback: always call destroyed() (regression from 1.9)
Greg Ward <greg-hg@gerg.ca>
parents:
15381
diff
changeset
|
1181 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
|
1182 return 0 |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
1183 |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
1184 def invalidatecaches(self): |
15988
827e0126738d
localrepo: delete _phaserev when invalidating caches
Idan Kamara <idankk86@gmail.com>
parents:
15987
diff
changeset
|
1185 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
1186 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
|
1187 # 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
|
1188 del self.__dict__['_tagscache'] |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
1189 |
18189
b9026ba002f6
branchmap: enable caching for filtered version too
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18186
diff
changeset
|
1190 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
|
1191 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
|
1192 |
312262ebc223
cache: group obscache and revsfiltercache invalidation in a single function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18101
diff
changeset
|
1193 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
|
1194 self.filteredrevcache.clear() |
17469
fb72eec7efd8
obsolete: introduce caches for all meaningful sets
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17434
diff
changeset
|
1195 obsolete.clearobscaches(self) |
1784
2e0a288ca93e
revalidate revlog data after locking the repo (issue132)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1782
diff
changeset
|
1196 |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1197 def invalidatedirstate(self): |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1198 '''Invalidates the dirstate, causing the next call to dirstate |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1199 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
|
1200 rereading it if it has. |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1201 |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1202 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
|
1203 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
|
1204 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
|
1205 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
|
1206 if hasunfilteredcache(self, 'dirstate'): |
16200
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1207 for k in self.dirstate._filecache: |
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1208 try: |
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1209 delattr(self.dirstate, k) |
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1210 except AttributeError: |
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1211 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
|
1212 delattr(self.unfiltered(), 'dirstate') |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1213 |
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1214 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
|
1215 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
|
1216 for k in self._filecache.keys(): |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1217 # dirstate is invalidated separately in invalidatedirstate() |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1218 if k == 'dirstate': |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1219 continue |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1220 |
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1221 if clearfilecache: |
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1222 del self._filecache[k] |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1223 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
|
1224 delattr(unfiltered, k) |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1225 except AttributeError: |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1226 pass |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
1227 self.invalidatecaches() |
20884
2efdd186925d
caches: invalidate store caches when lock is taken
Durham Goode <durham@fb.com>
parents:
20883
diff
changeset
|
1228 self.store.invalidatecaches() |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
1229 |
20627
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1230 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
|
1231 '''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
|
1232 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
|
1233 # 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
|
1234 self.invalidate() |
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1235 self.invalidatedirstate() |
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1236 |
26251
5c0f5db65c6b
localrepo: refresh filecache stats only if transaction finished successfully
Yuya Nishihara <yuya@tcha.org>
parents:
26250
diff
changeset
|
1237 def _refreshfilecachestats(self, tr): |
26250
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
1238 """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
|
1239 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
|
1240 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
|
1241 continue |
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
1242 ce.refresh() |
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
1243 |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1244 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
|
1245 inheritchecker=None, parentenvvar=None): |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1246 parentlock = None |
26472
406a654b41cb
localrepo: add a note about parentenvvar
Siddharth Agarwal <sid0@fb.com>
parents:
26449
diff
changeset
|
1247 # 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
|
1248 # determine whether it can be inherited |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1249 if parentenvvar is not None: |
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1250 parentlock = os.environ.get(parentenvvar) |
161 | 1251 try: |
26321
db4c192cb9b3
lock: move acquirefn call to inside the lock
Siddharth Agarwal <sid0@fb.com>
parents:
26320
diff
changeset
|
1252 l = lockmod.lock(vfs, lockname, 0, releasefn=releasefn, |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1253 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
|
1254 inheritchecker=inheritchecker, |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1255 parentlock=parentlock) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
1256 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
|
1257 if not wait: |
2016
ff5c9a92f556
fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1998
diff
changeset
|
1258 raise |
3688
d92dad355000
Corrected "waiting for lock on repository FOO held by BAR" message.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3687
diff
changeset
|
1259 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
|
1260 (desc, inst.locker)) |
2016
ff5c9a92f556
fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1998
diff
changeset
|
1261 # 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
|
1262 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
|
1263 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
|
1264 releasefn=releasefn, acquirefn=acquirefn, |
db4c192cb9b3
lock: move acquirefn call to inside the lock
Siddharth Agarwal <sid0@fb.com>
parents:
26320
diff
changeset
|
1265 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
|
1266 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
|
1267 return l |
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
1268 |
15587
809d5d30e377
localrepo: rename _postrelease to _afterlock
Matt Mackall <mpm@selenic.com>
parents:
15586
diff
changeset
|
1269 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
|
1270 """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
|
1271 |
24821
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1272 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
|
1273 (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
|
1274 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
|
1275 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
|
1276 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
|
1277 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
|
1278 break |
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1279 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
|
1280 callback() |
15583
926a06f7a353
lock: add mechanism to register post release callback
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15486
diff
changeset
|
1281 |
4914 | 1282 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
|
1283 '''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
|
1284 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
|
1285 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
|
1286 |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1287 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
|
1288 '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
|
1289 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
|
1290 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
|
1291 l.lock() |
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
1292 return l |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
1293 |
26251
5c0f5db65c6b
localrepo: refresh filecache stats only if transaction finished successfully
Yuya Nishihara <yuya@tcha.org>
parents:
26250
diff
changeset
|
1294 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
|
1295 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
|
1296 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
|
1297 return l |
1751
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
1298 |
26499
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1299 def _wlockchecktransaction(self): |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1300 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
|
1301 raise error.LockInheritanceContractViolation( |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1302 '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
|
1303 |
4914 | 1304 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
|
1305 '''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
|
1306 .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
|
1307 |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1308 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
|
1309 |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1310 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
|
1311 '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
|
1312 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
|
1313 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
|
1314 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
|
1315 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
|
1316 |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26767
diff
changeset
|
1317 # 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
|
1318 # 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
|
1319 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
|
1320 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
|
1321 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
|
1322 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
|
1323 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
|
1324 |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1325 def unlock(): |
22404
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
1326 if self.dirstate.pendingparentchange(): |
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
1327 self.dirstate.invalidate() |
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
1328 else: |
26748
5ba0a99ff27f
dirstate: make dirstate.write() callers pass transaction object to it
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26741
diff
changeset
|
1329 self.dirstate.write(None) |
22404
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
1330 |
18318
948f495fb230
localrepo: drop unnecessary check on wlock unlock
Idan Kamara <idankk86@gmail.com>
parents:
18314
diff
changeset
|
1331 self._filecache['dirstate'].refresh() |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1332 |
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
|
1333 l = self._lock(self.vfs, "wlock", wait, unlock, |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1334 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
|
1335 self.origroot, |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1336 inheritchecker=self._wlockchecktransaction, |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1337 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
|
1338 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
|
1339 return l |
1531
2ba8bf7defda
add localrepo.wlock for protecting the dirstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1516
diff
changeset
|
1340 |
26488
df2dc5141721
localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26475
diff
changeset
|
1341 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
|
1342 """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
|
1343 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
|
1344 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
|
1345 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
|
1346 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
|
1347 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
|
1348 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
|
1349 |
26489
2a3fc0272e3f
localrepo: add a way to get the current wlock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26488
diff
changeset
|
1350 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
|
1351 """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
|
1352 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
|
1353 |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1354 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
|
1355 """ |
3294
a2d93b186a0e
commit: unify file-level commit code
Matt Mackall <mpm@selenic.com>
parents:
3293
diff
changeset
|
1356 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
|
1357 """ |
3292
764688cf51e5
merge: remember rename copies and parents properly on commit
Matt Mackall <mpm@selenic.com>
parents:
3241
diff
changeset
|
1358 |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1359 fname = fctx.path() |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1360 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
|
1361 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
|
1362 if isinstance(fctx, context.filectx): |
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1363 node = fctx.filenode() |
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1364 if node in [fparent1, fparent2]: |
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1365 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
|
1366 return node |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1367 |
24394
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1368 flog = self.file(fname) |
3292
764688cf51e5
merge: remember rename copies and parents properly on commit
Matt Mackall <mpm@selenic.com>
parents:
3241
diff
changeset
|
1369 meta = {} |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1370 copy = fctx.renamed() |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1371 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
|
1372 # 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
|
1373 # 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
|
1374 # 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
|
1375 # 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
|
1376 # 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
|
1377 # |
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
|
1378 # 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
|
1379 # \ / 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
|
1380 # \- 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
|
1381 # 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
|
1382 # 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
|
1383 # |
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
|
1384 # 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
|
1385 # |
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
|
1386 # 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
|
1387 # \ / 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
|
1388 # \- 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
|
1389 # |
6874
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
1390 |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1391 cfname = copy[0] |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1392 crev = manifest1.get(cfname) |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1393 newfparent = fparent2 |
6874
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
1394 |
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
1395 if manifest2: # branch merge |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1396 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
|
1397 if cfname in manifest2: |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1398 crev = manifest2[cfname] |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1399 newfparent = fparent1 |
6874
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
1400 |
23929
a43fdf33a6be
commit: remove reverse search for copy source when not in parent (issue4476)
Ryan McElroy <rmcelroy@fb.com>
parents:
23917
diff
changeset
|
1401 # 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
|
1402 # 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
|
1403 # 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
|
1404 # 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
|
1405 # 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
|
1406 # 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
|
1407 # 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
|
1408 # behavior in this circumstance. |
6875 | 1409 |
13000
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1410 if crev: |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1411 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
|
1412 meta["copy"] = cfname |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1413 meta["copyrev"] = hex(crev) |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1414 fparent1, fparent2 = nullid, newfparent |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1415 else: |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1416 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
|
1417 "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
|
1418 |
20556
db0740a487ab
localrepo: commit: avoid calling expensive ancestor function when p1 is nullrev
Mads Kiilerich <madski@unity3d.com>
parents:
20469
diff
changeset
|
1419 elif fparent1 == nullid: |
db0740a487ab
localrepo: commit: avoid calling expensive ancestor function when p1 is nullrev
Mads Kiilerich <madski@unity3d.com>
parents:
20469
diff
changeset
|
1420 fparent1, fparent2 = fparent2, nullid |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1421 elif fparent2 != nullid: |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1422 # 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
|
1423 fparentancestors = flog.commonancestorsheads(fparent1, fparent2) |
20987
298c9f346dde
commit: use revlog.commonancestors instead of .ancestor
Mads Kiilerich <madski@unity3d.com>
parents:
20975
diff
changeset
|
1424 if fparent1 in fparentancestors: |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1425 fparent1, fparent2 = fparent2, nullid |
20987
298c9f346dde
commit: use revlog.commonancestors instead of .ancestor
Mads Kiilerich <madski@unity3d.com>
parents:
20975
diff
changeset
|
1426 elif fparent2 in fparentancestors: |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1427 fparent2 = nullid |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1428 |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1429 # is the file changed? |
24394
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1430 text = fctx.data() |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1431 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
|
1432 changelist.append(fname) |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1433 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
|
1434 # 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
|
1435 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
|
1436 changelist.append(fname) |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1437 |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1438 return fparent1 |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1439 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
1440 @unfilteredmethod |
8706
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1441 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
|
1442 editor=False, extra=None): |
8515
865e08a7d6b0
localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8503
diff
changeset
|
1443 """Add a new revision to current repository. |
865e08a7d6b0
localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8503
diff
changeset
|
1444 |
8706
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1445 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
|
1446 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
|
1447 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
|
1448 """ |
26322
2cd19782d2d4
commit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26321
diff
changeset
|
1449 if extra is None: |
2cd19782d2d4
commit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26321
diff
changeset
|
1450 extra = {} |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1451 |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1452 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
|
1453 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
|
1454 |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1455 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
|
1456 match = matchmod.always(self.root, '') |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1457 |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1458 if not force: |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1459 vdirs = [] |
19138
e579687cb5d8
localrepo.commit: hook into match.explicitdir
Siddharth Agarwal <sid0@fb.com>
parents:
19097
diff
changeset
|
1460 match.explicitdir = vdirs.append |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1461 match.bad = fail |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1462 |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1463 wlock = lock = tr = None |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1464 try: |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1465 wlock = self.wlock() |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1466 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
|
1467 merge = len(wctx.parents()) > 1 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1468 |
25114
d1d69ca78883
match: add match.ispartial()
Drew Gottlieb <drgott@google.com>
parents:
25021
diff
changeset
|
1469 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
|
1470 raise error.Abort(_('cannot partially commit a merge ' |
8397
613ac2856535
remove deprecated rawcommit
Matt Mackall <mpm@selenic.com>
parents:
8395
diff
changeset
|
1471 '(do not specify files or patterns)')) |
6706
716a1296e182
localrepo: replace dirstate by workingfilectx in filecommit()
Patrick Mezard <pmezard@gmail.com>
parents:
6705
diff
changeset
|
1472 |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1473 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
|
1474 if force: |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1475 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
|
1476 |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1477 # check subrepos |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1478 subs = [] |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1479 commitsubs = set() |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1480 newstate = wctx.substate.copy() |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1481 # 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
|
1482 if '.hgsub' in wctx: |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1483 # 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
|
1484 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
|
1485 if '.hgsubstate' in c: |
ca5dd216cb62
localrepo: omit ".hgsubstate" also from "added" files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20776
diff
changeset
|
1486 c.remove('.hgsubstate') |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1487 |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1488 # 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
|
1489 # 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
|
1490 oldstate = wctx.p1().substate |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1491 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
|
1492 if not match(s): |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1493 # 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
|
1494 if s in oldstate: |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1495 newstate[s] = oldstate[s] |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1496 continue |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1497 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
|
1498 raise error.Abort( |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1499 _("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
|
1500 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
|
1501 if dirtyreason: |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1502 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
|
1503 raise error.Abort(dirtyreason, |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1504 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
|
1505 subs.append(s) |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1506 commitsubs.add(s) |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1507 else: |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1508 bs = wctx.sub(s).basestate() |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1509 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
|
1510 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
|
1511 subs.append(s) |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1512 |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1513 # 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
|
1514 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
|
1515 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
|
1516 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
|
1517 if subs: |
14536
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1518 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
|
1519 '.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
|
1520 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
|
1521 _("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
|
1522 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
|
1523 |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1524 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
|
1525 # 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
|
1526 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
|
1527 '.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
|
1528 status.removed)): |
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1529 status.removed.insert(0, '.hgsubstate') |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1530 |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1531 # 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
|
1532 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
|
1533 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
|
1534 |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1535 for f in match.files(): |
17378
b05e517c2236
commit: normalize filenames when checking explicit files (issue3576)
Matt Mackall <mpm@selenic.com>
parents:
17360
diff
changeset
|
1536 f = self.dirstate.normalize(f) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1537 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
|
1538 continue |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1539 if f in status.deleted: |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1540 fail(f, _('file not found!')) |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1541 if f in vdirs: # visited directory |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1542 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
|
1543 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
|
1544 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
|
1545 break |
bcb6e5bebd93
commit: trade O(n^2) file checks for O(n^2) dir checks
Matt Mackall <mpm@selenic.com>
parents:
8709
diff
changeset
|
1546 else: |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1547 fail(f, _("no match under directory!")) |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1548 elif f not in self.dirstate: |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1549 fail(f, _("file not tracked!")) |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1550 |
23710
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23667
diff
changeset
|
1551 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
|
1552 text, user, date, extra) |
18659
b946470efed9
localrepo: create context used for actual commit earlier
David Schleimer <dschleimer@fb.com>
parents:
18644
diff
changeset
|
1553 |
25840
25897d778738
commit: mark internal-only option
Matt Mackall <mpm@selenic.com>
parents:
25839
diff
changeset
|
1554 # 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
|
1555 allowemptycommit = (wctx.branch() != wctx.p1().branch() |
25018
93e015a3d1ea
commit: add ui.allowemptycommit config option
Durham Goode <durham@fb.com>
parents:
25017
diff
changeset
|
1556 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
|
1557 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
|
1558 if not allowemptycommit: |
8404
a2bc39ade36b
commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents:
8403
diff
changeset
|
1559 return None |
a2bc39ade36b
commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents:
8403
diff
changeset
|
1560 |
18660
7e6946ed5756
localrepo: use workingctx for validation in commit
David Schleimer <dschleimer@fb.com>
parents:
18659
diff
changeset
|
1561 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
|
1562 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
|
1563 |
26741
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1564 unresolved, driverresolved = False, False |
26996
bf3eec62212f
localrepo.commit: switch to mergestate.read()
Siddharth Agarwal <sid0@fb.com>
parents:
26989
diff
changeset
|
1565 ms = mergemod.mergestate.read(self) |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1566 for f in status.modified: |
26741
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1567 if f in ms: |
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1568 if ms[f] == 'u': |
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1569 unresolved = True |
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1570 elif ms[f] == 'd': |
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1571 driverresolved = True |
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1572 |
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1573 if unresolved: |
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1574 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
|
1575 '(see "hg help resolve")')) |
26767
69a121c378ef
localrepo.commit: abort if merge driver's conclude step hasn't been run yet
Siddharth Agarwal <sid0@fb.com>
parents:
26751
diff
changeset
|
1576 if driverresolved or ms.mdstate() != 's': |
26741
e1568d5eb052
localrepo.commit: disallow commit when driver-resolved files exist
Siddharth Agarwal <sid0@fb.com>
parents:
26702
diff
changeset
|
1577 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
|
1578 hint=_('run "hg resolve --all" to resolve')) |
8496
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1579 |
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1580 if editor: |
8994
4a1187d3cb00
commit: report modified subrepos in commit editor
Matt Mackall <mpm@selenic.com>
parents:
8954
diff
changeset
|
1581 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
|
1582 edited = (text != cctx._text) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1583 |
20765
f042d4b263f4
localrepo: save manually edited commit message as soon as possible
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20332
diff
changeset
|
1584 # 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
|
1585 # (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
|
1586 # 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
|
1587 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
|
1588 |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1589 # 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
|
1590 if subs: |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1591 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
|
1592 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
|
1593 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
|
1594 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
|
1595 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
|
1596 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
|
1597 subrepo.writestate(self, newstate) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1598 |
10970
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1599 p1, p2 = self.dirstate.parents() |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1600 lock = self.lock() |
10970
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1601 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
|
1602 try: |
16683 | 1603 self.hook("precommit", throw=True, parent1=hookp1, |
1604 parent2=hookp2) | |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1605 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
|
1606 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
|
1607 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
|
1608 if edited: |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1609 self.ui.write( |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1610 _('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
|
1611 raise |
13357
b67867940bd1
bookmarks: move commit action into core
Matt Mackall <mpm@selenic.com>
parents:
13356
diff
changeset
|
1612 # update bookmarks, dirstate and mergestate |
16706
a270ec977ba6
bookmarks: delete divergent bookmarks on merge
David Soria Parra <dsp@php.net>
parents:
16705
diff
changeset
|
1613 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
|
1614 cctx.markcommitted(ret) |
8503
90f86a5330bb
commit: tidy up mergestate slightly
Matt Mackall <mpm@selenic.com>
parents:
8502
diff
changeset
|
1615 ms.reset() |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1616 tr.close() |
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1617 |
6710
0aa91f69a4c4
localrepo: extract _commitctx() from commit()
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1618 finally: |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1619 lockmod.release(tr, lock, wlock) |
6710
0aa91f69a4c4
localrepo: extract _commitctx() from commit()
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1620 |
16680
d0e419b0f7de
tag: run commit hook when lock is released (issue3344)
Mads Kiilerich <mads@kiilerich.com>
parents:
16679
diff
changeset
|
1621 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
|
1622 # 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
|
1623 # 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
|
1624 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
|
1625 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
|
1626 parent2=parent2) |
16680
d0e419b0f7de
tag: run commit hook when lock is released (issue3344)
Mads Kiilerich <mads@kiilerich.com>
parents:
16679
diff
changeset
|
1627 self._afterlock(commithook) |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
1628 return ret |
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
1629 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
1630 @unfilteredmethod |
8496
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1631 def commitctx(self, ctx, error=False): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7072
diff
changeset
|
1632 """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
|
1633 Revision information is passed via the context argument. |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7072
diff
changeset
|
1634 """ |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6712
diff
changeset
|
1635 |
22908
71570f310417
commit: remove dead initialization of 'lock'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22907
diff
changeset
|
1636 tr = None |
8414
2348ce25849b
commitctx: use contexts more fully
Matt Mackall <mpm@selenic.com>
parents:
8412
diff
changeset
|
1637 p1, p2 = ctx.p1(), ctx.p2() |
8412
2bf4f380f6ab
commitctx: eliminate some variables
Matt Mackall <mpm@selenic.com>
parents:
8411
diff
changeset
|
1638 user = ctx.user() |
990 | 1639 |
8411
4d5916358abd
commit: move lots of commitctx outside of the repo lock
Matt Mackall <mpm@selenic.com>
parents:
8410
diff
changeset
|
1640 lock = self.lock() |
4d5916358abd
commit: move lots of commitctx outside of the repo lock
Matt Mackall <mpm@selenic.com>
parents:
8410
diff
changeset
|
1641 try: |
10881
a685011ed38e
localrepo: add desc parameter to transaction
Steve Borho <steve@borho.org>
parents:
10877
diff
changeset
|
1642 tr = self.transaction("commit") |
4970
30d4d8985dd8
transactions: avoid late tear-down (issue641)
Matt Mackall <mpm@selenic.com>
parents:
4917
diff
changeset
|
1643 trp = weakref.proxy(tr) |
151 | 1644 |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1645 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
|
1646 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
|
1647 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
|
1648 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
|
1649 |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1650 # 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
|
1651 added = [] |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1652 changed = [] |
22907
a337f4b9b99d
commit: reduce scope of 'removed' variable
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22852
diff
changeset
|
1653 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
|
1654 linkrev = len(self) |
23749
a387b0390082
localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents:
23714
diff
changeset
|
1655 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
|
1656 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
|
1657 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
|
1658 try: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1659 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
|
1660 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
|
1661 removed.append(f) |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22201
diff
changeset
|
1662 else: |
22910
4f2a5c7cdf78
commit: update file nodeid and flags in the same place
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22909
diff
changeset
|
1663 added.append(f) |
4f2a5c7cdf78
commit: update file nodeid and flags in the same place
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22909
diff
changeset
|
1664 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
|
1665 trp, changed) |
22942
03602f76deee
manifest: rename ambiguously-named set to setflag
Augie Fackler <raf@durin42.com>
parents:
22928
diff
changeset
|
1666 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
|
1667 except OSError as inst: |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1668 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
|
1669 raise |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
1670 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
|
1671 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
|
1672 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
|
1673 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
|
1674 raise |
220 | 1675 |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1676 # update manifest |
23749
a387b0390082
localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents:
23714
diff
changeset
|
1677 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
|
1678 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
|
1679 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
|
1680 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
|
1681 del m[f] |
4545c5b53013
commit: use separate variable for p1 manifest and new manifest
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22908
diff
changeset
|
1682 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
|
1683 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
|
1684 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
|
1685 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
|
1686 else: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1687 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
|
1688 files = [] |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1689 |
8499
fb9b83df45f3
commit: move description trimming into changelog
Matt Mackall <mpm@selenic.com>
parents:
8498
diff
changeset
|
1690 # update changelog |
23749
a387b0390082
localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents:
23714
diff
changeset
|
1691 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
|
1692 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
|
1693 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
|
1694 trp, p1.node(), p2.node(), |
8412
2bf4f380f6ab
commitctx: eliminate some variables
Matt Mackall <mpm@selenic.com>
parents:
8411
diff
changeset
|
1695 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
|
1696 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
|
1697 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
|
1698 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
|
1699 # 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
|
1700 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
|
1701 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
|
1702 # 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
|
1703 # 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
|
1704 # 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
|
1705 # |
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
|
1706 # 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
|
1707 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
|
1708 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
|
1709 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
|
1710 return n |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1711 finally: |
11230
5116a077c3da
make transactions work on non-refcounted python implementations
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
11228
diff
changeset
|
1712 if tr: |
5116a077c3da
make transactions work on non-refcounted python implementations
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
11228
diff
changeset
|
1713 tr.release() |
8405
7cbf8fcd2453
commit: push repo lock down into _commitctx
Matt Mackall <mpm@selenic.com>
parents:
8404
diff
changeset
|
1714 lock.release() |
660
2c83350784c3
Move commit hook after commit completes
Matt Mackall <mpm@selenic.com>
parents:
659
diff
changeset
|
1715 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
1716 @unfilteredmethod |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1717 def destroying(self): |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1718 '''Inform the repository that nodes are about to be destroyed. |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1719 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
|
1720 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
|
1721 |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1722 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
|
1723 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
|
1724 destroyed is imminent, the repo will be invalidated causing those |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1725 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
|
1726 completely. |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1727 ''' |
18312
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1728 # 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
|
1729 # 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
|
1730 # causing those changes to disappear. |
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1731 if '_phasecache' in vars(self): |
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1732 self._phasecache.write() |
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1733 |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1734 @unfilteredmethod |
18395
904b7109938e
destroyed: drop complex branchcache rebuilt logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18394
diff
changeset
|
1735 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
|
1736 '''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
|
1737 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
|
1738 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
|
1739 ''' |
18221
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1740 # When one tries to: |
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1741 # 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
|
1742 # 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
|
1743 # |
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1744 # 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
|
1745 # 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
|
1746 # 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
|
1747 # 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
|
1748 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
|
1749 self._phasecache.write() |
18221
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1750 |
18396
dd3fd3353e23
destroyed: update `unserved` branchcache instead
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18395
diff
changeset
|
1751 # 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
|
1752 # 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
|
1753 # 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
|
1754 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
|
1755 |
9151
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1756 # 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
|
1757 # 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
|
1758 # 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
|
1759 # guarantees that "cachetip == currenttip" (comparing both rev |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1760 # 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
|
1761 |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1762 # 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
|
1763 # 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
|
1764 # 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
|
1765 # 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
|
1766 self.invalidate() |
17324
9f94358f9f93
localrepo: clear the filecache on _rollback() and destroyed()
Idan Kamara <idankk86@gmail.com>
parents:
17306
diff
changeset
|
1767 |
6585 | 1768 def walk(self, match, node=None): |
3532 | 1769 ''' |
1770 walk recursively through the directory tree or a given | |
1771 changeset, finding all files matched by the match | |
1772 function | |
1773 ''' | |
6764 | 1774 return self[node].walk(match) |
3532 | 1775 |
6769 | 1776 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
|
1777 ignored=False, clean=False, unknown=False, |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1778 listsubrepos=False): |
21596
83bbfb23cb24
localrepo: replace status method with a shim
Sean Farley <sean.michael.farley@gmail.com>
parents:
21591
diff
changeset
|
1779 '''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
|
1780 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
|
1781 listsubrepos) |
2661
5c10b7ed3411
status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2621
diff
changeset
|
1782 |
8796
2bcef677a6c3
localrepo: remove 'closed' argument to heads(...) function
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
8731
diff
changeset
|
1783 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
|
1784 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
|
1785 # 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
|
1786 return sorted(heads, key=self.changelog.rev, reverse=True) |
222 | 1787 |
8694
ca8d05e1f1d1
localrepo: set heads and branchheads to be closed=False by default
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
8680
diff
changeset
|
1788 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
|
1789 '''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
|
1790 |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1791 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
|
1792 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
|
1793 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
|
1794 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
|
1795 ''' |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
1796 if branch is None: |
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
1797 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
|
1798 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
|
1799 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
|
1800 return [] |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
1801 # 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
|
1802 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
|
1803 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
|
1804 # 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
|
1805 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
|
1806 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
|
1807 return bheads |
4648
8e503fa54d2d
Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents:
4635
diff
changeset
|
1808 |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1809 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
|
1810 if not nodes: |
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
1811 nodes = [self.changelog.tip()] |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1812 b = [] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1813 for n in nodes: |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1814 t = n |
14494
1ffeeb91c55d
check-code: flag 0/1 used as constant Boolean expression
Martin Geisler <mg@lazybytes.net>
parents:
14482
diff
changeset
|
1815 while True: |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1816 p = self.changelog.parents(n) |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1817 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
|
1818 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
|
1819 break |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1820 n = p[0] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1821 return b |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1822 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1823 def between(self, pairs): |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1824 r = [] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1825 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1826 for top, bottom in pairs: |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1827 n, l, i = top, [], 0 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1828 f = 1 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1829 |
7708
a32847fa0df0
wire protocol: avoid infinite loop (issue1483)
Matt Mackall <mpm@selenic.com>
parents:
7564
diff
changeset
|
1830 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
|
1831 p = self.changelog.parents(n)[0] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1832 if i == f: |
575 | 1833 l.append(n) |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1834 f = f * 2 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1835 n = p |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1836 i += 1 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1837 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1838 r.append(l) |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1839 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1840 return r |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1841 |
20924
e10000369b47
push: pass a `pushoperation` object to localrepo.checkpush
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20884
diff
changeset
|
1842 def checkpush(self, pushop): |
13327
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1843 """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
|
1844 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
|
1845 command. |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1846 """ |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1847 pass |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1848 |
21043
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
1849 @unfilteredpropertycache |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
1850 def prepushoutgoinghooks(self): |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
1851 """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
|
1852 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
|
1853 """ |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
1854 return util.hooks() |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
1855 |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
1856 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
|
1857 try: |
24824
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
1858 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
|
1859 hookargs = {} |
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
1860 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
|
1861 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
|
1862 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
|
1863 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
|
1864 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
|
1865 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
|
1866 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
|
1867 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
|
1868 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
|
1869 if exc.hint: |
53a65929ef1f
pushkey: gracefully handle prepushkey hook failure (issue4455)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23129
diff
changeset
|
1870 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
|
1871 return False |
17293
d3f84ccc5495
pushkey: add more verbose debug output regarding pushkey
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17252
diff
changeset
|
1872 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
|
1873 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
|
1874 def runhook(): |
915ac9403e13
pushkey: run hook after the lock release
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23630
diff
changeset
|
1875 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
|
1876 ret=ret) |
915ac9403e13
pushkey: run hook after the lock release
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23630
diff
changeset
|
1877 self._afterlock(runhook) |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
1878 return ret |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
1879 |
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
1880 def listkeys(self, namespace): |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
1881 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
|
1882 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
|
1883 values = pushkey.list(self, namespace) |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
1884 self.hook('listkeys', namespace=namespace, values=values) |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
1885 return values |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
1886 |
14048
58e58406ed19
wireproto: add test for new optional arg missing on server
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14036
diff
changeset
|
1887 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
|
1888 '''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
|
1889 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
|
1890 |
14529
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
1891 def savecommitmessage(self, text): |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1892 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
|
1893 try: |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
1894 fp.write(text) |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
1895 finally: |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
1896 fp.close() |
18054
b35e3364f94a
check-code: there must also be whitespace between ')' and operator
Mads Kiilerich <madski@unity3d.com>
parents:
18044
diff
changeset
|
1897 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
|
1898 |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
1899 # 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
|
1900 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
|
1901 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
|
1902 def a(): |
18952
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1903 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
|
1904 try: |
18952
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1905 vfs.rename(src, dest) |
16441
9dd10a574af2
localrepo: do not complain about missing journal files
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
16426
diff
changeset
|
1906 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
|
1907 pass |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
1908 return a |
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
1909 |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1910 def undoname(fn): |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1911 base, name = os.path.split(fn) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1912 assert name.startswith('journal') |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1913 return os.path.join(base, name.replace('journal', 'undo', 1)) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1914 |
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
1915 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
|
1916 return localrepository(ui, util.urllocalpath(path), create) |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3164
diff
changeset
|
1917 |
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
1918 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
|
1919 return True |