author | Martin von Zweigbergk <martinvonz@google.com> |
Thu, 13 Jul 2017 09:51:50 -0700 | |
changeset 33439 | 0e114b992e02 |
parent 33437 | 0720e6265c8a |
child 33440 | ec306bc6915b |
permissions | -rw-r--r-- |
1089 | 1 |
# localrepo.py - read/write repository class for mercurial |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
2 |
# |
4635
63b9d2deed48
Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4633
diff
changeset
|
3 |
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
4 |
# |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8210
diff
changeset
|
5 |
# This software may be used and distributed according to the terms of the |
10263 | 6 |
# GNU General Public License version 2 or any later version. |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
7 |
|
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
8 |
from __future__ import absolute_import |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
9 |
|
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
10 |
import errno |
29341
0d83ad967bf8
cleanup: replace uses of util.(md5|sha1|sha256|sha512) with hashlib.\1
Augie Fackler <raf@durin42.com>
parents:
29237
diff
changeset
|
11 |
import hashlib |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
12 |
import inspect |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
13 |
import os |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
14 |
import random |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
15 |
import time |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
16 |
import weakref |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
17 |
|
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
18 |
from .i18n import _ |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
19 |
from .node import ( |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
20 |
hex, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
21 |
nullid, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
22 |
short, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
23 |
) |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
24 |
from . import ( |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
25 |
bookmarks, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
26 |
branchmap, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
27 |
bundle2, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
28 |
changegroup, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
29 |
changelog, |
31111
95ec3ad62f62
color: initialize color for the localrepo ui
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31054
diff
changeset
|
30 |
color, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
31 |
context, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
32 |
dirstate, |
30492
77cd647b04ac
localrepo: refer to dirstateguard by its new name
Augie Fackler <augie@google.com>
parents:
30377
diff
changeset
|
33 |
dirstateguard, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
34 |
encoding, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
35 |
error, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
36 |
exchange, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
37 |
extensions, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
38 |
filelog, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
39 |
hook, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
40 |
lock as lockmod, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
41 |
manifest, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
42 |
match as matchmod, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
43 |
merge as mergemod, |
30496
a90867a22daf
localrepo: refer to checkunresolved by its new name
Augie Fackler <augie@google.com>
parents:
30492
diff
changeset
|
44 |
mergeutil, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
45 |
namespaces, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
46 |
obsolete, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
47 |
pathutil, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
48 |
peer, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
49 |
phases, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
50 |
pushkey, |
31508
590319c07259
localrepo: ensure transaction id is fully bytes on py3
Augie Fackler <augie@google.com>
parents:
31476
diff
changeset
|
51 |
pycompat, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
52 |
repoview, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
53 |
revset, |
31024
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30989
diff
changeset
|
54 |
revsetlang, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
55 |
scmutil, |
33373
fb320398a21c
dirstate: expose a sparse matcher on dirstate (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33336
diff
changeset
|
56 |
sparse, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
57 |
store, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
58 |
subrepo, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
59 |
tags as tagsmod, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
60 |
transaction, |
31054
59e69ed81776
localrepo: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31025
diff
changeset
|
61 |
txnutil, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
62 |
util, |
31231
0a38a313033e
vfs: use 'vfs' module directly in 'mercurial.localrepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31209
diff
changeset
|
63 |
vfs as vfsmod, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
64 |
) |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
65 |
|
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
66 |
release = lockmod.release |
28883
032c4c2f802a
pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents:
28876
diff
changeset
|
67 |
urlerr = util.urlerr |
032c4c2f802a
pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents:
28876
diff
changeset
|
68 |
urlreq = util.urlreq |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8108
diff
changeset
|
69 |
|
33277
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
70 |
# set of (path, vfs-location) tuples. vfs-location is: |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
71 |
# - 'plain for vfs relative paths |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
72 |
# - '' for svfs relative paths |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
73 |
_cachedfiles = set() |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
74 |
|
33176
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
75 |
class _basefilecache(scmutil.filecache): |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
76 |
"""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
|
77 |
""" |
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
78 |
def __get__(self, repo, type=None): |
29373
36fbd72c2f39
scmutil: allow access to filecache descriptor on class
Martijn Pieters <mjpieters@fb.com>
parents:
29352
diff
changeset
|
79 |
if repo is None: |
36fbd72c2f39
scmutil: allow access to filecache descriptor on class
Martijn Pieters <mjpieters@fb.com>
parents:
29352
diff
changeset
|
80 |
return self |
33176
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
81 |
return super(_basefilecache, self).__get__(repo.unfiltered(), type) |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
82 |
def __set__(self, repo, value): |
33176
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
83 |
return super(_basefilecache, self).__set__(repo.unfiltered(), value) |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
84 |
def __delete__(self, repo): |
33176
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
85 |
return super(_basefilecache, self).__delete__(repo.unfiltered()) |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
86 |
|
33176
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
87 |
class repofilecache(_basefilecache): |
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
88 |
"""filecache for files in .hg but outside of .hg/store""" |
33277
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
89 |
def __init__(self, *paths): |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
90 |
super(repofilecache, self).__init__(*paths) |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
91 |
for path in paths: |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
92 |
_cachedfiles.add((path, 'plain')) |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
93 |
|
33176
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
94 |
def join(self, obj, fname): |
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
95 |
return obj.vfs.join(fname) |
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
96 |
|
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
97 |
class storecache(_basefilecache): |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
98 |
"""filecache for files in the store""" |
33277
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
99 |
def __init__(self, *paths): |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
100 |
super(storecache, self).__init__(*paths) |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
101 |
for path in paths: |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
102 |
_cachedfiles.add((path, '')) |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
103 |
|
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
104 |
def join(self, obj, fname): |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
105 |
return obj.sjoin(fname) |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
106 |
|
33382
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
107 |
def isfilecached(repo, name): |
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
108 |
"""check if a repo has already cached "name" filecache-ed property |
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
109 |
|
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
110 |
This returns (cachedobj-or-None, iscached) tuple. |
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
111 |
""" |
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
112 |
cacheentry = repo.unfiltered()._filecache.get(name, None) |
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
113 |
if not cacheentry: |
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
114 |
return None, False |
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
115 |
return cacheentry.obj, True |
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
116 |
|
29104
b207653ada10
localrepo: remove a couple of local type aliases
Augie Fackler <augie@google.com>
parents:
29075
diff
changeset
|
117 |
class unfilteredpropertycache(util.propertycache): |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
118 |
"""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
|
119 |
|
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
120 |
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
|
121 |
unfi = repo.unfiltered() |
9789670992d6
repoview: have unfilteredpropertycache using the underlying cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19515
diff
changeset
|
122 |
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
|
123 |
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
|
124 |
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
|
125 |
|
29104
b207653ada10
localrepo: remove a couple of local type aliases
Augie Fackler <augie@google.com>
parents:
29075
diff
changeset
|
126 |
class filteredpropertycache(util.propertycache): |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
127 |
"""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
|
128 |
|
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
129 |
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
|
130 |
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
|
131 |
|
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
132 |
|
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
133 |
def hasunfilteredcache(repo, name): |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18520
diff
changeset
|
134 |
"""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
|
135 |
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
|
136 |
|
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
137 |
def unfilteredmethod(orig): |
17994
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
138 |
"""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
|
139 |
def wrapper(repo, *args, **kwargs): |
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
140 |
return orig(repo.unfiltered(), *args, **kwargs) |
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
141 |
return wrapper |
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
142 |
|
32291
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
32267
diff
changeset
|
143 |
moderncaps = {'lookup', 'branchmap', 'pushkey', 'known', 'getbundle', |
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
32267
diff
changeset
|
144 |
'unbundle'} |
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
32267
diff
changeset
|
145 |
legacycaps = moderncaps.union({'changegroupsubset'}) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
146 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
147 |
class localpeer(peer.peerrepository): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
148 |
'''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
|
149 |
|
31412
ecc87acb4d10
localrepo: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31373
diff
changeset
|
150 |
def __init__(self, repo, caps=None): |
ecc87acb4d10
localrepo: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31373
diff
changeset
|
151 |
if caps is None: |
ecc87acb4d10
localrepo: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31373
diff
changeset
|
152 |
caps = moderncaps.copy() |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
153 |
peer.peerrepository.__init__(self) |
18382
f3b21beb9802
filtering: rename filters to their antonyms
Kevin Bullock <kbullock@ringworld.org>
parents:
18364
diff
changeset
|
154 |
self._repo = repo.filtered('served') |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
155 |
self.ui = repo.ui |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
156 |
self._caps = repo._restrictcapabilities(caps) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
157 |
self.requirements = repo.requirements |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
158 |
self.supportedformats = repo.supportedformats |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
159 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
160 |
def close(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
161 |
self._repo.close() |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
162 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
163 |
def _capabilities(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
164 |
return self._caps |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
165 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
166 |
def local(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
167 |
return self._repo |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
168 |
|
17193
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17192
diff
changeset
|
169 |
def canpush(self): |
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17192
diff
changeset
|
170 |
return True |
1d710fe5ee0e
peer: introduce canpush and improve error message
Sune Foldager <cryo@cyanite.org>
parents:
17192
diff
changeset
|
171 |
|
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
172 |
def url(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
173 |
return self._repo.url() |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
174 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
175 |
def lookup(self, key): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
176 |
return self._repo.lookup(key) |
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 branchmap(self): |
18279
679767c38cb5
clfilter: drop extra filtering in localpeer
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18278
diff
changeset
|
179 |
return self._repo.branchmap() |
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 heads(self): |
18279
679767c38cb5
clfilter: drop extra filtering in localpeer
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18278
diff
changeset
|
182 |
return self._repo.heads() |
17192
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 known(self, nodes): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
185 |
return self._repo.known(nodes) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
186 |
|
20953
8d853cad6b14
localpeer: propagate bundlecaps in getbundle call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20933
diff
changeset
|
187 |
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
|
188 |
**kwargs): |
30187
3e86261bf110
exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29975
diff
changeset
|
189 |
chunks = exchange.getbundlechunks(self._repo, source, heads=heads, |
3e86261bf110
exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29975
diff
changeset
|
190 |
common=common, bundlecaps=bundlecaps, |
3e86261bf110
exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29975
diff
changeset
|
191 |
**kwargs) |
3e86261bf110
exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29975
diff
changeset
|
192 |
cb = util.chunkbuffer(chunks) |
3e86261bf110
exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29975
diff
changeset
|
193 |
|
32149
9a9d54ae9963
localrepo: reuse exchange.bundle2requested()
Martin von Zweigbergk <martinvonz@google.com>
parents:
32121
diff
changeset
|
194 |
if exchange.bundle2requested(bundlecaps): |
21068
c15b66a6bbb4
bundle2: return a stream from exchange.getbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21043
diff
changeset
|
195 |
# 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
|
196 |
# 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
|
197 |
# from it in local peer. |
30187
3e86261bf110
exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29975
diff
changeset
|
198 |
return bundle2.getunbundler(self.ui, cb) |
3e86261bf110
exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29975
diff
changeset
|
199 |
else: |
3e86261bf110
exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29975
diff
changeset
|
200 |
return changegroup.getunbundler('01', cb, None) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
201 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
202 |
# 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
|
203 |
# unbundle instead. |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
204 |
|
20969
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
205 |
def unbundle(self, cg, heads, url): |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
206 |
"""apply a bundle on a repo |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
207 |
|
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
208 |
This function handles the repo locking itself.""" |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
209 |
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
|
210 |
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
|
211 |
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
|
212 |
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
|
213 |
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
|
214 |
# 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
|
215 |
# 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
|
216 |
# 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
|
217 |
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
|
218 |
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
|
219 |
return ret |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
220 |
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
|
221 |
# 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
|
222 |
# 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
|
223 |
# 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
|
224 |
# 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
|
225 |
# |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
226 |
# 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
|
227 |
# issue4594 |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
228 |
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
|
229 |
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
|
230 |
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
|
231 |
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
|
232 |
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
|
233 |
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
|
234 |
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
|
235 |
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
|
236 |
raise |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
237 |
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
|
238 |
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
|
239 |
|
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
240 |
def lock(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
241 |
return self._repo.lock() |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
242 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
243 |
def pushkey(self, namespace, key, old, new): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
244 |
return self._repo.pushkey(namespace, key, old, new) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
245 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
246 |
def listkeys(self, namespace): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
247 |
return self._repo.listkeys(namespace) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
248 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
249 |
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
|
250 |
'''used to test argument passing over the wire''' |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
251 |
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
|
252 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
253 |
class locallegacypeer(localpeer): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
254 |
'''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
|
255 |
restricted capabilities''' |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
256 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
257 |
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
|
258 |
localpeer.__init__(self, repo, caps=legacycaps) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
259 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
260 |
def branches(self, nodes): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
261 |
return self._repo.branches(nodes) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
262 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
263 |
def between(self, pairs): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
264 |
return self._repo.between(pairs) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
265 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
266 |
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
|
267 |
return changegroup.changegroup(self._repo, basenodes, source) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
268 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
269 |
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
|
270 |
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
|
271 |
|
32697
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
272 |
# Increment the sub-version when the revlog v2 format changes to lock out old |
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
273 |
# clients. |
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
274 |
REVLOGV2_REQUIREMENT = 'exp-revlogv2.0' |
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
275 |
|
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
276 |
class localrepository(object): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
277 |
|
32314
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
278 |
supportedformats = { |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
279 |
'revlogv1', |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
280 |
'generaldelta', |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
281 |
'treemanifest', |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
282 |
'manifestv2', |
32697
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
283 |
REVLOGV2_REQUIREMENT, |
32314
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
284 |
} |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
285 |
_basesupported = supportedformats | { |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
286 |
'store', |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
287 |
'fncache', |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
288 |
'shared', |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
289 |
'relshared', |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
290 |
'dotencode', |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
291 |
} |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
292 |
openerreqs = { |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
293 |
'revlogv1', |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
294 |
'generaldelta', |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
295 |
'treemanifest', |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
296 |
'manifestv2', |
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
297 |
} |
17137
b090601a80d1
localrepo: make requirements and openerreqs mutable by subclasses
Bryan O'Sullivan <bryano@fb.com>
parents:
17075
diff
changeset
|
298 |
|
19928
d1ac3790e10a
localrepo: invoke only feature setup functions for enabled extensions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19884
diff
changeset
|
299 |
# 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
|
300 |
# 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
|
301 |
featuresetupfuncs = set() |
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
302 |
|
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
303 |
# list of prefix for file which can be written without 'wlock' |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
304 |
# Extensions should extend this list when needed |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
305 |
_wlockfreeprefix = { |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
306 |
# We migh consider requiring 'wlock' for the next |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
307 |
# two, but pretty much all the existing code assume |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
308 |
# wlock is not needed so we keep them excluded for |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
309 |
# now. |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
310 |
'hgrc', |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
311 |
'requires', |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
312 |
# XXX cache is a complicatged business someone |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
313 |
# should investigate this in depth at some point |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
314 |
'cache/', |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
315 |
# XXX shouldn't be dirstate covered by the wlock? |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
316 |
'dirstate', |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
317 |
# XXX bisect was still a bit too messy at the time |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
318 |
# this changeset was introduced. Someone should fix |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
319 |
# the remainig bit and drop this line |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
320 |
'bisect.state', |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
321 |
} |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
322 |
|
30571
91db2aa0edfe
localrepository: remove None as default value of path argument in __init__()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30566
diff
changeset
|
323 |
def __init__(self, baseui, path, create=False): |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
324 |
self.requirements = set() |
32730
b8ff7d0ff361
localrepo: move filtername to __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32729
diff
changeset
|
325 |
self.filtername = None |
31536
48b9c9ca09b7
localrepo: improve vfs documentation
Ryan McElroy <rmcelroy@fb.com>
parents:
31523
diff
changeset
|
326 |
# wvfs: rooted at the repository root, used to access the working copy |
31231
0a38a313033e
vfs: use 'vfs' module directly in 'mercurial.localrepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31209
diff
changeset
|
327 |
self.wvfs = vfsmod.vfs(path, expandpath=True, realpath=True) |
31536
48b9c9ca09b7
localrepo: improve vfs documentation
Ryan McElroy <rmcelroy@fb.com>
parents:
31523
diff
changeset
|
328 |
# vfs: rooted at .hg, used to access repo files outside of .hg/store |
31144
afcc4b4a0826
localrepo: add some comment about role of various vfs object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31133
diff
changeset
|
329 |
self.vfs = None |
31536
48b9c9ca09b7
localrepo: improve vfs documentation
Ryan McElroy <rmcelroy@fb.com>
parents:
31523
diff
changeset
|
330 |
# svfs: usually rooted at .hg/store, used to access repository history |
48b9c9ca09b7
localrepo: improve vfs documentation
Ryan McElroy <rmcelroy@fb.com>
parents:
31523
diff
changeset
|
331 |
# If this is a shared repository, this vfs may point to another |
48b9c9ca09b7
localrepo: improve vfs documentation
Ryan McElroy <rmcelroy@fb.com>
parents:
31523
diff
changeset
|
332 |
# repository's .hg/store directory. |
31144
afcc4b4a0826
localrepo: add some comment about role of various vfs object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31133
diff
changeset
|
333 |
self.svfs = None |
17157
87e8440964a0
localrepo: use path expansion API via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17156
diff
changeset
|
334 |
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
|
335 |
self.path = self.wvfs.join(".hg") |
3850
a4457828ca1a
move code around
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3803
diff
changeset
|
336 |
self.origroot = path |
33256
4ea0b7a613f9
auditor: add simple comment about repo.auditor and al
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33251
diff
changeset
|
337 |
# These auditor are not used by the vfs, |
4ea0b7a613f9
auditor: add simple comment about repo.auditor and al
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33251
diff
changeset
|
338 |
# only used when writing this comment: basectx.match |
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
|
339 |
self.auditor = pathutil.pathauditor(self.root, self._checknested) |
27233
dfb836a31b61
localrepo: add a second auditor without file system check
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27167
diff
changeset
|
340 |
self.nofsauditor = pathutil.pathauditor(self.root, self._checknested, |
dfb836a31b61
localrepo: add a second auditor without file system check
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27167
diff
changeset
|
341 |
realfs=False) |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
342 |
self.baseui = baseui |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
343 |
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
|
344 |
self.ui.copy = baseui.copy # prevent copying repo configuration |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
345 |
self.vfs = vfsmod.vfs(self.path) |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
346 |
if (self.ui.configbool('devel', 'all-warnings') or |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
347 |
self.ui.configbool('devel', 'check-locks')): |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
348 |
self.vfs.audit = self._getvfsward(self.vfs.audit) |
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
|
349 |
# 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
|
350 |
# 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
|
351 |
# 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
|
352 |
self._phasedefaults = [] |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
353 |
try: |
31319
42a7195541a1
localrepo: directly use repo.vfs.join
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31283
diff
changeset
|
354 |
self.ui.readconfig(self.vfs.join("hgrc"), self.root) |
30989
74af89c66834
localrepo: move extension loading to a separate method
Jun Wu <quark@fb.com>
parents:
30906
diff
changeset
|
355 |
self._loadextensions() |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
356 |
except IOError: |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
357 |
pass |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
358 |
|
19778
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
359 |
if self.featuresetupfuncs: |
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
360 |
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
|
361 |
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
|
362 |
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
|
363 |
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
|
364 |
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
|
365 |
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
|
366 |
else: |
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
367 |
self.supported = self._basesupported |
31111
95ec3ad62f62
color: initialize color for the localrepo ui
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31054
diff
changeset
|
368 |
color.setup(self.ui) |
19778
55ef79031009
localrepo: make supported features manageable in each repositories individually
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19650
diff
changeset
|
369 |
|
30818
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
370 |
# Add compression engines. |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
371 |
for name in util.compengines: |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
372 |
engine = util.compengines[name] |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
373 |
if engine.revlogheader(): |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
374 |
self.supported.add('exp-compression-%s' % name) |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
375 |
|
17161
be016e96117a
localrepo: use file API via vfs while ensuring repository directory
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17160
diff
changeset
|
376 |
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
|
377 |
if create: |
28164
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
378 |
self.requirements = newreporequirements(self) |
28163
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
379 |
|
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
380 |
if not self.wvfs.exists(): |
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
381 |
self.wvfs.makedirs() |
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
382 |
self.vfs.makedir(notindexed=True) |
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
383 |
|
28164
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
384 |
if 'store' in self.requirements: |
28163
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
385 |
self.vfs.mkdir("store") |
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
386 |
|
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
387 |
# create an invalid changelog |
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
388 |
self.vfs.append( |
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
389 |
"00changelog.i", |
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
390 |
'\0\0\0\2' # represents revlogv2 |
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
391 |
' dummy changelog to prevent using the old repo layout' |
5d3495e394d5
localrepo: isolate requirements determination from side effects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28162
diff
changeset
|
392 |
) |
3035
4d0e0f149581
localrepo: move the repo creation code, fail if the repo exists
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3019
diff
changeset
|
393 |
else: |
7637 | 394 |
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
|
395 |
elif create: |
7637 | 396 |
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
|
397 |
else: |
8f18e31c4441
add "requires" file to the repo, specifying the requirements
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3850
diff
changeset
|
398 |
try: |
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
399 |
self.requirements = scmutil.readrequires( |
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
400 |
self.vfs, self.supported) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
401 |
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
|
402 |
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
|
403 |
raise |
405 | 404 |
|
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
405 |
self.sharedpath = self.path |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
406 |
try: |
31133
23080c03a604
share: add --relative flag to store a relative path to the source
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
31111
diff
changeset
|
407 |
sharedpath = self.vfs.read("sharedpath").rstrip('\n') |
23080c03a604
share: add --relative flag to store a relative path to the source
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
31111
diff
changeset
|
408 |
if 'relshared' in self.requirements: |
23080c03a604
share: add --relative flag to store a relative path to the source
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
31111
diff
changeset
|
409 |
sharedpath = self.vfs.join(sharedpath) |
31231
0a38a313033e
vfs: use 'vfs' module directly in 'mercurial.localrepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31209
diff
changeset
|
410 |
vfs = vfsmod.vfs(sharedpath, realpath=True) |
18946
3d4f41eaae67
localrepo: use vfs instead of "os.path.*" in sharedpath checking
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18945
diff
changeset
|
411 |
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
|
412 |
if not vfs.exists(): |
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
413 |
raise error.RepoError( |
8908
105343f9f744
Fix warning: Seen unexpected token "%"
Dongsheng Song <dongsheng.song@gmail.com>
parents:
8813
diff
changeset
|
414 |
_('.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
|
415 |
self.sharedpath = s |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
416 |
except IOError as inst: |
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
417 |
if inst.errno != errno.ENOENT: |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
418 |
raise |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
419 |
|
24918
2eac3ae0d088
localrepo: eliminate local requirements var in init
Drew Gottlieb <drgott@google.com>
parents:
24917
diff
changeset
|
420 |
self.store = store.store( |
31231
0a38a313033e
vfs: use 'vfs' module directly in 'mercurial.localrepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31209
diff
changeset
|
421 |
self.requirements, self.sharedpath, vfsmod.vfs) |
6840
80e51429cb9a
introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents:
6839
diff
changeset
|
422 |
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
|
423 |
self.svfs = self.store.vfs |
6840
80e51429cb9a
introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents:
6839
diff
changeset
|
424 |
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
|
425 |
self.vfs.createmode = self.store.createmode |
33437
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
426 |
if (self.ui.configbool('devel', 'all-warnings') or |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
427 |
self.ui.configbool('devel', 'check-locks')): |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
428 |
if util.safehasattr(self.svfs, 'vfs'): # this is filtervfs |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
429 |
self.svfs.vfs.audit = self._getsvfsward(self.svfs.vfs.audit) |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
430 |
else: # standard vfs |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
431 |
self.svfs.audit = self._getsvfsward(self.svfs.audit) |
24915
1c40408770f7
localrepo: make _applyrequirements more specific
Drew Gottlieb <drgott@google.com>
parents:
24914
diff
changeset
|
432 |
self._applyopenerreqs() |
12295
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
433 |
if create: |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
434 |
self._writerequirements() |
3850
a4457828ca1a
move code around
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3803
diff
changeset
|
435 |
|
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
436 |
self._dirstatevalidatewarned = False |
9146
5614a628d173
localrepo: rename in-memory tag cache instance attributes (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9145
diff
changeset
|
437 |
|
18189
b9026ba002f6
branchmap: enable caching for filtered version too
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18186
diff
changeset
|
438 |
self._branchcaches = {} |
24373
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
439 |
self._revbranchcache = None |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
440 |
self.filterpats = {} |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
441 |
self._datafilters = {} |
4916
5c5d23d93447
Use a weakref for recursive transactions
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
442 |
self._transref = self._lockref = self._wlockref = None |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
443 |
|
14929
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
444 |
# 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
|
445 |
# (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
|
446 |
# |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
447 |
# 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
|
448 |
self._filecache = {} |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
449 |
|
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
|
450 |
# 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
|
451 |
# 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
|
452 |
# - 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
|
453 |
# - 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
|
454 |
# - 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
|
455 |
# - 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
|
456 |
# - 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
|
457 |
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
|
458 |
|
32814
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
459 |
# post-dirstate-status hooks |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
460 |
self._postdsstatus = [] |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
461 |
|
33389
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
462 |
# Cache of types representing filtered repos. |
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
463 |
self._filteredrepotypes = weakref.WeakKeyDictionary() |
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
464 |
|
23558
3198aac7a95d
namespaces: add bookmarks to the names data structure
Sean Farley <sean.michael.farley@gmail.com>
parents:
23546
diff
changeset
|
465 |
# generic mapping between names and nodes |
23561
3c2419e07df5
namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents:
23558
diff
changeset
|
466 |
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
|
467 |
|
33302
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33278
diff
changeset
|
468 |
# Key to signature value. |
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33278
diff
changeset
|
469 |
self._sparsesignaturecache = {} |
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33278
diff
changeset
|
470 |
# Signature to cached matcher instance. |
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33278
diff
changeset
|
471 |
self._sparsematchercache = {} |
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33278
diff
changeset
|
472 |
|
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
473 |
def _getvfsward(self, origfunc): |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
474 |
"""build a ward for self.vfs""" |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
475 |
rref = weakref.ref(self) |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
476 |
def checkvfs(path, mode=None): |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
477 |
ret = origfunc(path, mode=mode) |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
478 |
repo = rref() |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
479 |
if (repo is None |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
480 |
or not util.safehasattr(repo, '_wlockref') |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
481 |
or not util.safehasattr(repo, '_lockref')): |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
482 |
return |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
483 |
if mode in (None, 'r', 'rb'): |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
484 |
return |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
485 |
if path.startswith(repo.path): |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
486 |
# truncate name relative to the repository (.hg) |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
487 |
path = path[len(repo.path) + 1:] |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
488 |
if path.startswith('journal.'): |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
489 |
# journal is covered by 'lock' |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
490 |
if repo._currentlock(repo._lockref) is None: |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
491 |
repo.ui.develwarn('write with no lock: "%s"' % path, |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
492 |
stacklevel=2) |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
493 |
elif repo._currentlock(repo._wlockref) is None: |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
494 |
# rest of vfs files are covered by 'wlock' |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
495 |
# |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
496 |
# exclude special files |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
497 |
for prefix in self._wlockfreeprefix: |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
498 |
if path.startswith(prefix): |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
499 |
return |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
500 |
repo.ui.develwarn('write with no wlock: "%s"' % path, |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
501 |
stacklevel=2) |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
502 |
return ret |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
503 |
return checkvfs |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
504 |
|
33437
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
505 |
def _getsvfsward(self, origfunc): |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
506 |
"""build a ward for self.svfs""" |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
507 |
rref = weakref.ref(self) |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
508 |
def checksvfs(path, mode=None): |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
509 |
ret = origfunc(path, mode=mode) |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
510 |
repo = rref() |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
511 |
if repo is None or not util.safehasattr(repo, '_lockref'): |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
512 |
return |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
513 |
if mode in (None, 'r', 'rb'): |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
514 |
return |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
515 |
if path.startswith(repo.sharedpath): |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
516 |
# truncate name relative to the repository (.hg) |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
517 |
path = path[len(repo.sharedpath) + 1:] |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
518 |
if repo._currentlock(repo._lockref) is None: |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
519 |
repo.ui.develwarn('write with no lock: "%s"' % path, |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
520 |
stacklevel=3) |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
521 |
return ret |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
522 |
return checksvfs |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
523 |
|
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
524 |
def close(self): |
24378
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
525 |
self._writecaches() |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
526 |
|
30989
74af89c66834
localrepo: move extension loading to a separate method
Jun Wu <quark@fb.com>
parents:
30906
diff
changeset
|
527 |
def _loadextensions(self): |
74af89c66834
localrepo: move extension loading to a separate method
Jun Wu <quark@fb.com>
parents:
30906
diff
changeset
|
528 |
extensions.loadall(self.ui) |
74af89c66834
localrepo: move extension loading to a separate method
Jun Wu <quark@fb.com>
parents:
30906
diff
changeset
|
529 |
|
24378
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
530 |
def _writecaches(self): |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
531 |
if self._revbranchcache: |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
532 |
self._revbranchcache.write() |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
533 |
|
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
534 |
def _restrictcapabilities(self, caps): |
24696
553dc2b094d9
bundle2: advertise bundle2 by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24686
diff
changeset
|
535 |
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
|
536 |
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
|
537 |
capsblob = bundle2.encodecaps(bundle2.getrepocaps(self)) |
28883
032c4c2f802a
pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents:
28876
diff
changeset
|
538 |
caps.add('bundle2=' + urlreq.quote(capsblob)) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
539 |
return caps |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
540 |
|
24915
1c40408770f7
localrepo: make _applyrequirements more specific
Drew Gottlieb <drgott@google.com>
parents:
24914
diff
changeset
|
541 |
def _applyopenerreqs(self): |
1c40408770f7
localrepo: make _applyrequirements more specific
Drew Gottlieb <drgott@google.com>
parents:
24914
diff
changeset
|
542 |
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
|
543 |
if r in self.openerreqs) |
25839
1f8287b41935
localrepo: mark format options
Matt Mackall <mpm@selenic.com>
parents:
25764
diff
changeset
|
544 |
# 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
|
545 |
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
|
546 |
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
|
547 |
self.svfs.options['chunkcachesize'] = chunkcachesize |
25839
1f8287b41935
localrepo: mark format options
Matt Mackall <mpm@selenic.com>
parents:
25764
diff
changeset
|
548 |
# experimental config: format.maxchainlen |
23256
1c11393d5dfb
localrepo: rename revlog.maxchainlen to format.maxchainlen
Augie Fackler <raf@durin42.com>
parents:
23255
diff
changeset
|
549 |
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
|
550 |
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
|
551 |
self.svfs.options['maxchainlen'] = maxchainlen |
25839
1f8287b41935
localrepo: mark format options
Matt Mackall <mpm@selenic.com>
parents:
25764
diff
changeset
|
552 |
# experimental config: format.manifestcachesize |
24033
ed5e8a9598ce
manifest: make lru size configurable
Durham Goode <durham@fb.com>
parents:
23929
diff
changeset
|
553 |
manifestcachesize = self.ui.configint('format', 'manifestcachesize') |
ed5e8a9598ce
manifest: make lru size configurable
Durham Goode <durham@fb.com>
parents:
23929
diff
changeset
|
554 |
if manifestcachesize is not None: |
ed5e8a9598ce
manifest: make lru size configurable
Durham Goode <durham@fb.com>
parents:
23929
diff
changeset
|
555 |
self.svfs.options['manifestcachesize'] = manifestcachesize |
26118
049005de325e
revlog: add an aggressivemergedelta option
Durham Goode <durham@fb.com>
parents:
25878
diff
changeset
|
556 |
# experimental config: format.aggressivemergedeltas |
049005de325e
revlog: add an aggressivemergedelta option
Durham Goode <durham@fb.com>
parents:
25878
diff
changeset
|
557 |
aggressivemergedeltas = self.ui.configbool('format', |
33235
b838e857439d
configitems: register the 'format.aggressivemergedeltas' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33207
diff
changeset
|
558 |
'aggressivemergedeltas') |
26118
049005de325e
revlog: add an aggressivemergedelta option
Durham Goode <durham@fb.com>
parents:
25878
diff
changeset
|
559 |
self.svfs.options['aggressivemergedeltas'] = aggressivemergedeltas |
26907
dfab6edb98e3
format: introduce 'format.usegeneraldelta`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26906
diff
changeset
|
560 |
self.svfs.options['lazydeltabase'] = not scmutil.gddeltaconfig(self.ui) |
33207
895ecec31c70
revlog: add an experimental option to mitigated delta issues (issue5480)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33176
diff
changeset
|
561 |
chainspan = self.ui.configbytes('experimental', 'maxdeltachainspan', -1) |
895ecec31c70
revlog: add an experimental option to mitigated delta issues (issue5480)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33176
diff
changeset
|
562 |
if 0 <= chainspan: |
895ecec31c70
revlog: add an experimental option to mitigated delta issues (issue5480)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33176
diff
changeset
|
563 |
self.svfs.options['maxdeltachainspan'] = chainspan |
12295
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
564 |
|
30818
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
565 |
for r in self.requirements: |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
566 |
if r.startswith('exp-compression-'): |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
567 |
self.svfs.options['compengine'] = r[len('exp-compression-'):] |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
568 |
|
32697
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
569 |
# TODO move "revlogv2" to openerreqs once finalized. |
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
570 |
if REVLOGV2_REQUIREMENT in self.requirements: |
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
571 |
self.svfs.options['revlogv2'] = True |
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
572 |
|
12295
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
573 |
def _writerequirements(self): |
24934
5abd0a76bc8f
requires: move requires file writing func from localrepo to scmutil
Drew Gottlieb <drgott@google.com>
parents:
24918
diff
changeset
|
574 |
scmutil.writerequires(self.vfs, self.requirements) |
12295
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
575 |
|
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
576 |
def _checknested(self, path): |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
577 |
"""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
|
578 |
if not path.startswith(self.root): |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
579 |
return False |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
580 |
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
|
581 |
normsubpath = util.pconvert(subpath) |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
582 |
|
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
583 |
# 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
|
584 |
# 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
|
585 |
# |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
586 |
# $ 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
|
587 |
# |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
588 |
# 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
|
589 |
# parent revision. |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
590 |
# |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
591 |
# 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
|
592 |
# 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
|
593 |
# 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
|
594 |
# 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
|
595 |
# panics when it sees sub/.hg/. |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
596 |
# |
12174
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
597 |
# 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
|
598 |
# 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
|
599 |
# the filesystem *now*. |
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
600 |
ctx = self[None] |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
601 |
parts = util.splitpath(subpath) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
602 |
while parts: |
15722
417127af3996
windows: use normalized path to check repository nesting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15604
diff
changeset
|
603 |
prefix = '/'.join(parts) |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
604 |
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
|
605 |
if prefix == normsubpath: |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
606 |
return True |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
607 |
else: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
608 |
sub = ctx.sub(prefix) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
609 |
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
|
610 |
else: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
611 |
parts.pop() |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
612 |
return False |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
613 |
|
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
614 |
def peer(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
615 |
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
|
616 |
|
17993
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
617 |
def unfiltered(self): |
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
618 |
"""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
|
619 |
|
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18520
diff
changeset
|
620 |
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
|
621 |
return self |
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
622 |
|
18100
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
623 |
def filtered(self, name): |
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
624 |
"""Return a filtered version of a repository""" |
33389
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
625 |
# Python <3.4 easily leaks types via __mro__. See |
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
626 |
# https://bugs.python.org/issue17950. We cache dynamically |
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
627 |
# created types so this method doesn't leak on every |
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
628 |
# invocation. |
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
629 |
|
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
630 |
key = self.unfiltered().__class__ |
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
631 |
if key not in self._filteredrepotypes: |
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
632 |
# Build a new type with the repoview mixin and the base |
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
633 |
# class of this repo. Give it a name containing the |
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
634 |
# filter name to aid debugging. |
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
635 |
bases = (repoview.repoview, key) |
33403
1bb209d08a34
py3: make localrepo filtered repo cache work on py3
Martin von Zweigbergk <martinvonz@google.com>
parents:
33389
diff
changeset
|
636 |
cls = type(r'%sfilteredrepo' % name, bases, {}) |
33389
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
637 |
self._filteredrepotypes[key] = cls |
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
638 |
|
7e89bd0cfb86
localrepo: cache types for filtered repos (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33382
diff
changeset
|
639 |
return self._filteredrepotypes[key](self, name) |
18100
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
640 |
|
27698
dad6404ccddb
bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents:
27522
diff
changeset
|
641 |
@repofilecache('bookmarks', 'bookmarks.current') |
13355
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
642 |
def _bookmarks(self): |
17922
7f5dab94e48c
bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents:
17857
diff
changeset
|
643 |
return bookmarks.bmstore(self) |
13355
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
644 |
|
27698
dad6404ccddb
bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents:
27522
diff
changeset
|
645 |
@property |
24947
a02d293a1079
bookmarks: rename bookmarkcurrent to activebookmark (API)
Ryan McElroy <rmcelroy@fb.com>
parents:
24946
diff
changeset
|
646 |
def _activebookmark(self): |
27698
dad6404ccddb
bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents:
27522
diff
changeset
|
647 |
return self._bookmarks.active |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
648 |
|
26405
c15d8f84343e
localrepo: recreate phasecache if changelog was modified (issue4855)
Yuya Nishihara <yuya@tcha.org>
parents:
25878
diff
changeset
|
649 |
# _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
|
650 |
# 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
|
651 |
# 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
|
652 |
@storecache('phaseroots', '00changelog.i') |
16657
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16646
diff
changeset
|
653 |
def _phasecache(self): |
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16646
diff
changeset
|
654 |
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
|
655 |
|
17070
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
656 |
@storecache('obsstore') |
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
657 |
def obsstore(self): |
32729
c8177792fef6
obsolete: move obsstore creation logic from localrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32697
diff
changeset
|
658 |
return obsolete.makestore(self.ui, self) |
17070
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
659 |
|
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
660 |
@storecache('00changelog.i') |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
661 |
def changelog(self): |
32292
0ad0d26ff703
changelog: load pending file directly
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32291
diff
changeset
|
662 |
return changelog.changelog(self.svfs, |
0ad0d26ff703
changelog: load pending file directly
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32291
diff
changeset
|
663 |
trypending=txnutil.mayhavepending(self.root)) |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
664 |
|
30218
1767723f71cf
manifest: move manifest creation to a helper function
Durham Goode <durham@fb.com>
parents:
30187
diff
changeset
|
665 |
def _constructmanifest(self): |
1767723f71cf
manifest: move manifest creation to a helper function
Durham Goode <durham@fb.com>
parents:
30187
diff
changeset
|
666 |
# This is a temporary function while we migrate from manifest to |
1767723f71cf
manifest: move manifest creation to a helper function
Durham Goode <durham@fb.com>
parents:
30187
diff
changeset
|
667 |
# manifestlog. It allows bundlerepo and unionrepo to intercept the |
1767723f71cf
manifest: move manifest creation to a helper function
Durham Goode <durham@fb.com>
parents:
30187
diff
changeset
|
668 |
# manifest creation. |
30377
2019fbdab075
manifest: delete manifest.manifest class
Durham Goode <durham@fb.com>
parents:
30376
diff
changeset
|
669 |
return manifest.manifestrevlog(self.svfs) |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
670 |
|
30219
3c8811efdddc
manifest: make manifestlog a storecache
Durham Goode <durham@fb.com>
parents:
30218
diff
changeset
|
671 |
@storecache('00manifest.i') |
29825
426d931e5db2
manifest: introduce manifestlog and manifestctx classes
Durham Goode <durham@fb.com>
parents:
29709
diff
changeset
|
672 |
def manifestlog(self): |
29826
93b44aa17691
manifest: use property instead of field for manifest revlog storage
Durham Goode <durham@fb.com>
parents:
29825
diff
changeset
|
673 |
return manifest.manifestlog(self.svfs, self) |
29825
426d931e5db2
manifest: introduce manifestlog and manifestctx classes
Durham Goode <durham@fb.com>
parents:
29709
diff
changeset
|
674 |
|
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
675 |
@repofilecache('dirstate') |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
676 |
def dirstate(self): |
33373
fb320398a21c
dirstate: expose a sparse matcher on dirstate (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33336
diff
changeset
|
677 |
sparsematchfn = lambda: sparse.matcher(self) |
fb320398a21c
dirstate: expose a sparse matcher on dirstate (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33336
diff
changeset
|
678 |
|
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
679 |
return dirstate.dirstate(self.vfs, self.ui, self.root, |
33373
fb320398a21c
dirstate: expose a sparse matcher on dirstate (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33336
diff
changeset
|
680 |
self._dirstatevalidate, sparsematchfn) |
13032
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
681 |
|
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
682 |
def _dirstatevalidate(self, node): |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
683 |
try: |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
684 |
self.changelog.rev(node) |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
685 |
return node |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
686 |
except error.LookupError: |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
687 |
if not self._dirstatevalidatewarned: |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
688 |
self._dirstatevalidatewarned = True |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
689 |
self.ui.warn(_("warning: ignoring unknown" |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
690 |
" working parent %s!\n") % short(node)) |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
691 |
return nullid |
2155
ff255b41b4aa
support hooks written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2150
diff
changeset
|
692 |
|
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
693 |
def __getitem__(self, changeid): |
32660
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32481
diff
changeset
|
694 |
if changeid is None: |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
695 |
return context.workingctx(self) |
23630
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
696 |
if isinstance(changeid, slice): |
32660
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32481
diff
changeset
|
697 |
# wdirrev isn't contiguous so the slice shouldn't include it |
23630
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
698 |
return [context.changectx(self, i) |
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
699 |
for i in xrange(*changeid.indices(len(self))) |
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
700 |
if i not in self.changelog.filteredrevs] |
32660
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32481
diff
changeset
|
701 |
try: |
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32481
diff
changeset
|
702 |
return context.changectx(self, changeid) |
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32481
diff
changeset
|
703 |
except error.WdirUnsupported: |
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32481
diff
changeset
|
704 |
return context.workingctx(self) |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
705 |
|
9924
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
706 |
def __contains__(self, changeid): |
32481
a87dabb053d0
localrepo: document that __contains__() may raise LookupError
Yuya Nishihara <yuya@tcha.org>
parents:
32452
diff
changeset
|
707 |
"""True if the given changeid exists |
a87dabb053d0
localrepo: document that __contains__() may raise LookupError
Yuya Nishihara <yuya@tcha.org>
parents:
32452
diff
changeset
|
708 |
|
a87dabb053d0
localrepo: document that __contains__() may raise LookupError
Yuya Nishihara <yuya@tcha.org>
parents:
32452
diff
changeset
|
709 |
error.LookupError is raised if an ambiguous node specified. |
a87dabb053d0
localrepo: document that __contains__() may raise LookupError
Yuya Nishihara <yuya@tcha.org>
parents:
32452
diff
changeset
|
710 |
""" |
9924
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
711 |
try: |
24320
b9f7f3eeb99c
localrepo: extend "changeid in repo" to return True for workingctx revision
Yuya Nishihara <yuya@tcha.org>
parents:
24306
diff
changeset
|
712 |
self[changeid] |
b9f7f3eeb99c
localrepo: extend "changeid in repo" to return True for workingctx revision
Yuya Nishihara <yuya@tcha.org>
parents:
24306
diff
changeset
|
713 |
return True |
9924
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
714 |
except error.RepoLookupError: |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
715 |
return False |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
716 |
|
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
717 |
def __nonzero__(self): |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
718 |
return True |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
719 |
|
31476
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31466
diff
changeset
|
720 |
__bool__ = __nonzero__ |
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31466
diff
changeset
|
721 |
|
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
722 |
def __len__(self): |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
723 |
return len(self.changelog) |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
724 |
|
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
725 |
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
|
726 |
return iter(self.changelog) |
2155
ff255b41b4aa
support hooks written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2150
diff
changeset
|
727 |
|
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
728 |
def revs(self, expr, *args): |
27071
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
729 |
'''Find revisions matching a revset. |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
730 |
|
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
731 |
The revset is specified as a string ``expr`` that may contain |
31024
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30989
diff
changeset
|
732 |
%-formatting to escape certain types. See ``revsetlang.formatspec``. |
27071
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
733 |
|
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29373
diff
changeset
|
734 |
Revset aliases from the configuration are not expanded. To expand |
31025
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
735 |
user aliases, consider calling ``scmutil.revrange()`` or |
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
736 |
``repo.anyrevs([expr], user=True)``. |
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29373
diff
changeset
|
737 |
|
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29373
diff
changeset
|
738 |
Returns a revset.abstractsmartset, which is a list-like interface |
27071
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
739 |
that contains integer revisions. |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
740 |
''' |
31024
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30989
diff
changeset
|
741 |
expr = revsetlang.formatspec(expr, *args) |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
742 |
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
|
743 |
return m(self) |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
744 |
|
14902
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
745 |
def set(self, expr, *args): |
27071
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
746 |
'''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
|
747 |
|
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
748 |
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
|
749 |
result and is a generator of changectx instances. |
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29373
diff
changeset
|
750 |
|
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29373
diff
changeset
|
751 |
Revset aliases from the configuration are not expanded. To expand |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29373
diff
changeset
|
752 |
user aliases, consider calling ``scmutil.revrange()``. |
14902
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
753 |
''' |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
754 |
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
|
755 |
yield self[r] |
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
756 |
|
33336
4672db164c98
revset: make repo.anyrevs accept customized alias override (API)
Jun Wu <quark@fb.com>
parents:
33302
diff
changeset
|
757 |
def anyrevs(self, specs, user=False, localalias=None): |
31025
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
758 |
'''Find revisions matching one of the given revsets. |
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
759 |
|
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
760 |
Revset aliases from the configuration are not expanded by default. To |
33336
4672db164c98
revset: make repo.anyrevs accept customized alias override (API)
Jun Wu <quark@fb.com>
parents:
33302
diff
changeset
|
761 |
expand user aliases, specify ``user=True``. To provide some local |
4672db164c98
revset: make repo.anyrevs accept customized alias override (API)
Jun Wu <quark@fb.com>
parents:
33302
diff
changeset
|
762 |
definitions overriding user aliases, set ``localalias`` to |
4672db164c98
revset: make repo.anyrevs accept customized alias override (API)
Jun Wu <quark@fb.com>
parents:
33302
diff
changeset
|
763 |
``{name: definitionstring}``. |
31025
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
764 |
''' |
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
765 |
if user: |
33336
4672db164c98
revset: make repo.anyrevs accept customized alias override (API)
Jun Wu <quark@fb.com>
parents:
33302
diff
changeset
|
766 |
m = revset.matchany(self.ui, specs, repo=self, |
4672db164c98
revset: make repo.anyrevs accept customized alias override (API)
Jun Wu <quark@fb.com>
parents:
33302
diff
changeset
|
767 |
localalias=localalias) |
31025
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
768 |
else: |
33336
4672db164c98
revset: make repo.anyrevs accept customized alias override (API)
Jun Wu <quark@fb.com>
parents:
33302
diff
changeset
|
769 |
m = revset.matchany(None, specs, localalias=localalias) |
31025
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
770 |
return m(self) |
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
771 |
|
2673
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
772 |
def url(self): |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
773 |
return 'file:' + self.root |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
774 |
|
1718
c1996b84d4f5
make hook code nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1717
diff
changeset
|
775 |
def hook(self, name, throw=False, **args): |
21866
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
776 |
"""Call a hook, passing this repo instance. |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
777 |
|
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
778 |
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
|
779 |
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
|
780 |
replacing code that is expected to call a hook. |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
781 |
""" |
4622
fff50306e6dd
hooks: separate hook code into a separate module
Matt Mackall <mpm@selenic.com>
parents:
4619
diff
changeset
|
782 |
return hook.hook(self.ui, self, name, throw, **args) |
487 | 783 |
|
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
784 |
@filteredpropertycache |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
785 |
def _tagscache(self): |
16683 | 786 |
'''Returns a tagscache object that contains various tags related |
787 |
caches.''' |
|
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
788 |
|
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
789 |
# 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
|
790 |
# 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
|
791 |
class tagscache(object): |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
792 |
def __init__(self): |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
793 |
# 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
|
794 |
# 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
|
795 |
# '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
|
796 |
# 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
|
797 |
# 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
|
798 |
self.tags = self.tagtypes = None |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
799 |
|
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
800 |
self.nodetagscache = self.tagslist = None |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
801 |
|
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
802 |
cache = tagscache() |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
803 |
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
|
804 |
|
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
805 |
return cache |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
806 |
|
343 | 807 |
def tags(self): |
808 |
'''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
|
809 |
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
|
810 |
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
|
811 |
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
|
812 |
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
|
813 |
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
|
814 |
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
|
815 |
try: |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
816 |
# ignore tags to unknown nodes |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
817 |
self.changelog.rev(v) |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
818 |
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
|
819 |
except (error.LookupError, ValueError): |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
820 |
pass |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
821 |
return t |
4210
caff92047e87
Refactor tags code to prepare for improving the algorithm
Matt Mackall <mpm@selenic.com>
parents:
4178
diff
changeset
|
822 |
|
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
823 |
def _findtags(self): |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
824 |
'''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
|
825 |
(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
|
826 |
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
|
827 |
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
|
828 |
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
|
829 |
duration of the localrepo object.''' |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
830 |
|
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
831 |
# 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
|
832 |
# 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
|
833 |
# 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
|
834 |
# 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
|
835 |
# quo fine? |
4210
caff92047e87
Refactor tags code to prepare for improving the algorithm
Matt Mackall <mpm@selenic.com>
parents:
4178
diff
changeset
|
836 |
|
659 | 837 |
|
31709
c34c170b25f3
tags: only return 'alltags' in 'findglobaltags'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31706
diff
changeset
|
838 |
# map tag name to (node, hist) |
c34c170b25f3
tags: only return 'alltags' in 'findglobaltags'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31706
diff
changeset
|
839 |
alltags = tagsmod.findglobaltags(self.ui, self) |
c34c170b25f3
tags: only return 'alltags' in 'findglobaltags'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31706
diff
changeset
|
840 |
# map tag name to tag type |
c34c170b25f3
tags: only return 'alltags' in 'findglobaltags'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31706
diff
changeset
|
841 |
tagtypes = dict((tag, 'global') for tag in alltags) |
31706
63d4deda1b31
tags: do not feed dictionaries to 'findglobaltags'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31672
diff
changeset
|
842 |
|
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
843 |
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
|
844 |
|
9152
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
845 |
# 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
|
846 |
# 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
|
847 |
# 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
|
848 |
# local encoding. |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
849 |
tags = {} |
9147
234a230cc33b
localrepo: improve readability of _findtags(), readtags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9146
diff
changeset
|
850 |
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
|
851 |
if node != nullid: |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
852 |
tags[encoding.tolocal(name)] = node |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
853 |
tags['tip'] = self.changelog.tip() |
9152
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
854 |
tagtypes = dict([(encoding.tolocal(name), value) |
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
855 |
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
|
856 |
return (tags, tagtypes) |
343 | 857 |
|
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
858 |
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
|
859 |
''' |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
860 |
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
|
861 |
|
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
862 |
'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
|
863 |
'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
|
864 |
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
|
865 |
''' |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
866 |
|
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
867 |
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
|
868 |
|
343 | 869 |
def tagslist(self): |
870 |
'''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
|
871 |
if not self._tagscache.tagslist: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
872 |
l = [] |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
873 |
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
|
874 |
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
|
875 |
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
|
876 |
|
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
877 |
return self._tagscache.tagslist |
343 | 878 |
|
879 |
def nodetags(self, node): |
|
880 |
'''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
|
881 |
if not self._tagscache.nodetagscache: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
882 |
nodetagscache = {} |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
883 |
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
|
884 |
nodetagscache.setdefault(n, []).append(t) |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
885 |
for tags in nodetagscache.itervalues(): |
11047
c7dbd6c4877a
tags: return tags in sorted order
Eric Eisner <ede@mit.edu>
parents:
10970
diff
changeset
|
886 |
tags.sort() |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
887 |
self._tagscache.nodetagscache = nodetagscache |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
888 |
return self._tagscache.nodetagscache.get(node, []) |
343 | 889 |
|
13384
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
890 |
def nodebookmarks(self, node): |
27166
263db31329a6
localrepo: document nodebookmarks
Augie Fackler <augie@google.com>
parents:
27165
diff
changeset
|
891 |
"""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
|
892 |
marks = [] |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
893 |
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
|
894 |
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
|
895 |
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
|
896 |
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
|
897 |
|
12066
d01e28657429
localrepo: introduce method for explicit branch cache update
Georg Brandl <georg@python.org>
parents:
12035
diff
changeset
|
898 |
def branchmap(self): |
20245
4edd179fefb8
help: branch names primarily denote the tipmost unclosed branch head
Mads Kiilerich <madski@unity3d.com>
parents:
20226
diff
changeset
|
899 |
'''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
|
900 |
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
|
901 |
branchmap.updatecache(self) |
b9026ba002f6
branchmap: enable caching for filtered version too
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18186
diff
changeset
|
902 |
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
|
903 |
|
24373
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
904 |
@unfilteredmethod |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
905 |
def revbranchcache(self): |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
906 |
if not self._revbranchcache: |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
907 |
self._revbranchcache = branchmap.revbranchcache(self.unfiltered()) |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
908 |
return self._revbranchcache |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
909 |
|
23775
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
910 |
def branchtip(self, branch, ignoremissing=False): |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
911 |
'''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
|
912 |
|
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
913 |
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
|
914 |
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
|
915 |
(e.g. namespace). |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
916 |
|
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
917 |
''' |
20187
4d6d5ef88538
localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents:
20184
diff
changeset
|
918 |
try: |
4d6d5ef88538
localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents:
20184
diff
changeset
|
919 |
return self.branchmap().branchtip(branch) |
4d6d5ef88538
localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents:
20184
diff
changeset
|
920 |
except KeyError: |
23775
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
921 |
if not ignoremissing: |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
922 |
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
|
923 |
else: |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
924 |
pass |
16719
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16716
diff
changeset
|
925 |
|
343 | 926 |
def lookup(self, key): |
16378
c463f46fe050
localrepo: lookup now goes through context
Matt Mackall <mpm@selenic.com>
parents:
16371
diff
changeset
|
927 |
return self[key].node() |
67 | 928 |
|
10960
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
929 |
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
|
930 |
repo = remote or self |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
931 |
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
|
932 |
return key |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
933 |
|
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
934 |
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
|
935 |
return repo[key].branch() |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
936 |
|
13723
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
937 |
def known(self, nodes): |
27319
b64b6fdc5c9b
discovery: properly filter changeset in 'peer.known' (issue4982)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27291
diff
changeset
|
938 |
cl = self.changelog |
b64b6fdc5c9b
discovery: properly filter changeset in 'peer.known' (issue4982)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27291
diff
changeset
|
939 |
nm = cl.nodemap |
b64b6fdc5c9b
discovery: properly filter changeset in 'peer.known' (issue4982)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27291
diff
changeset
|
940 |
filtered = cl.filteredrevs |
15889
816209eaf963
phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15888
diff
changeset
|
941 |
result = [] |
816209eaf963
phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15888
diff
changeset
|
942 |
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
|
943 |
r = nm.get(n) |
27319
b64b6fdc5c9b
discovery: properly filter changeset in 'peer.known' (issue4982)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27291
diff
changeset
|
944 |
resp = not (r is None or r in filtered) |
15889
816209eaf963
phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15888
diff
changeset
|
945 |
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
|
946 |
return result |
13723
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
947 |
|
926 | 948 |
def local(self): |
14603
68a43fdd7d80
localrepo: local() returns self
Matt Mackall <mpm@selenic.com>
parents:
14549
diff
changeset
|
949 |
return self |
926 | 950 |
|
25623
0bee97fa1fa8
publishing: add helper method to localrepo
Matt Mackall <mpm@selenic.com>
parents:
25290
diff
changeset
|
951 |
def publishing(self): |
25625
ce9e231265c1
publishing: unconditionally trust publishing flag
Matt Mackall <mpm@selenic.com>
parents:
25624
diff
changeset
|
952 |
# 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
|
953 |
# 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
|
954 |
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
|
955 |
|
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
956 |
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
|
957 |
# 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
|
958 |
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
|
959 |
return False |
25624
f0745da75056
publishing: use new helper method
Matt Mackall <mpm@selenic.com>
parents:
25623
diff
changeset
|
960 |
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
|
961 |
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
|
962 |
# 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
|
963 |
return not self.filtered('visible').changelog.filteredrevs |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
964 |
|
23666
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
965 |
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
|
966 |
'''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
|
967 |
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
|
968 |
return 'store' |
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
969 |
return None |
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
970 |
|
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
|
971 |
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
|
972 |
return self.vfs.reljoin(self.root, f, *insidef) |
244 | 973 |
|
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
974 |
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
|
975 |
if f[0] == '/': |
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
976 |
f = f[1:] |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
977 |
return filelog.filelog(self.svfs, f) |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
978 |
|
6739
c9fbd6ec3489
context: avoid using None for working parent
Matt Mackall <mpm@selenic.com>
parents:
6736
diff
changeset
|
979 |
def changectx(self, changeid): |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
980 |
return self[changeid] |
3218
8d4855fd9d7b
merge: use new working context object in update
Matt Mackall <mpm@selenic.com>
parents:
3164
diff
changeset
|
981 |
|
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
982 |
def setparents(self, p1, p2=nullid): |
32350
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
983 |
with self.dirstate.parentchange(): |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
984 |
copies = self.dirstate.setparents(p1, p2) |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
985 |
pctx = self[p1] |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
986 |
if copies: |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
987 |
# Adjust copy records, the dirstate cannot do it, it |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
988 |
# requires access to parents manifests. Preserve them |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
989 |
# only for entries added to first parent. |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
990 |
for f in copies: |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
991 |
if f not in pctx and copies[f] in pctx: |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
992 |
self.dirstate.copy(copies[f], f) |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
993 |
if p2 == nullid: |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
994 |
for f, s in sorted(self.dirstate.copies().items()): |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
995 |
if f not in pctx and s not in pctx: |
9742f937c971
localrepo: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32332
diff
changeset
|
996 |
self.dirstate.copy(None, f) |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
997 |
|
2564
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
998 |
def filectx(self, path, changeid=None, fileid=None): |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
999 |
"""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
|
1000 |
fileid can be a file revision or node.""" |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
1001 |
return context.filectx(self, path, changeid, fileid) |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
1002 |
|
627 | 1003 |
def getcwd(self): |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
839
diff
changeset
|
1004 |
return self.dirstate.getcwd() |
627 | 1005 |
|
4525
78b6add1f966
Add dirstate.pathto and localrepo.pathto.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4516
diff
changeset
|
1006 |
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
|
1007 |
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
|
1008 |
|
11698
9df481f8036d
localrepo: refactor filter computation
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11669
diff
changeset
|
1009 |
def _loadfilter(self, filter): |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
1010 |
if filter not in self.filterpats: |
1258 | 1011 |
l = [] |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
1012 |
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
|
1013 |
if cmd == '!': |
b71a52f101dc
Make it possible to disable filtering for a pattern.
Mads Kiilerich <mads@kiilerich.com>
parents:
7208
diff
changeset
|
1014 |
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
|
1015 |
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
|
1016 |
fn = None |
6066
f3a8b5360100
Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents:
6065
diff
changeset
|
1017 |
params = cmd |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
1018 |
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
|
1019 |
if cmd.startswith(name): |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
1020 |
fn = filterfn |
6066
f3a8b5360100
Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents:
6065
diff
changeset
|
1021 |
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
|
1022 |
break |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
1023 |
if not fn: |
5967
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
1024 |
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
|
1025 |
# 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
|
1026 |
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
|
1027 |
oldfn = fn |
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
1028 |
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
|
1029 |
l.append((mf, fn, params)) |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
1030 |
self.filterpats[filter] = l |
12706
9ca08fbb750a
localrepo: have _loadfilter return the loaded filter patterns
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12687
diff
changeset
|
1031 |
return self.filterpats[filter] |
1258 | 1032 |
|
12707
2216ab103ea8
localrepo: load filter patterns outside of _filter
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12706
diff
changeset
|
1033 |
def _filter(self, filterpats, filename, data): |
2216ab103ea8
localrepo: load filter patterns outside of _filter
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12706
diff
changeset
|
1034 |
for mf, fn, cmd in filterpats: |
1258 | 1035 |
if mf(filename): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9437
diff
changeset
|
1036 |
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
|
1037 |
data = fn(data, cmd, ui=self.ui, repo=self, filename=filename) |
1258 | 1038 |
break |
1039 |
||
1040 |
return data |
|
1019
a9cca981c423
Create helper functions for I/O to files in the working directory
mpm@selenic.com
parents:
1013
diff
changeset
|
1041 |
|
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
1042 |
@unfilteredpropertycache |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
1043 |
def _encodefilterpats(self): |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
1044 |
return self._loadfilter('encode') |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
1045 |
|
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
1046 |
@unfilteredpropertycache |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
1047 |
def _decodefilterpats(self): |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
1048 |
return self._loadfilter('decode') |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
1049 |
|
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
1050 |
def adddatafilter(self, name, filter): |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
1051 |
self._datafilters[name] = filter |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
1052 |
|
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
1053 |
def wread(self, filename): |
31428
9b361478b03a
localrepo: use self.wvfs.islink directly
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31418
diff
changeset
|
1054 |
if self.wvfs.islink(filename): |
18950
647e3b0c8751
localrepo: use "vfs.readlink()" instead of "os.readlink()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18949
diff
changeset
|
1055 |
data = self.wvfs.readlink(filename) |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
1056 |
else: |
23854
f6070d3a9cb8
localrepo: remove all internal uses of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23853
diff
changeset
|
1057 |
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
|
1058 |
return self._filter(self._encodefilterpats, filename, data) |
1258 | 1059 |
|
28198
ddc07ddcca94
localrepo: support background closing for wwrite()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28164
diff
changeset
|
1060 |
def wwrite(self, filename, data, flags, backgroundclose=False): |
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
|
1061 |
"""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
|
1062 |
|
21b33f0460e0
revert: apply normallookup on reverted file if size isn't changed (issue4583)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24825
diff
changeset
|
1063 |
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
|
1064 |
""" |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
1065 |
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
|
1066 |
if 'l' in flags: |
23854
f6070d3a9cb8
localrepo: remove all internal uses of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23853
diff
changeset
|
1067 |
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
|
1068 |
else: |
28198
ddc07ddcca94
localrepo: support background closing for wwrite()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28164
diff
changeset
|
1069 |
self.wvfs.write(filename, data, backgroundclose=backgroundclose) |
6877
1d38f3605b20
util: set_flags shouldn't know about repo flag formats
Matt Mackall <mpm@selenic.com>
parents:
6875
diff
changeset
|
1070 |
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
|
1071 |
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
|
1072 |
return len(data) |
1258 | 1073 |
|
4005
656e06eebda7
replace filehandle version of wwrite with wwritedata
Matt Mackall <mpm@selenic.com>
parents:
4004
diff
changeset
|
1074 |
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
|
1075 |
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
|
1076 |
|
23379
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1077 |
def currenttransaction(self): |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1078 |
"""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
|
1079 |
if self._transref: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1080 |
tr = self._transref() |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1081 |
else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1082 |
tr = None |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1083 |
|
8072
ecf7795479d5
transaction: support multiple, separate transactions
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7948
diff
changeset
|
1084 |
if tr and tr.running(): |
23379
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1085 |
return tr |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1086 |
return None |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1087 |
|
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1088 |
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
|
1089 |
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
|
1090 |
or self.ui.configbool('devel', 'check-locks')): |
29705
41689e293994
develwarn: use the lock helper in local repo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29417
diff
changeset
|
1091 |
if self._currentlock(self._lockref) is None: |
30574 | 1092 |
raise error.ProgrammingError('transaction requires locking') |
23379
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1093 |
tr = self.currenttransaction() |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
1094 |
if tr is not None: |
8072
ecf7795479d5
transaction: support multiple, separate transactions
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7948
diff
changeset
|
1095 |
return tr.nest() |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
1096 |
|
5865
e7127f669edb
transactions: don't show a backtrace when journal exists
Matt Mackall <mpm@selenic.com>
parents:
5814
diff
changeset
|
1097 |
# 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
|
1098 |
if self.svfs.exists("journal"): |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1099 |
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
|
1100 |
_("abandoned transaction found"), |
3b4c75690206
journal: set Abort hint when failing due to an abandoned transaction
Johan Bjork <jbjoerk@gmail.com>
parents:
21237
diff
changeset
|
1101 |
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
|
1102 |
|
25267
69c5cab0b893
transaction: separate calculating TXNID from creating transaction object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25219
diff
changeset
|
1103 |
idbase = "%.40f#%f" % (random.random(), time.time()) |
31523
f42ec07db6a9
localrepo: use node.hex instead of awkward .encode('latin1')
Augie Fackler <augie@google.com>
parents:
31510
diff
changeset
|
1104 |
ha = hex(hashlib.sha1(idbase).digest()) |
31508
590319c07259
localrepo: ensure transaction id is fully bytes on py3
Augie Fackler <augie@google.com>
parents:
31476
diff
changeset
|
1105 |
txnid = 'TXN:' + ha |
25268
a973b050621d
localrepo: pass hook argument txnid to pretxnopen hooks
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25267
diff
changeset
|
1106 |
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
|
1107 |
|
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
1108 |
self._writejournal(desc) |
18952
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1109 |
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
|
1110 |
if report: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1111 |
rp = report |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1112 |
else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
1113 |
rp = self.ui.warn |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1114 |
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
|
1115 |
# 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
|
1116 |
reporef = weakref.ref(self) |
31994
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1117 |
# Code to track tag movement |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1118 |
# |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1119 |
# Since tags are all handled as file content, it is actually quite hard |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1120 |
# to track these movement from a code perspective. So we fallback to a |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1121 |
# tracking at the repository level. One could envision to track changes |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1122 |
# to the '.hgtags' file through changegroup apply but that fails to |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1123 |
# cope with case where transaction expose new heads without changegroup |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1124 |
# being involved (eg: phase movement). |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1125 |
# |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1126 |
# For now, We gate the feature behind a flag since this likely comes |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1127 |
# with performance impacts. The current code run more often than needed |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1128 |
# and do not use caches as much as it could. The current focus is on |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1129 |
# the behavior of the feature so we disable it by default. The flag |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1130 |
# will be removed when we are happy with the performance impact. |
31996
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1131 |
# |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1132 |
# Once this feature is no longer experimental move the following |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1133 |
# documentation to the appropriate help section: |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1134 |
# |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1135 |
# The ``HG_TAG_MOVED`` variable will be set if the transaction touched |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1136 |
# tags (new or changed or deleted tags). In addition the details of |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1137 |
# these changes are made available in a file at: |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1138 |
# ``REPOROOT/.hg/changes/tags.changes``. |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1139 |
# Make sure you check for HG_TAG_MOVED before reading that file as it |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1140 |
# might exist from a previous transaction even if no tag were touched |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1141 |
# in this one. Changes are recorded in a line base format:: |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1142 |
# |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1143 |
# <action> <hex-node> <tag-name>\n |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1144 |
# |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1145 |
# Actions are defined as follow: |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1146 |
# "-R": tag is removed, |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1147 |
# "+A": tag is added, |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1148 |
# "-M": tag is moved (old value), |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1149 |
# "+M": tag is moved (new value), |
31994
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1150 |
tracktags = lambda x: None |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1151 |
# experimental config: experimental.hook-track-tags |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1152 |
shouldtracktags = self.ui.configbool('experimental', 'hook-track-tags', |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1153 |
False) |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1154 |
if desc != 'strip' and shouldtracktags: |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1155 |
oldheads = self.changelog.headrevs() |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1156 |
def tracktags(tr2): |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1157 |
repo = reporef() |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1158 |
oldfnodes = tagsmod.fnoderevs(repo.ui, repo, oldheads) |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1159 |
newheads = repo.changelog.headrevs() |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1160 |
newfnodes = tagsmod.fnoderevs(repo.ui, repo, newheads) |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1161 |
# notes: we compare lists here. |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1162 |
# As we do it only once buiding set would not be cheaper |
31995
fe9c4d614600
track-tags: compute the actual differences between tags pre/post transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31994
diff
changeset
|
1163 |
changes = tagsmod.difftags(repo.ui, repo, oldfnodes, newfnodes) |
fe9c4d614600
track-tags: compute the actual differences between tags pre/post transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31994
diff
changeset
|
1164 |
if changes: |
31994
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1165 |
tr2.hookargs['tag_moved'] = '1' |
31996
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1166 |
with repo.vfs('changes/tags.changes', 'w', |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1167 |
atomictemp=True) as changesfile: |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1168 |
# note: we do not register the file to the transaction |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1169 |
# because we needs it to still exist on the transaction |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1170 |
# is close (for txnclose hooks) |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
1171 |
tagsmod.writediff(changesfile, changes) |
31994
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1172 |
def validate(tr2): |
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
|
1173 |
"""will run pre-closing hooks""" |
31994
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1174 |
# XXX the transaction API is a bit lacking here so we take a hacky |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1175 |
# path for now |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1176 |
# |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1177 |
# We cannot add this as a "pending" hooks since the 'tr.hookargs' |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1178 |
# dict is copied before these run. In addition we needs the data |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1179 |
# available to in memory hooks too. |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1180 |
# |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1181 |
# Moreover, we also need to make sure this runs before txnclose |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1182 |
# hooks and there is no "pending" mechanism that would execute |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1183 |
# logic only if hooks are about to run. |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1184 |
# |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1185 |
# Fixing this limitation of the transaction is also needed to track |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1186 |
# other families of changes (bookmarks, phases, obsolescence). |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1187 |
# |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1188 |
# This will have to be fixed before we remove the experimental |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1189 |
# gating. |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
1190 |
tracktags(tr2) |
26751
520defbc0335
hook: centralize passing HG_PENDING to external hook process
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26748
diff
changeset
|
1191 |
reporef().hook('pretxnclose', throw=True, |
31509
5c9936193145
localrepo: turn hook kwargs back into strs before calling hook
Augie Fackler <augie@google.com>
parents:
31508
diff
changeset
|
1192 |
txnname=desc, **pycompat.strkwargs(tr.hookargs)) |
26577
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1193 |
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
|
1194 |
repo = reporef() |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1195 |
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
|
1196 |
# 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
|
1197 |
# 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
|
1198 |
# 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
|
1199 |
# 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
|
1200 |
# 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
|
1201 |
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
|
1202 |
else: |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
1203 |
# 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
|
1204 |
# out) in this transaction |
29190
e51f34183599
localrepo: use dirstate restorebackup instead of copying dirstate manually
Mateusz Kwapich <mitrandir@fb.com>
parents:
29186
diff
changeset
|
1205 |
repo.dirstate.restorebackup(None, prefix='journal.') |
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
|
1206 |
|
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1207 |
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
|
1208 |
|
25667
a69bb29b9638
localrepo: kill off sopener (API)
Siddharth Agarwal <sid0@fb.com>
parents:
25660
diff
changeset
|
1209 |
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
|
1210 |
"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
|
1211 |
"undo", |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1212 |
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
|
1213 |
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
|
1214 |
validator=validate, |
33278
87bca10a06ed
transaction: avoid file stat ambiguity only for files in blacklist
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33277
diff
changeset
|
1215 |
releasefn=releasefn, |
87bca10a06ed
transaction: avoid file stat ambiguity only for files in blacklist
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33277
diff
changeset
|
1216 |
checkambigfiles=_cachedfiles) |
32262
85ef5a073114
transaction: track newly introduced revisions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32149
diff
changeset
|
1217 |
tr.changes['revs'] = set() |
33251
a5cb2e4460de
transaction: track new obsmarkers in the 'changes' mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33247
diff
changeset
|
1218 |
tr.changes['obsmarkers'] = set() |
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
|
1219 |
|
25267
69c5cab0b893
transaction: separate calculating TXNID from creating transaction object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25219
diff
changeset
|
1220 |
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
|
1221 |
# 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
|
1222 |
# 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
|
1223 |
# 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
|
1224 |
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
|
1225 |
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
|
1226 |
"""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
|
1227 |
""" |
27907
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1228 |
# Don't reference tr2 in hook() so we don't hold a reference. |
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1229 |
# This reduces memory consumption when there are multiple |
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1230 |
# transactions per lock. This can likely go away if issue5045 |
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1231 |
# fixes the function accumulation. |
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1232 |
hookargs = tr2.hookargs |
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
1233 |
|
24282
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
1234 |
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
|
1235 |
reporef().hook('txnclose', throw=False, txnname=desc, |
31509
5c9936193145
localrepo: turn hook kwargs back into strs before calling hook
Augie Fackler <augie@google.com>
parents:
31508
diff
changeset
|
1236 |
**pycompat.strkwargs(hookargs)) |
24282
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
1237 |
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
|
1238 |
tr.addfinalize('txnclose-hook', txnclosehook) |
32332
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1239 |
tr.addpostclose('warms-cache', self._buildcacheupdater(tr)) |
24792
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1240 |
def txnaborthook(tr2): |
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1241 |
"""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
|
1242 |
""" |
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1243 |
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
|
1244 |
**tr2.hookargs) |
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
1245 |
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
|
1246 |
# 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
|
1247 |
# 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
|
1248 |
tr.addpostclose('refresh-filecachestats', self._refreshfilecachestats) |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1249 |
self._transref = weakref.ref(tr) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1250 |
return tr |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1251 |
|
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
1252 |
def _journalfiles(self): |
18952
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1253 |
return ((self.svfs, 'journal'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1254 |
(self.vfs, 'journal.dirstate'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1255 |
(self.vfs, 'journal.branch'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1256 |
(self.vfs, 'journal.desc'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1257 |
(self.vfs, 'journal.bookmarks'), |
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
1258 |
(self.svfs, 'journal.phaseroots')) |
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
1259 |
|
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
1260 |
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
|
1261 |
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
|
1262 |
|
32452
b647b923486f
transaction: run _writejournal unfiltered
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32381
diff
changeset
|
1263 |
@unfilteredmethod |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1264 |
def _writejournal(self, desc): |
29191
ad1ce3c7af72
localrepo: use dirstate savebackup instead of handling dirstate file manually
Mateusz Kwapich <mitrandir@fb.com>
parents:
29190
diff
changeset
|
1265 |
self.dirstate.savebackup(None, prefix='journal.') |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1266 |
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
|
1267 |
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
|
1268 |
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
|
1269 |
"%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
|
1270 |
self.vfs.write("journal.bookmarks", |
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1271 |
self.vfs.tryread("bookmarks")) |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
1272 |
self.svfs.write("journal.phaseroots", |
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
1273 |
self.svfs.tryread("phaseroots")) |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
1274 |
|
210 | 1275 |
def recover(self): |
27846
63821023ea79
with: use context manager in localrepo recover
Bryan O'Sullivan <bryano@fb.com>
parents:
27698
diff
changeset
|
1276 |
with self.lock(): |
18947
9b82f93e3a7a
localrepo: use "vfs.exists()" instead of "os.path.exists()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18946
diff
changeset
|
1277 |
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
|
1278 |
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
|
1279 |
vfsmap = {'': self.svfs, |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1280 |
'plain': self.vfs,} |
23853
0cc663e44258
localrepo: remove all internal uses of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23852
diff
changeset
|
1281 |
transaction.rollback(self.svfs, vfsmap, "journal", |
33278
87bca10a06ed
transaction: avoid file stat ambiguity only for files in blacklist
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33277
diff
changeset
|
1282 |
self.ui.warn, |
87bca10a06ed
transaction: avoid file stat ambiguity only for files in blacklist
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33277
diff
changeset
|
1283 |
checkambigfiles=_cachedfiles) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1284 |
self.invalidate() |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1285 |
return True |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1286 |
else: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1287 |
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
|
1288 |
return False |
210 | 1289 |
|
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1290 |
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
|
1291 |
wlock = lock = dsguard = None |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1292 |
try: |
1712
21dcf38e5d7d
Allow callers to pass in the dirstate lock in most localrepo.py funcs.
mason@suse.com
parents:
1709
diff
changeset
|
1293 |
wlock = self.wlock() |
4438
3900f684a150
Fix hg import --exact bug that hangs hg on failure.
Eric Hopper <hopper@omnifarious.org>
parents:
4417
diff
changeset
|
1294 |
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
|
1295 |
if self.svfs.exists("undo"): |
30492
77cd647b04ac
localrepo: refer to dirstateguard by its new name
Augie Fackler <augie@google.com>
parents:
30377
diff
changeset
|
1296 |
dsguard = dirstateguard.dirstateguard(self, 'rollback') |
26631
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1297 |
|
e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
1298 |
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
|
1299 |
else: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1300 |
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
|
1301 |
return 1 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1302 |
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
|
1303 |
release(dsguard, lock, wlock) |
162 | 1304 |
|
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
1305 |
@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
|
1306 |
def _rollback(self, dryrun, force, dsguard): |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1307 |
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
|
1308 |
try: |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1309 |
args = self.vfs.read('undo.desc').splitlines() |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1310 |
(oldlen, desc, detail) = (int(args[0]), args[1], None) |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1311 |
if len(args) >= 3: |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1312 |
detail = args[2] |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1313 |
oldtip = oldlen - 1 |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1314 |
|
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1315 |
if detail and ui.verbose: |
32895
05c213cd8ab8
py3: use '%d' instead of '%s' for integers
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32871
diff
changeset
|
1316 |
msg = (_('repository tip rolled back to revision %d' |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1317 |
' (undo %s: %s)\n') |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1318 |
% (oldtip, desc, detail)) |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1319 |
else: |
32895
05c213cd8ab8
py3: use '%d' instead of '%s' for integers
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32871
diff
changeset
|
1320 |
msg = (_('repository tip rolled back to revision %d' |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1321 |
' (undo %s)\n') |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1322 |
% (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
|
1323 |
except IOError: |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1324 |
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
|
1325 |
desc = None |
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1326 |
|
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1327 |
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
|
1328 |
raise error.Abort( |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
1329 |
_('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
|
1330 |
'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
|
1331 |
|
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
1332 |
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
|
1333 |
if dryrun: |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
1334 |
return 0 |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1335 |
|
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1336 |
parents = self.dirstate.parents() |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1337 |
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
|
1338 |
vfsmap = {'plain': self.vfs, '': self.svfs} |
33278
87bca10a06ed
transaction: avoid file stat ambiguity only for files in blacklist
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33277
diff
changeset
|
1339 |
transaction.rollback(self.svfs, vfsmap, 'undo', ui.warn, |
87bca10a06ed
transaction: avoid file stat ambiguity only for files in blacklist
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33277
diff
changeset
|
1340 |
checkambigfiles=_cachedfiles) |
18947
9b82f93e3a7a
localrepo: use "vfs.exists()" instead of "os.path.exists()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18946
diff
changeset
|
1341 |
if self.vfs.exists('undo.bookmarks'): |
29352
37c7f9fb7040
localrepo: make restoring from backup at rollback avoid ambiguity of file stat
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29341
diff
changeset
|
1342 |
self.vfs.rename('undo.bookmarks', 'bookmarks', checkambig=True) |
18947
9b82f93e3a7a
localrepo: use "vfs.exists()" instead of "os.path.exists()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18946
diff
changeset
|
1343 |
if self.svfs.exists('undo.phaseroots'): |
29352
37c7f9fb7040
localrepo: make restoring from backup at rollback avoid ambiguity of file stat
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29341
diff
changeset
|
1344 |
self.svfs.rename('undo.phaseroots', 'phaseroots', checkambig=True) |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
1345 |
self.invalidate() |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1346 |
|
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1347 |
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
|
1348 |
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
|
1349 |
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
|
1350 |
# 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
|
1351 |
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
|
1352 |
|
29190
e51f34183599
localrepo: use dirstate restorebackup instead of copying dirstate manually
Mateusz Kwapich <mitrandir@fb.com>
parents:
29186
diff
changeset
|
1353 |
self.dirstate.restorebackup(None, prefix='undo.') |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1354 |
try: |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
1355 |
branch = self.vfs.read('undo.branch') |
17360
935831597e16
rollback: write dirstate branch with correct encoding
Sune Foldager <cryo@cyanite.org>
parents:
17324
diff
changeset
|
1356 |
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
|
1357 |
except IOError: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1358 |
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
|
1359 |
'current branch is still \'%s\'\n') |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1360 |
% self.dirstate.branch()) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1361 |
|
27167
3fe8cb40c9c5
commands: inline definition of localrepo.parents() and drop the method (API)
Augie Fackler <augie@google.com>
parents:
27166
diff
changeset
|
1362 |
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
|
1363 |
if len(parents) > 1: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1364 |
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
|
1365 |
'revisions %d and %d\n') % parents) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1366 |
else: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
1367 |
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
|
1368 |
'revision %d\n') % parents) |
26989
a65ea44f163e
localrepo: switch to mergestate.clean()
Siddharth Agarwal <sid0@fb.com>
parents:
26907
diff
changeset
|
1369 |
mergemod.mergestate.clean(self, self['.'].node()) |
24784
59406b8b1303
rollback: clear resolve state (issue4593)
Matt Mackall <mpm@selenic.com>
parents:
24750
diff
changeset
|
1370 |
|
17013
c8eda7bbdcab
strip: incrementally update the branchheads cache after a strip
Joshua Redstone <joshua.redstone@fb.com>
parents:
17012
diff
changeset
|
1371 |
# 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
|
1372 |
# 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
|
1373 |
# invalidated. |
15604
b8d8599410da
rollback: always call destroyed() (regression from 1.9)
Greg Ward <greg-hg@gerg.ca>
parents:
15381
diff
changeset
|
1374 |
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
|
1375 |
return 0 |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
1376 |
|
32332
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1377 |
def _buildcacheupdater(self, newtransaction): |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1378 |
"""called during transaction to build the callback updating cache |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1379 |
|
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1380 |
Lives on the repository to help extension who might want to augment |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1381 |
this logic. For this purpose, the created transaction is passed to the |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1382 |
method. |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1383 |
""" |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1384 |
# we must avoid cyclic reference between repo and transaction. |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1385 |
reporef = weakref.ref(self) |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1386 |
def updater(tr): |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1387 |
repo = reporef() |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1388 |
repo.updatecaches(tr) |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1389 |
return updater |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
1390 |
|
32263
604d65e2c0b2
caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32262
diff
changeset
|
1391 |
@unfilteredmethod |
32264
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
1392 |
def updatecaches(self, tr=None): |
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
1393 |
"""warm appropriate caches |
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
1394 |
|
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
1395 |
If this function is called after a transaction closed. The transaction |
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
1396 |
will be available in the 'tr' argument. This can be used to selectively |
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
1397 |
update caches relevant to the changes in that transaction. |
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
1398 |
""" |
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
1399 |
if tr is not None and tr.hookargs.get('source') == 'strip': |
32263
604d65e2c0b2
caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32262
diff
changeset
|
1400 |
# During strip, many caches are invalid but |
604d65e2c0b2
caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32262
diff
changeset
|
1401 |
# later call to `destroyed` will refresh them. |
604d65e2c0b2
caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32262
diff
changeset
|
1402 |
return |
604d65e2c0b2
caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32262
diff
changeset
|
1403 |
|
32264
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
1404 |
if tr is None or tr.changes['revs']: |
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
1405 |
# updating the unfiltered branchmap should refresh all the others, |
32267
c2380b448265
caches: move the 'updating the branch cache' message in 'updatecaches'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32266
diff
changeset
|
1406 |
self.ui.debug('updating the branch cache\n') |
32263
604d65e2c0b2
caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32262
diff
changeset
|
1407 |
branchmap.updatecache(self.filtered('served')) |
604d65e2c0b2
caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32262
diff
changeset
|
1408 |
|
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
1409 |
def invalidatecaches(self): |
15988
827e0126738d
localrepo: delete _phaserev when invalidating caches
Idan Kamara <idankk86@gmail.com>
parents:
15987
diff
changeset
|
1410 |
|
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
1411 |
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
|
1412 |
# 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
|
1413 |
del self.__dict__['_tagscache'] |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
1414 |
|
18189
b9026ba002f6
branchmap: enable caching for filtered version too
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18186
diff
changeset
|
1415 |
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
|
1416 |
self.invalidatevolatilesets() |
33302
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33278
diff
changeset
|
1417 |
self._sparsesignaturecache.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
|
1418 |
|
312262ebc223
cache: group obscache and revsfiltercache invalidation in a single function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18101
diff
changeset
|
1419 |
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
|
1420 |
self.filteredrevcache.clear() |
17469
fb72eec7efd8
obsolete: introduce caches for all meaningful sets
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17434
diff
changeset
|
1421 |
obsolete.clearobscaches(self) |
1784
2e0a288ca93e
revalidate revlog data after locking the repo (issue132)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1782
diff
changeset
|
1422 |
|
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1423 |
def invalidatedirstate(self): |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1424 |
'''Invalidates the dirstate, causing the next call to dirstate |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1425 |
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
|
1426 |
rereading it if it has. |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1427 |
|
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1428 |
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
|
1429 |
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
|
1430 |
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
|
1431 |
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
|
1432 |
if hasunfilteredcache(self, 'dirstate'): |
16200
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1433 |
for k in self.dirstate._filecache: |
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1434 |
try: |
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1435 |
delattr(self.dirstate, k) |
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1436 |
except AttributeError: |
9d4a2942a732
dirstate: add filecache support
Idan Kamara <idankk86@gmail.com>
parents:
16198
diff
changeset
|
1437 |
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
|
1438 |
delattr(self.unfiltered(), 'dirstate') |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1439 |
|
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1440 |
def invalidate(self, clearfilecache=False): |
29918
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
1441 |
'''Invalidates both store and non-store parts other than dirstate |
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
1442 |
|
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
1443 |
If a transaction is running, invalidation of store is omitted, |
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
1444 |
because discarding in-memory changes might cause inconsistency |
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
1445 |
(e.g. incomplete fncache causes unintentional failure, but |
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
1446 |
redundant one doesn't). |
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
1447 |
''' |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18520
diff
changeset
|
1448 |
unfiltered = self.unfiltered() # all file caches are stored unfiltered |
31510
2244fb3eee49
localrepo: forcibly copy list of filecache keys
Augie Fackler <augie@google.com>
parents:
31509
diff
changeset
|
1449 |
for k in list(self._filecache.keys()): |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1450 |
# dirstate is invalidated separately in invalidatedirstate() |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1451 |
if k == 'dirstate': |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1452 |
continue |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1453 |
|
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1454 |
if clearfilecache: |
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
1455 |
del self._filecache[k] |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1456 |
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
|
1457 |
delattr(unfiltered, k) |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1458 |
except AttributeError: |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
1459 |
pass |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
1460 |
self.invalidatecaches() |
29918
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
1461 |
if not self.currenttransaction(): |
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
1462 |
# TODO: Changing contents of store outside transaction |
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
1463 |
# causes inconsistency. We should make in-memory store |
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
1464 |
# changes detectable, and abort if changed. |
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
1465 |
self.store.invalidatecaches() |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
1466 |
|
20627
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1467 |
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
|
1468 |
'''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
|
1469 |
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
|
1470 |
# 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
|
1471 |
self.invalidate() |
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1472 |
self.invalidatedirstate() |
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
1473 |
|
29920
e35a83cedde1
localrepo: make _refreshfilecachestats unfiltered method to refresh correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29918
diff
changeset
|
1474 |
@unfilteredmethod |
26251
5c0f5db65c6b
localrepo: refresh filecache stats only if transaction finished successfully
Yuya Nishihara <yuya@tcha.org>
parents:
26250
diff
changeset
|
1475 |
def _refreshfilecachestats(self, tr): |
26250
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
1476 |
"""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
|
1477 |
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
|
1478 |
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
|
1479 |
continue |
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
1480 |
ce.refresh() |
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
1481 |
|
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1482 |
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
|
1483 |
inheritchecker=None, parentenvvar=None): |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1484 |
parentlock = None |
26472
406a654b41cb
localrepo: add a note about parentenvvar
Siddharth Agarwal <sid0@fb.com>
parents:
26449
diff
changeset
|
1485 |
# 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
|
1486 |
# determine whether it can be inherited |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1487 |
if parentenvvar is not None: |
30634
ad15646dc61c
py3: replace os.environ with encoding.environ (part 1 of 5)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30574
diff
changeset
|
1488 |
parentlock = encoding.environ.get(parentenvvar) |
161 | 1489 |
try: |
26321
db4c192cb9b3
lock: move acquirefn call to inside the lock
Siddharth Agarwal <sid0@fb.com>
parents:
26320
diff
changeset
|
1490 |
l = lockmod.lock(vfs, lockname, 0, releasefn=releasefn, |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1491 |
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
|
1492 |
inheritchecker=inheritchecker, |
26439
b50f5beadf3e
localrepo: allow creating inherited locks
Siddharth Agarwal <sid0@fb.com>
parents:
26409
diff
changeset
|
1493 |
parentlock=parentlock) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
1494 |
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
|
1495 |
if not wait: |
2016
ff5c9a92f556
fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1998
diff
changeset
|
1496 |
raise |
29883
0c8c388c7d62
lock: show more detail for new-style locks in lock waiting message (issue4752)
Mark Ignacio <mignacio@fb.com>
parents:
29826
diff
changeset
|
1497 |
# show more details for new-style locks |
0c8c388c7d62
lock: show more detail for new-style locks in lock waiting message (issue4752)
Mark Ignacio <mignacio@fb.com>
parents:
29826
diff
changeset
|
1498 |
if ':' in inst.locker: |
0c8c388c7d62
lock: show more detail for new-style locks in lock waiting message (issue4752)
Mark Ignacio <mignacio@fb.com>
parents:
29826
diff
changeset
|
1499 |
host, pid = inst.locker.split(":", 1) |
0c8c388c7d62
lock: show more detail for new-style locks in lock waiting message (issue4752)
Mark Ignacio <mignacio@fb.com>
parents:
29826
diff
changeset
|
1500 |
self.ui.warn( |
0c8c388c7d62
lock: show more detail for new-style locks in lock waiting message (issue4752)
Mark Ignacio <mignacio@fb.com>
parents:
29826
diff
changeset
|
1501 |
_("waiting for lock on %s held by process %r " |
0c8c388c7d62
lock: show more detail for new-style locks in lock waiting message (issue4752)
Mark Ignacio <mignacio@fb.com>
parents:
29826
diff
changeset
|
1502 |
"on host %r\n") % (desc, pid, host)) |
0c8c388c7d62
lock: show more detail for new-style locks in lock waiting message (issue4752)
Mark Ignacio <mignacio@fb.com>
parents:
29826
diff
changeset
|
1503 |
else: |
0c8c388c7d62
lock: show more detail for new-style locks in lock waiting message (issue4752)
Mark Ignacio <mignacio@fb.com>
parents:
29826
diff
changeset
|
1504 |
self.ui.warn(_("waiting for lock on %s held by %r\n") % |
0c8c388c7d62
lock: show more detail for new-style locks in lock waiting message (issue4752)
Mark Ignacio <mignacio@fb.com>
parents:
29826
diff
changeset
|
1505 |
(desc, inst.locker)) |
2016
ff5c9a92f556
fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1998
diff
changeset
|
1506 |
# 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
|
1507 |
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
|
1508 |
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
|
1509 |
releasefn=releasefn, acquirefn=acquirefn, |
db4c192cb9b3
lock: move acquirefn call to inside the lock
Siddharth Agarwal <sid0@fb.com>
parents:
26320
diff
changeset
|
1510 |
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
|
1511 |
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
|
1512 |
return l |
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
1513 |
|
15587
809d5d30e377
localrepo: rename _postrelease to _afterlock
Matt Mackall <mpm@selenic.com>
parents:
15586
diff
changeset
|
1514 |
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
|
1515 |
"""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
|
1516 |
|
24821
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1517 |
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
|
1518 |
(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
|
1519 |
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
|
1520 |
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
|
1521 |
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
|
1522 |
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
|
1523 |
break |
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
1524 |
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
|
1525 |
callback() |
15583
926a06f7a353
lock: add mechanism to register post release callback
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15486
diff
changeset
|
1526 |
|
4914 | 1527 |
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
|
1528 |
'''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
|
1529 |
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
|
1530 |
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
|
1531 |
|
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1532 |
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
|
1533 |
'wlock' first to avoid a dead-lock hazard.''' |
29705
41689e293994
develwarn: use the lock helper in local repo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29417
diff
changeset
|
1534 |
l = self._currentlock(self._lockref) |
41689e293994
develwarn: use the lock helper in local repo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29417
diff
changeset
|
1535 |
if l is not None: |
8108
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
1536 |
l.lock() |
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
1537 |
return l |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
1538 |
|
26251
5c0f5db65c6b
localrepo: refresh filecache stats only if transaction finished successfully
Yuya Nishihara <yuya@tcha.org>
parents:
26250
diff
changeset
|
1539 |
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
|
1540 |
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
|
1541 |
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
|
1542 |
return l |
1751
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
1543 |
|
26499
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1544 |
def _wlockchecktransaction(self): |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1545 |
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
|
1546 |
raise error.LockInheritanceContractViolation( |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1547 |
'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
|
1548 |
|
4914 | 1549 |
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
|
1550 |
'''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
|
1551 |
.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
|
1552 |
|
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1553 |
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
|
1554 |
|
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
1555 |
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
|
1556 |
'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
|
1557 |
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
|
1558 |
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
|
1559 |
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
|
1560 |
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
|
1561 |
|
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26767
diff
changeset
|
1562 |
# 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
|
1563 |
# 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
|
1564 |
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
|
1565 |
or self.ui.configbool('devel', 'check-locks')): |
29705
41689e293994
develwarn: use the lock helper in local repo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29417
diff
changeset
|
1566 |
if self._currentlock(self._lockref) is not None: |
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
|
1567 |
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
|
1568 |
|
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1569 |
def unlock(): |
22404
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
1570 |
if self.dirstate.pendingparentchange(): |
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
1571 |
self.dirstate.invalidate() |
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
1572 |
else: |
26748
5ba0a99ff27f
dirstate: make dirstate.write() callers pass transaction object to it
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26741
diff
changeset
|
1573 |
self.dirstate.write(None) |
22404
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
1574 |
|
18318
948f495fb230
localrepo: drop unnecessary check on wlock unlock
Idan Kamara <idankk86@gmail.com>
parents:
18314
diff
changeset
|
1575 |
self._filecache['dirstate'].refresh() |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1576 |
|
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
|
1577 |
l = self._lock(self.vfs, "wlock", wait, unlock, |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
1578 |
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
|
1579 |
self.origroot, |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1580 |
inheritchecker=self._wlockchecktransaction, |
e72b62b154b0
localrepo: prevent wlock from being inherited when a transaction is running
Siddharth Agarwal <sid0@fb.com>
parents:
26489
diff
changeset
|
1581 |
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
|
1582 |
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
|
1583 |
return l |
1531
2ba8bf7defda
add localrepo.wlock for protecting the dirstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1516
diff
changeset
|
1584 |
|
26488
df2dc5141721
localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26475
diff
changeset
|
1585 |
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
|
1586 |
"""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
|
1587 |
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
|
1588 |
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
|
1589 |
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
|
1590 |
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
|
1591 |
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
|
1592 |
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
|
1593 |
|
26489
2a3fc0272e3f
localrepo: add a way to get the current wlock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26488
diff
changeset
|
1594 |
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
|
1595 |
"""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
|
1596 |
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
|
1597 |
|
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1598 |
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
|
1599 |
""" |
3294
a2d93b186a0e
commit: unify file-level commit code
Matt Mackall <mpm@selenic.com>
parents:
3293
diff
changeset
|
1600 |
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
|
1601 |
""" |
3292
764688cf51e5
merge: remember rename copies and parents properly on commit
Matt Mackall <mpm@selenic.com>
parents:
3241
diff
changeset
|
1602 |
|
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1603 |
fname = fctx.path() |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1604 |
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
|
1605 |
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
|
1606 |
if isinstance(fctx, context.filectx): |
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1607 |
node = fctx.filenode() |
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1608 |
if node in [fparent1, fparent2]: |
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1609 |
self.ui.debug('reusing %s filelog entry\n' % fname) |
29181
dae38633eba8
localrepo: prevent executable-bit only changes from being lost on amend
Mateusz Kwapich <mitrandir@fb.com>
parents:
28883
diff
changeset
|
1610 |
if manifest1.flags(fname) != fctx.flags(): |
dae38633eba8
localrepo: prevent executable-bit only changes from being lost on amend
Mateusz Kwapich <mitrandir@fb.com>
parents:
28883
diff
changeset
|
1611 |
changelist.append(fname) |
24394
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1612 |
return node |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1613 |
|
24394
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1614 |
flog = self.file(fname) |
3292
764688cf51e5
merge: remember rename copies and parents properly on commit
Matt Mackall <mpm@selenic.com>
parents:
3241
diff
changeset
|
1615 |
meta = {} |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1616 |
copy = fctx.renamed() |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1617 |
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
|
1618 |
# 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
|
1619 |
# 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
|
1620 |
# 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
|
1621 |
# 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
|
1622 |
# 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
|
1623 |
# |
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
|
1624 |
# 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
|
1625 |
# \ / 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
|
1626 |
# \- 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
|
1627 |
# 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
|
1628 |
# 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
|
1629 |
# |
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
|
1630 |
# 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
|
1631 |
# |
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
|
1632 |
# 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
|
1633 |
# \ / 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
|
1634 |
# \- 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
|
1635 |
# |
6874
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
1636 |
|
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1637 |
cfname = copy[0] |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1638 |
crev = manifest1.get(cfname) |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1639 |
newfparent = fparent2 |
6874
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
1640 |
|
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
1641 |
if manifest2: # branch merge |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1642 |
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
|
1643 |
if cfname in manifest2: |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1644 |
crev = manifest2[cfname] |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1645 |
newfparent = fparent1 |
6874
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
1646 |
|
23929
a43fdf33a6be
commit: remove reverse search for copy source when not in parent (issue4476)
Ryan McElroy <rmcelroy@fb.com>
parents:
23917
diff
changeset
|
1647 |
# 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
|
1648 |
# 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
|
1649 |
# 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
|
1650 |
# 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
|
1651 |
# 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
|
1652 |
# 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
|
1653 |
# 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
|
1654 |
# behavior in this circumstance. |
6875 | 1655 |
|
13000
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1656 |
if crev: |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1657 |
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
|
1658 |
meta["copy"] = cfname |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1659 |
meta["copyrev"] = hex(crev) |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1660 |
fparent1, fparent2 = nullid, newfparent |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1661 |
else: |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
1662 |
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
|
1663 |
"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
|
1664 |
|
20556
db0740a487ab
localrepo: commit: avoid calling expensive ancestor function when p1 is nullrev
Mads Kiilerich <madski@unity3d.com>
parents:
20469
diff
changeset
|
1665 |
elif fparent1 == nullid: |
db0740a487ab
localrepo: commit: avoid calling expensive ancestor function when p1 is nullrev
Mads Kiilerich <madski@unity3d.com>
parents:
20469
diff
changeset
|
1666 |
fparent1, fparent2 = fparent2, nullid |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1667 |
elif fparent2 != nullid: |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1668 |
# 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
|
1669 |
fparentancestors = flog.commonancestorsheads(fparent1, fparent2) |
20987
298c9f346dde
commit: use revlog.commonancestors instead of .ancestor
Mads Kiilerich <madski@unity3d.com>
parents:
20975
diff
changeset
|
1670 |
if fparent1 in fparentancestors: |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1671 |
fparent1, fparent2 = fparent2, nullid |
20987
298c9f346dde
commit: use revlog.commonancestors instead of .ancestor
Mads Kiilerich <madski@unity3d.com>
parents:
20975
diff
changeset
|
1672 |
elif fparent2 in fparentancestors: |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
1673 |
fparent2 = nullid |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1674 |
|
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1675 |
# is the file changed? |
24394
03163826b4e6
localrepo: reuse commit of parent filectx entries without rehashing
Mads Kiilerich <madski@unity3d.com>
parents:
24388
diff
changeset
|
1676 |
text = fctx.data() |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1677 |
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
|
1678 |
changelist.append(fname) |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1679 |
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
|
1680 |
# 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
|
1681 |
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
|
1682 |
changelist.append(fname) |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1683 |
|
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1684 |
return fparent1 |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1685 |
|
28813
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1686 |
def checkcommitpatterns(self, wctx, vdirs, match, status, fail): |
30332
318a24b52eeb
spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents:
30272
diff
changeset
|
1687 |
"""check for commit arguments that aren't committable""" |
28814
1f65f291a5b7
localrepo: drop force check from checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28813
diff
changeset
|
1688 |
if match.isexact() or match.prefix(): |
28813
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1689 |
matched = set(status.modified + status.added + status.removed) |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1690 |
|
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1691 |
for f in match.files(): |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1692 |
f = self.dirstate.normalize(f) |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1693 |
if f == '.' or f in matched or f in wctx.substate: |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1694 |
continue |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1695 |
if f in status.deleted: |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1696 |
fail(f, _('file not found!')) |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1697 |
if f in vdirs: # visited directory |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1698 |
d = f + '/' |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1699 |
for mf in matched: |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1700 |
if mf.startswith(d): |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1701 |
break |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1702 |
else: |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1703 |
fail(f, _("no match under directory!")) |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1704 |
elif f not in self.dirstate: |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1705 |
fail(f, _("file not tracked!")) |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1706 |
|
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
1707 |
@unfilteredmethod |
8706
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1708 |
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
|
1709 |
editor=False, extra=None): |
8515
865e08a7d6b0
localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8503
diff
changeset
|
1710 |
"""Add a new revision to current repository. |
865e08a7d6b0
localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8503
diff
changeset
|
1711 |
|
8706
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1712 |
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
|
1713 |
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
|
1714 |
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
|
1715 |
""" |
26322
2cd19782d2d4
commit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26321
diff
changeset
|
1716 |
if extra is None: |
2cd19782d2d4
commit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26321
diff
changeset
|
1717 |
extra = {} |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1718 |
|
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1719 |
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
|
1720 |
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
|
1721 |
|
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1722 |
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
|
1723 |
match = matchmod.always(self.root, '') |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1724 |
|
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1725 |
if not force: |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1726 |
vdirs = [] |
19138
e579687cb5d8
localrepo.commit: hook into match.explicitdir
Siddharth Agarwal <sid0@fb.com>
parents:
19097
diff
changeset
|
1727 |
match.explicitdir = vdirs.append |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1728 |
match.bad = fail |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1729 |
|
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1730 |
wlock = lock = tr = None |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1731 |
try: |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1732 |
wlock = self.wlock() |
27291
a18328aad48c
commit: make commit acquire store lock before processing for consistency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27278
diff
changeset
|
1733 |
lock = self.lock() # for recent changelog (see issue4368) |
a18328aad48c
commit: make commit acquire store lock before processing for consistency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27278
diff
changeset
|
1734 |
|
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1735 |
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
|
1736 |
merge = len(wctx.parents()) > 1 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1737 |
|
32312
0d6b3572ad92
match: remove ispartial()
Martin von Zweigbergk <martinvonz@google.com>
parents:
32292
diff
changeset
|
1738 |
if not force and merge and not match.always(): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
1739 |
raise error.Abort(_('cannot partially commit a merge ' |
8397
613ac2856535
remove deprecated rawcommit
Matt Mackall <mpm@selenic.com>
parents:
8395
diff
changeset
|
1740 |
'(do not specify files or patterns)')) |
6706
716a1296e182
localrepo: replace dirstate by workingfilectx in filecommit()
Patrick Mezard <pmezard@gmail.com>
parents:
6705
diff
changeset
|
1741 |
|
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1742 |
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
|
1743 |
if force: |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1744 |
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
|
1745 |
|
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1746 |
# check subrepos |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1747 |
subs = [] |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1748 |
commitsubs = set() |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1749 |
newstate = wctx.substate.copy() |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1750 |
# 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
|
1751 |
if '.hgsub' in wctx: |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1752 |
# 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
|
1753 |
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
|
1754 |
if '.hgsubstate' in c: |
ca5dd216cb62
localrepo: omit ".hgsubstate" also from "added" files
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20776
diff
changeset
|
1755 |
c.remove('.hgsubstate') |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1756 |
|
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1757 |
# 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
|
1758 |
# 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
|
1759 |
oldstate = wctx.p1().substate |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1760 |
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
|
1761 |
if not match(s): |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1762 |
# 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
|
1763 |
if s in oldstate: |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1764 |
newstate[s] = oldstate[s] |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1765 |
continue |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1766 |
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
|
1767 |
raise error.Abort( |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1768 |
_("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
|
1769 |
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
|
1770 |
if dirtyreason: |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1771 |
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
|
1772 |
raise error.Abort(dirtyreason, |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1773 |
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
|
1774 |
subs.append(s) |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1775 |
commitsubs.add(s) |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1776 |
else: |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1777 |
bs = wctx.sub(s).basestate() |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1778 |
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
|
1779 |
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
|
1780 |
subs.append(s) |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1781 |
|
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1782 |
# 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
|
1783 |
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
|
1784 |
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
|
1785 |
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
|
1786 |
if subs: |
14536
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1787 |
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
|
1788 |
'.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
|
1789 |
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
|
1790 |
_("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
|
1791 |
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
|
1792 |
|
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1793 |
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
|
1794 |
# 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
|
1795 |
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
|
1796 |
'.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
|
1797 |
status.removed)): |
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
1798 |
status.removed.insert(0, '.hgsubstate') |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1799 |
|
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1800 |
# make sure all explicit patterns are matched |
28813
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1801 |
if not force: |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
1802 |
self.checkcommitpatterns(wctx, vdirs, match, status, fail) |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1803 |
|
23710
745e3b485632
context: add workingcommitctx for exact context to be committed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23667
diff
changeset
|
1804 |
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
|
1805 |
text, user, date, extra) |
18659
b946470efed9
localrepo: create context used for actual commit earlier
David Schleimer <dschleimer@fb.com>
parents:
18644
diff
changeset
|
1806 |
|
25840
25897d778738
commit: mark internal-only option
Matt Mackall <mpm@selenic.com>
parents:
25839
diff
changeset
|
1807 |
# 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
|
1808 |
allowemptycommit = (wctx.branch() != wctx.p1().branch() |
25018
93e015a3d1ea
commit: add ui.allowemptycommit config option
Durham Goode <durham@fb.com>
parents:
25017
diff
changeset
|
1809 |
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
|
1810 |
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
|
1811 |
if not allowemptycommit: |
8404
a2bc39ade36b
commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents:
8403
diff
changeset
|
1812 |
return None |
a2bc39ade36b
commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents:
8403
diff
changeset
|
1813 |
|
18660
7e6946ed5756
localrepo: use workingctx for validation in commit
David Schleimer <dschleimer@fb.com>
parents:
18659
diff
changeset
|
1814 |
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
|
1815 |
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
|
1816 |
|
26996
bf3eec62212f
localrepo.commit: switch to mergestate.read()
Siddharth Agarwal <sid0@fb.com>
parents:
26989
diff
changeset
|
1817 |
ms = mergemod.mergestate.read(self) |
30496
a90867a22daf
localrepo: refer to checkunresolved by its new name
Augie Fackler <augie@google.com>
parents:
30492
diff
changeset
|
1818 |
mergeutil.checkunresolved(ms) |
8496
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1819 |
|
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1820 |
if editor: |
8994
4a1187d3cb00
commit: report modified subrepos in commit editor
Matt Mackall <mpm@selenic.com>
parents:
8954
diff
changeset
|
1821 |
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
|
1822 |
edited = (text != cctx._text) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1823 |
|
20765
f042d4b263f4
localrepo: save manually edited commit message as soon as possible
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20332
diff
changeset
|
1824 |
# 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
|
1825 |
# (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
|
1826 |
# 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
|
1827 |
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
|
1828 |
|
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1829 |
# 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
|
1830 |
if subs: |
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
1831 |
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
|
1832 |
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
|
1833 |
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
|
1834 |
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
|
1835 |
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
|
1836 |
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
|
1837 |
subrepo.writestate(self, newstate) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1838 |
|
10970
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1839 |
p1, p2 = self.dirstate.parents() |
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1840 |
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
|
1841 |
try: |
16683 | 1842 |
self.hook("precommit", throw=True, parent1=hookp1, |
1843 |
parent2=hookp2) |
|
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1844 |
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
|
1845 |
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
|
1846 |
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
|
1847 |
if edited: |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1848 |
self.ui.write( |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1849 |
_('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
|
1850 |
raise |
13357
b67867940bd1
bookmarks: move commit action into core
Matt Mackall <mpm@selenic.com>
parents:
13356
diff
changeset
|
1851 |
# update bookmarks, dirstate and mergestate |
16706
a270ec977ba6
bookmarks: delete divergent bookmarks on merge
David Soria Parra <dsp@php.net>
parents:
16705
diff
changeset
|
1852 |
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
|
1853 |
cctx.markcommitted(ret) |
8503
90f86a5330bb
commit: tidy up mergestate slightly
Matt Mackall <mpm@selenic.com>
parents:
8502
diff
changeset
|
1854 |
ms.reset() |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1855 |
tr.close() |
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1856 |
|
6710
0aa91f69a4c4
localrepo: extract _commitctx() from commit()
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1857 |
finally: |
26998
4414d500604f
localrepo: put bookmark move following commit in one transaction
Laurent Charignon <lcharignon@fb.com>
parents:
26996
diff
changeset
|
1858 |
lockmod.release(tr, lock, wlock) |
6710
0aa91f69a4c4
localrepo: extract _commitctx() from commit()
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1859 |
|
16680
d0e419b0f7de
tag: run commit hook when lock is released (issue3344)
Mads Kiilerich <mads@kiilerich.com>
parents:
16679
diff
changeset
|
1860 |
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
|
1861 |
# 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
|
1862 |
# 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
|
1863 |
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
|
1864 |
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
|
1865 |
parent2=parent2) |
16680
d0e419b0f7de
tag: run commit hook when lock is released (issue3344)
Mads Kiilerich <mads@kiilerich.com>
parents:
16679
diff
changeset
|
1866 |
self._afterlock(commithook) |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
1867 |
return ret |
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
1868 |
|
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
1869 |
@unfilteredmethod |
8496
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1870 |
def commitctx(self, ctx, error=False): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7072
diff
changeset
|
1871 |
"""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
|
1872 |
Revision information is passed via the context argument. |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7072
diff
changeset
|
1873 |
""" |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6712
diff
changeset
|
1874 |
|
22908
71570f310417
commit: remove dead initialization of 'lock'
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22907
diff
changeset
|
1875 |
tr = None |
8414
2348ce25849b
commitctx: use contexts more fully
Matt Mackall <mpm@selenic.com>
parents:
8412
diff
changeset
|
1876 |
p1, p2 = ctx.p1(), ctx.p2() |
8412
2bf4f380f6ab
commitctx: eliminate some variables
Matt Mackall <mpm@selenic.com>
parents:
8411
diff
changeset
|
1877 |
user = ctx.user() |
990 | 1878 |
|
8411
4d5916358abd
commit: move lots of commitctx outside of the repo lock
Matt Mackall <mpm@selenic.com>
parents:
8410
diff
changeset
|
1879 |
lock = self.lock() |
4d5916358abd
commit: move lots of commitctx outside of the repo lock
Matt Mackall <mpm@selenic.com>
parents:
8410
diff
changeset
|
1880 |
try: |
10881
a685011ed38e
localrepo: add desc parameter to transaction
Steve Borho <steve@borho.org>
parents:
10877
diff
changeset
|
1881 |
tr = self.transaction("commit") |
4970
30d4d8985dd8
transactions: avoid late tear-down (issue641)
Matt Mackall <mpm@selenic.com>
parents:
4917
diff
changeset
|
1882 |
trp = weakref.proxy(tr) |
151 | 1883 |
|
30566
46d2c8b23c33
localrepo: make it possible to reuse manifest when commiting context
Mateusz Kwapich <mitrandir@fb.com>
parents:
30496
diff
changeset
|
1884 |
if ctx.manifestnode(): |
46d2c8b23c33
localrepo: make it possible to reuse manifest when commiting context
Mateusz Kwapich <mitrandir@fb.com>
parents:
30496
diff
changeset
|
1885 |
# reuse an existing manifest revision |
46d2c8b23c33
localrepo: make it possible to reuse manifest when commiting context
Mateusz Kwapich <mitrandir@fb.com>
parents:
30496
diff
changeset
|
1886 |
mn = ctx.manifestnode() |
46d2c8b23c33
localrepo: make it possible to reuse manifest when commiting context
Mateusz Kwapich <mitrandir@fb.com>
parents:
30496
diff
changeset
|
1887 |
files = ctx.files() |
46d2c8b23c33
localrepo: make it possible to reuse manifest when commiting context
Mateusz Kwapich <mitrandir@fb.com>
parents:
30496
diff
changeset
|
1888 |
elif ctx.files(): |
30345
fa54f7ade491
manifest: remove manifest.add and add memmfctx.write
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
1889 |
m1ctx = p1.manifestctx() |
fa54f7ade491
manifest: remove manifest.add and add memmfctx.write
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
1890 |
m2ctx = p2.manifestctx() |
fa54f7ade491
manifest: remove manifest.add and add memmfctx.write
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
1891 |
mctx = m1ctx.copy() |
fa54f7ade491
manifest: remove manifest.add and add memmfctx.write
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
1892 |
|
fa54f7ade491
manifest: remove manifest.add and add memmfctx.write
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
1893 |
m = mctx.read() |
fa54f7ade491
manifest: remove manifest.add and add memmfctx.write
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
1894 |
m1 = m1ctx.read() |
fa54f7ade491
manifest: remove manifest.add and add memmfctx.write
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
1895 |
m2 = m2ctx.read() |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1896 |
|
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1897 |
# 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
|
1898 |
added = [] |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1899 |
changed = [] |
22907
a337f4b9b99d
commit: reduce scope of 'removed' variable
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22852
diff
changeset
|
1900 |
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
|
1901 |
linkrev = len(self) |
23749
a387b0390082
localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents:
23714
diff
changeset
|
1902 |
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
|
1903 |
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
|
1904 |
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
|
1905 |
try: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1906 |
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
|
1907 |
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
|
1908 |
removed.append(f) |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
22201
diff
changeset
|
1909 |
else: |
22910
4f2a5c7cdf78
commit: update file nodeid and flags in the same place
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22909
diff
changeset
|
1910 |
added.append(f) |
4f2a5c7cdf78
commit: update file nodeid and flags in the same place
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22909
diff
changeset
|
1911 |
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
|
1912 |
trp, changed) |
22942
03602f76deee
manifest: rename ambiguously-named set to setflag
Augie Fackler <raf@durin42.com>
parents:
22928
diff
changeset
|
1913 |
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
|
1914 |
except OSError as inst: |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1915 |
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
|
1916 |
raise |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
1917 |
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
|
1918 |
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
|
1919 |
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
|
1920 |
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
|
1921 |
raise |
220 | 1922 |
|
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1923 |
# update manifest |
23749
a387b0390082
localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents:
23714
diff
changeset
|
1924 |
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
|
1925 |
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
|
1926 |
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
|
1927 |
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
|
1928 |
del m[f] |
30345
fa54f7ade491
manifest: remove manifest.add and add memmfctx.write
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
1929 |
mn = mctx.write(trp, linkrev, |
fa54f7ade491
manifest: remove manifest.add and add memmfctx.write
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
1930 |
p1.manifestnode(), p2.manifestnode(), |
fa54f7ade491
manifest: remove manifest.add and add memmfctx.write
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
1931 |
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
|
1932 |
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
|
1933 |
else: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1934 |
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
|
1935 |
files = [] |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1936 |
|
8499
fb9b83df45f3
commit: move description trimming into changelog
Matt Mackall <mpm@selenic.com>
parents:
8498
diff
changeset
|
1937 |
# update changelog |
23749
a387b0390082
localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents:
23714
diff
changeset
|
1938 |
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
|
1939 |
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
|
1940 |
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
|
1941 |
trp, p1.node(), p2.node(), |
8412
2bf4f380f6ab
commitctx: eliminate some variables
Matt Mackall <mpm@selenic.com>
parents:
8411
diff
changeset
|
1942 |
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
|
1943 |
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
|
1944 |
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
|
1945 |
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
|
1946 |
# 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
|
1947 |
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
|
1948 |
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
|
1949 |
# 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
|
1950 |
# 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
|
1951 |
# 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
|
1952 |
# |
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
|
1953 |
# 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
|
1954 |
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
|
1955 |
tr.close() |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1956 |
return n |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1957 |
finally: |
11230
5116a077c3da
make transactions work on non-refcounted python implementations
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
11228
diff
changeset
|
1958 |
if tr: |
5116a077c3da
make transactions work on non-refcounted python implementations
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
11228
diff
changeset
|
1959 |
tr.release() |
8405
7cbf8fcd2453
commit: push repo lock down into _commitctx
Matt Mackall <mpm@selenic.com>
parents:
8404
diff
changeset
|
1960 |
lock.release() |
660
2c83350784c3
Move commit hook after commit completes
Matt Mackall <mpm@selenic.com>
parents:
659
diff
changeset
|
1961 |
|
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
1962 |
@unfilteredmethod |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1963 |
def destroying(self): |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1964 |
'''Inform the repository that nodes are about to be destroyed. |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1965 |
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
|
1966 |
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
|
1967 |
|
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1968 |
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
|
1969 |
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
|
1970 |
destroyed is imminent, the repo will be invalidated causing those |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1971 |
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
|
1972 |
completely. |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1973 |
''' |
18312
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1974 |
# 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
|
1975 |
# 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
|
1976 |
# causing those changes to disappear. |
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1977 |
if '_phasecache' in vars(self): |
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1978 |
self._phasecache.write() |
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
1979 |
|
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
1980 |
@unfilteredmethod |
18395
904b7109938e
destroyed: drop complex branchcache rebuilt logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18394
diff
changeset
|
1981 |
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
|
1982 |
'''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
|
1983 |
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
|
1984 |
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
|
1985 |
''' |
18221
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1986 |
# When one tries to: |
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1987 |
# 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
|
1988 |
# 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
|
1989 |
# |
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1990 |
# 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
|
1991 |
# 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
|
1992 |
# 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
|
1993 |
# 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
|
1994 |
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
|
1995 |
self._phasecache.write() |
18221
082d6929fd4d
localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents:
18219
diff
changeset
|
1996 |
|
32264
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
1997 |
# refresh all repository caches |
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
1998 |
self.updatecaches() |
18223
6d6d0248530b
destroyed: filter unknown before computing branchcache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18222
diff
changeset
|
1999 |
|
9151
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
2000 |
# 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
|
2001 |
# 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
|
2002 |
# 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
|
2003 |
# guarantees that "cachetip == currenttip" (comparing both rev |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
2004 |
# 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
|
2005 |
|
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
2006 |
# 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
|
2007 |
# 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
|
2008 |
# 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
|
2009 |
# 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
|
2010 |
self.invalidate() |
17324
9f94358f9f93
localrepo: clear the filecache on _rollback() and destroyed()
Idan Kamara <idankk86@gmail.com>
parents:
17306
diff
changeset
|
2011 |
|
6585 | 2012 |
def walk(self, match, node=None): |
3532 | 2013 |
''' |
2014 |
walk recursively through the directory tree or a given |
|
2015 |
changeset, finding all files matched by the match |
|
2016 |
function |
|
2017 |
''' |
|
32364
7cd1fa9dfd74
localrepo: mark walk convenience method as deprecated (API)
Augie Fackler <augie@google.com>
parents:
32350
diff
changeset
|
2018 |
self.ui.deprecwarn('use repo[node].walk instead of repo.walk', '4.3') |
6764 | 2019 |
return self[node].walk(match) |
3532 | 2020 |
|
6769 | 2021 |
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
|
2022 |
ignored=False, clean=False, unknown=False, |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
2023 |
listsubrepos=False): |
21596
83bbfb23cb24
localrepo: replace status method with a shim
Sean Farley <sean.michael.farley@gmail.com>
parents:
21591
diff
changeset
|
2024 |
'''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
|
2025 |
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
|
2026 |
listsubrepos) |
2661
5c10b7ed3411
status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2621
diff
changeset
|
2027 |
|
32814
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2028 |
def addpostdsstatus(self, ps): |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2029 |
"""Add a callback to run within the wlock, at the point at which status |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2030 |
fixups happen. |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2031 |
|
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2032 |
On status completion, callback(wctx, status) will be called with the |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2033 |
wlock held, unless the dirstate has changed from underneath or the wlock |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2034 |
couldn't be grabbed. |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2035 |
|
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2036 |
Callbacks should not capture and use a cached copy of the dirstate -- |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2037 |
it might change in the meanwhile. Instead, they should access the |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2038 |
dirstate via wctx.repo().dirstate. |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2039 |
|
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2040 |
This list is emptied out after each status run -- extensions should |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2041 |
make sure it adds to this list each time dirstate.status is called. |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2042 |
Extensions should also make sure they don't call this for statuses |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2043 |
that don't involve the dirstate. |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2044 |
""" |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2045 |
|
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2046 |
# The list is located here for uniqueness reasons -- it is actually |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2047 |
# managed by the workingctx, but that isn't unique per-repo. |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2048 |
self._postdsstatus.append(ps) |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2049 |
|
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2050 |
def postdsstatus(self): |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2051 |
"""Used by workingctx to get the list of post-dirstate-status hooks.""" |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2052 |
return self._postdsstatus |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2053 |
|
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2054 |
def clearpostdsstatus(self): |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2055 |
"""Used by workingctx to clear post-dirstate-status hooks.""" |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2056 |
del self._postdsstatus[:] |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
2057 |
|
8796
2bcef677a6c3
localrepo: remove 'closed' argument to heads(...) function
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
8731
diff
changeset
|
2058 |
def heads(self, start=None): |
30875
1791be8a95c5
localrepo: avoid unnecessary conversion from node to rev
Stanislau Hlebik <stash@fb.com>
parents:
30818
diff
changeset
|
2059 |
if start is None: |
30905
6037caa6a2f3
localrepo: cache self.changelog in local variable
Stanislau Hlebik <stash@fb.com>
parents:
30875
diff
changeset
|
2060 |
cl = self.changelog |
30906
72f25e17af9d
localrepo: avoid unnecessary sorting
Stanislau Hlebik <stash@fb.com>
parents:
30905
diff
changeset
|
2061 |
headrevs = reversed(cl.headrevs()) |
30905
6037caa6a2f3
localrepo: cache self.changelog in local variable
Stanislau Hlebik <stash@fb.com>
parents:
30875
diff
changeset
|
2062 |
return [cl.node(rev) for rev in headrevs] |
30875
1791be8a95c5
localrepo: avoid unnecessary conversion from node to rev
Stanislau Hlebik <stash@fb.com>
parents:
30818
diff
changeset
|
2063 |
|
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
|
2064 |
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
|
2065 |
# 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
|
2066 |
return sorted(heads, key=self.changelog.rev, reverse=True) |
222 | 2067 |
|
8694
ca8d05e1f1d1
localrepo: set heads and branchheads to be closed=False by default
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
8680
diff
changeset
|
2068 |
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
|
2069 |
'''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
|
2070 |
|
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
2071 |
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
|
2072 |
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
|
2073 |
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
|
2074 |
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
|
2075 |
''' |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
2076 |
if branch is None: |
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
2077 |
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
|
2078 |
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
|
2079 |
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
|
2080 |
return [] |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
2081 |
# 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
|
2082 |
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
|
2083 |
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
|
2084 |
# 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
|
2085 |
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
|
2086 |
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
|
2087 |
return bheads |
4648
8e503fa54d2d
Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents:
4635
diff
changeset
|
2088 |
|
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2089 |
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
|
2090 |
if not nodes: |
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
2091 |
nodes = [self.changelog.tip()] |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2092 |
b = [] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2093 |
for n in nodes: |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2094 |
t = n |
14494
1ffeeb91c55d
check-code: flag 0/1 used as constant Boolean expression
Martin Geisler <mg@lazybytes.net>
parents:
14482
diff
changeset
|
2095 |
while True: |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2096 |
p = self.changelog.parents(n) |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2097 |
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
|
2098 |
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
|
2099 |
break |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2100 |
n = p[0] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2101 |
return b |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2102 |
|
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2103 |
def between(self, pairs): |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2104 |
r = [] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2105 |
|
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2106 |
for top, bottom in pairs: |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2107 |
n, l, i = top, [], 0 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2108 |
f = 1 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2109 |
|
7708
a32847fa0df0
wire protocol: avoid infinite loop (issue1483)
Matt Mackall <mpm@selenic.com>
parents:
7564
diff
changeset
|
2110 |
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
|
2111 |
p = self.changelog.parents(n)[0] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2112 |
if i == f: |
575 | 2113 |
l.append(n) |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2114 |
f = f * 2 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2115 |
n = p |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2116 |
i += 1 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2117 |
|
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2118 |
r.append(l) |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2119 |
|
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2120 |
return r |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
2121 |
|
20924
e10000369b47
push: pass a `pushoperation` object to localrepo.checkpush
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20884
diff
changeset
|
2122 |
def checkpush(self, pushop): |
13327
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
2123 |
"""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
|
2124 |
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
|
2125 |
command. |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
2126 |
""" |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
2127 |
pass |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
2128 |
|
21043
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
2129 |
@unfilteredpropertycache |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
2130 |
def prepushoutgoinghooks(self): |
28876
79b8f052ee51
localrepo: refactor prepushoutgoinghook to take a pushop
Mads Kiilerich <madski@unity3d.com>
parents:
28814
diff
changeset
|
2131 |
"""Return util.hooks consists of a pushop with repo, remote, outgoing |
79b8f052ee51
localrepo: refactor prepushoutgoinghook to take a pushop
Mads Kiilerich <madski@unity3d.com>
parents:
28814
diff
changeset
|
2132 |
methods, which are called before pushing changesets. |
21043
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
2133 |
""" |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
2134 |
return util.hooks() |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
2135 |
|
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
2136 |
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
|
2137 |
try: |
24824
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
2138 |
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
|
2139 |
hookargs = {} |
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
2140 |
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
|
2141 |
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
|
2142 |
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
|
2143 |
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
|
2144 |
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
|
2145 |
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
|
2146 |
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
|
2147 |
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
|
2148 |
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
|
2149 |
if exc.hint: |
53a65929ef1f
pushkey: gracefully handle prepushkey hook failure (issue4455)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23129
diff
changeset
|
2150 |
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
|
2151 |
return False |
17293
d3f84ccc5495
pushkey: add more verbose debug output regarding pushkey
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17252
diff
changeset
|
2152 |
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
|
2153 |
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
|
2154 |
def runhook(): |
915ac9403e13
pushkey: run hook after the lock release
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23630
diff
changeset
|
2155 |
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
|
2156 |
ret=ret) |
915ac9403e13
pushkey: run hook after the lock release
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23630
diff
changeset
|
2157 |
self._afterlock(runhook) |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2158 |
return ret |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
2159 |
|
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
2160 |
def listkeys(self, namespace): |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2161 |
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
|
2162 |
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
|
2163 |
values = pushkey.list(self, namespace) |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2164 |
self.hook('listkeys', namespace=namespace, values=values) |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2165 |
return values |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
2166 |
|
14048
58e58406ed19
wireproto: add test for new optional arg missing on server
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14036
diff
changeset
|
2167 |
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
|
2168 |
'''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
|
2169 |
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
|
2170 |
|
14529
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
2171 |
def savecommitmessage(self, text): |
23852
99e125626352
localrepo: remove all internal uses of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23775
diff
changeset
|
2172 |
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
|
2173 |
try: |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
2174 |
fp.write(text) |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
2175 |
finally: |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
2176 |
fp.close() |
18054
b35e3364f94a
check-code: there must also be whitespace between ')' and operator
Mads Kiilerich <madski@unity3d.com>
parents:
18044
diff
changeset
|
2177 |
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
|
2178 |
|
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
2179 |
# 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
|
2180 |
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
|
2181 |
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
|
2182 |
def a(): |
18952
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
2183 |
for vfs, src, dest in renamefiles: |
31550 | 2184 |
# if src and dest refer to a same file, vfs.rename is a no-op, |
2185 |
# leaving both src and dest on disk. delete dest to make sure |
|
2186 |
# the rename couldn't be such a no-op. |
|
2187 |
vfs.tryunlink(dest) |
|
31209
dd2364f5180a
localrepo: handle rename with hardlinks properly
Jun Wu <quark@fb.com>
parents:
31148
diff
changeset
|
2188 |
try: |
18952
8086b530e2ac
localrepo: use "vfs.rename()" instead of "util.rename()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18951
diff
changeset
|
2189 |
vfs.rename(src, dest) |
16441
9dd10a574af2
localrepo: do not complain about missing journal files
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
16426
diff
changeset
|
2190 |
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
|
2191 |
pass |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
2192 |
return a |
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
2193 |
|
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2194 |
def undoname(fn): |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2195 |
base, name = os.path.split(fn) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2196 |
assert name.startswith('journal') |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2197 |
return os.path.join(base, name.replace('journal', 'undo', 1)) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2198 |
|
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
2199 |
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
|
2200 |
return localrepository(ui, util.urllocalpath(path), create) |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3164
diff
changeset
|
2201 |
|
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
2202 |
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
|
2203 |
return True |
28164
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2204 |
|
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2205 |
def newreporequirements(repo): |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2206 |
"""Determine the set of requirements for a new local repository. |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2207 |
|
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2208 |
Extensions can wrap this function to specify custom requirements for |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2209 |
new repositories. |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2210 |
""" |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2211 |
ui = repo.ui |
32291
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
32267
diff
changeset
|
2212 |
requirements = {'revlogv1'} |
33247
4d5d493ea54a
configitems: register the 'format.usestore' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33245
diff
changeset
|
2213 |
if ui.configbool('format', 'usestore'): |
28164
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2214 |
requirements.add('store') |
33245
28e8983d9ed7
configitems: register the 'format.usefncache' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33237
diff
changeset
|
2215 |
if ui.configbool('format', 'usefncache'): |
28164
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2216 |
requirements.add('fncache') |
33237
7043e67cc9b2
configitems: register the 'format.dotencode' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33235
diff
changeset
|
2217 |
if ui.configbool('format', 'dotencode'): |
28164
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2218 |
requirements.add('dotencode') |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2219 |
|
30818
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
2220 |
compengine = ui.config('experimental', 'format.compression', 'zlib') |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
2221 |
if compengine not in util.compengines: |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
2222 |
raise error.Abort(_('compression engine %s defined by ' |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
2223 |
'experimental.format.compression not available') % |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
2224 |
compengine, |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
2225 |
hint=_('run "hg debuginstall" to list available ' |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
2226 |
'compression engines')) |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
2227 |
|
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
2228 |
# zlib is the historical default and doesn't need an explicit requirement. |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
2229 |
if compengine != 'zlib': |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
2230 |
requirements.add('exp-compression-%s' % compengine) |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
2231 |
|
28164
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2232 |
if scmutil.gdinitconfig(ui): |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2233 |
requirements.add('generaldelta') |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2234 |
if ui.configbool('experimental', 'treemanifest', False): |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2235 |
requirements.add('treemanifest') |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2236 |
if ui.configbool('experimental', 'manifestv2', False): |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2237 |
requirements.add('manifestv2') |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2238 |
|
32697
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
2239 |
revlogv2 = ui.config('experimental', 'revlogv2') |
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
2240 |
if revlogv2 == 'enable-unstable-format-and-corrupt-my-data': |
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
2241 |
requirements.remove('revlogv1') |
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
2242 |
# generaldelta is implied by revlogv2. |
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
2243 |
requirements.discard('generaldelta') |
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
2244 |
requirements.add(REVLOGV2_REQUIREMENT) |
19b9fc40cc51
revlog: skeleton support for version 2 revlogs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32660
diff
changeset
|
2245 |
|
28164
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
2246 |
return requirements |