Mercurial > hg
annotate mercurial/localrepo.py @ 52234:6c777d25e8a6 stable
wheel: explicitly list built architecture
This will help also build the ARM64 wheel once the dependencies are installed.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sun, 10 Nov 2024 02:10:56 +0100 |
parents | 513b413702e8 |
children |
rev | line source |
---|---|
1089 | 1 # localrepo.py - read/write repository class for mercurial |
48466
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
2 # coding: utf-8 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
3 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
46794
diff
changeset
|
4 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com> |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
5 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8210
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
10263 | 7 # 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
|
8 |
51863
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51803
diff
changeset
|
9 from __future__ import annotations |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
10 |
45418
4111954cf86d
localrepo: use functools.wraps() in unfilteredmethod decorator
Augie Fackler <raf@durin42.com>
parents:
45386
diff
changeset
|
11 import functools |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
12 import os |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
13 import random |
50070
c8f32aa80dca
rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50069
diff
changeset
|
14 import re |
37630
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
15 import sys |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
16 import time |
51895
ee7e106b372b
typing: make the localrepo classes known to pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
51863
diff
changeset
|
17 import typing |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
18 import weakref |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
19 |
48835
a0da5075bca3
cleanup: directly use concurrent.futures instead of via pycompat
Augie Fackler <augie@google.com>
parents:
48793
diff
changeset
|
20 from concurrent import futures |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
21 from typing import ( |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
22 Optional, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
23 ) |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
24 |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
25 from .i18n import _ |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
26 from .node import ( |
39958
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
27 bin, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
28 hex, |
39958
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
29 nullrev, |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46713
diff
changeset
|
30 sha1nodeconstants, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
31 short, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
32 ) |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
33 from . import ( |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
34 bookmarks, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
35 branchmap, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
36 bundle2, |
45785
80f32ec8653a
clonebundle: move the manifest filename to a constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45783
diff
changeset
|
37 bundlecaches, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
38 changegroup, |
31111
95ec3ad62f62
color: initialize color for the localrepo ui
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31054
diff
changeset
|
39 color, |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45202
diff
changeset
|
40 commit, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
41 context, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
42 dirstate, |
34097
f7d41b85bbf6
changegroup: replace changegroupsubset with makechangegroup
Durham Goode <durham@fb.com>
parents:
33803
diff
changeset
|
43 discovery, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
44 encoding, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
45 error, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
46 exchange, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
47 extensions, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
48 filelog, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
49 hook, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
50 lock as lockmod, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
51 match as matchmod, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44852
diff
changeset
|
52 mergestate as mergestatemod, |
30496
a90867a22daf
localrepo: refer to checkunresolved by its new name
Augie Fackler <augie@google.com>
parents:
30492
diff
changeset
|
53 mergeutil, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
54 namespaces, |
36471
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
55 narrowspec, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
56 obsolete, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
57 pathutil, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
58 phases, |
50759
f0ae403bf704
configitems: use standard "dynamicdefault" approach in edge case
Raphaël Gomès <rgomes@octobus.net>
parents:
50699
diff
changeset
|
59 policy, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
60 pushkey, |
31508
590319c07259
localrepo: ensure transaction id is fully bytes on py3
Augie Fackler <augie@google.com>
parents:
31476
diff
changeset
|
61 pycompat, |
44243
238790674d69
config: add a function in `rcutil` to abstract HGRCSKIPREPO
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44124
diff
changeset
|
62 rcutil, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
63 repoview, |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
64 requirements as requirementsmod, |
46310
fc2d5c0aed7f
persistent-nodemap: add a "warn" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46309
diff
changeset
|
65 revlog, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
66 revset, |
31024
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30989
diff
changeset
|
67 revsetlang, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
68 scmutil, |
33373
fb320398a21c
dirstate: expose a sparse matcher on dirstate (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33336
diff
changeset
|
69 sparse, |
39697
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
70 store as storemod, |
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35896
diff
changeset
|
71 subrepoutil, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
72 tags as tagsmod, |
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
73 transaction, |
31054
59e69ed81776
localrepo: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31025
diff
changeset
|
74 txnutil, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
75 util, |
31231
0a38a313033e
vfs: use 'vfs' module directly in 'mercurial.localrepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31209
diff
changeset
|
76 vfs as vfsmod, |
46902
631001150e13
narrow: add capabilities for local repos, not just remote peers
Charles Chamberlain <cchamberlain@janestreet.com>
parents:
46888
diff
changeset
|
77 wireprototypes, |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
78 ) |
42813
268662aac075
interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42712
diff
changeset
|
79 |
51901
f0e07efc199f
rev-branch-cache: move the code in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51895
diff
changeset
|
80 from .branching import ( |
f0e07efc199f
rev-branch-cache: move the code in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51895
diff
changeset
|
81 rev_cache as rev_branch_cache, |
f0e07efc199f
rev-branch-cache: move the code in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51895
diff
changeset
|
82 ) |
f0e07efc199f
rev-branch-cache: move the code in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51895
diff
changeset
|
83 |
42813
268662aac075
interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42712
diff
changeset
|
84 from .interfaces import ( |
268662aac075
interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42712
diff
changeset
|
85 repository, |
268662aac075
interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42712
diff
changeset
|
86 ) |
268662aac075
interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42712
diff
changeset
|
87 |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36952
diff
changeset
|
88 from .utils import ( |
44060
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
44052
diff
changeset
|
89 hashutil, |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
90 procutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36952
diff
changeset
|
91 stringutil, |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46902
diff
changeset
|
92 urlutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36952
diff
changeset
|
93 ) |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
94 |
46607
e9901d01d135
revlog: add a mechanism to verify expected file position before appending
Kyle Lippincott <spectral@google.com>
parents:
46414
diff
changeset
|
95 from .revlogutils import ( |
e9901d01d135
revlog: add a mechanism to verify expected file position before appending
Kyle Lippincott <spectral@google.com>
parents:
46414
diff
changeset
|
96 concurrency_checker as revlogchecker, |
e9901d01d135
revlog: add a mechanism to verify expected file position before appending
Kyle Lippincott <spectral@google.com>
parents:
46414
diff
changeset
|
97 constants as revlogconst, |
47085
3aab2330b7d3
sidedata: move sidedata-related utils to the dedicated module
Raphaël Gomès <rgomes@octobus.net>
parents:
47083
diff
changeset
|
98 sidedata as sidedatamod, |
46607
e9901d01d135
revlog: add a mechanism to verify expected file position before appending
Kyle Lippincott <spectral@google.com>
parents:
46414
diff
changeset
|
99 ) |
39506
b66ea3fc3a86
sparse-revlog: set max delta chain length to on thousand
Boris Feld <boris.feld@octobus.net>
parents:
39312
diff
changeset
|
100 |
27522
798535853345
localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27319
diff
changeset
|
101 release = lockmod.release |
28883
032c4c2f802a
pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents:
28876
diff
changeset
|
102 urlerr = util.urlerr |
032c4c2f802a
pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents:
28876
diff
changeset
|
103 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
|
104 |
50195
11e6eee4b063
transaction: use the standard transaction mechanism to backup branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50194
diff
changeset
|
105 RE_SKIP_DIRSTATE_ROLLBACK = re.compile( |
11e6eee4b063
transaction: use the standard transaction mechanism to backup branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50194
diff
changeset
|
106 b"^((dirstate|narrowspec.dirstate).*|branch$)" |
11e6eee4b063
transaction: use the standard transaction mechanism to backup branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50194
diff
changeset
|
107 ) |
50070
c8f32aa80dca
rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50069
diff
changeset
|
108 |
33277
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
109 # 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
|
110 # - '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
|
111 # - '' 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
|
112 _cachedfiles = set() |
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
113 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
114 |
33176
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
115 class _basefilecache(scmutil.filecache): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
116 """All filecache usage on repo are done for logic that should be unfiltered""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
117 |
18014
a39fe76c4c65
clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18013
diff
changeset
|
118 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
|
119 if repo is None: |
36fbd72c2f39
scmutil: allow access to filecache descriptor on class
Martijn Pieters <mjpieters@fb.com>
parents:
29352
diff
changeset
|
120 return self |
40424
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
121 # proxy to unfiltered __dict__ since filtered repo has no entry |
40423
597bb5a6867f
filecache: use try-except for faster __dict__ lookup
Yuya Nishihara <yuya@tcha.org>
parents:
40390
diff
changeset
|
122 unfi = repo.unfiltered() |
597bb5a6867f
filecache: use try-except for faster __dict__ lookup
Yuya Nishihara <yuya@tcha.org>
parents:
40390
diff
changeset
|
123 try: |
597bb5a6867f
filecache: use try-except for faster __dict__ lookup
Yuya Nishihara <yuya@tcha.org>
parents:
40390
diff
changeset
|
124 return unfi.__dict__[self.sname] |
597bb5a6867f
filecache: use try-except for faster __dict__ lookup
Yuya Nishihara <yuya@tcha.org>
parents:
40390
diff
changeset
|
125 except KeyError: |
597bb5a6867f
filecache: use try-except for faster __dict__ lookup
Yuya Nishihara <yuya@tcha.org>
parents:
40390
diff
changeset
|
126 pass |
597bb5a6867f
filecache: use try-except for faster __dict__ lookup
Yuya Nishihara <yuya@tcha.org>
parents:
40390
diff
changeset
|
127 return super(_basefilecache, self).__get__(unfi, type) |
40424
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
128 |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
129 def set(self, repo, value): |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
130 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
|
131 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
132 |
33176
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
133 class repofilecache(_basefilecache): |
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
134 """filecache for files in .hg but outside of .hg/store""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
135 |
33277
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
136 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
|
137 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
|
138 for path in paths: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
139 _cachedfiles.add((path, b'plain')) |
33277
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
140 |
33176
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
141 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
|
142 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
|
143 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
144 |
33176
edb7f628ef8b
localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32895
diff
changeset
|
145 class storecache(_basefilecache): |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
146 """filecache for files in the store""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
147 |
33277
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
148 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
|
149 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
|
150 for path in paths: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
151 _cachedfiles.add((path, b'')) |
33277
4470508eb6f2
localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33260
diff
changeset
|
152 |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
153 def join(self, obj, fname): |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
154 return obj.sjoin(fname) |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16144
diff
changeset
|
155 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
156 |
48039
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
157 class changelogcache(storecache): |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
158 """filecache for the changelog""" |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
159 |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
160 def __init__(self): |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
161 super(changelogcache, self).__init__() |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
162 _cachedfiles.add((b'00changelog.i', b'')) |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
163 _cachedfiles.add((b'00changelog.n', b'')) |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
164 |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
165 def tracked_paths(self, obj): |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
166 paths = [self.join(obj, b'00changelog.i')] |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
167 if obj.store.opener.options.get(b'persistent-nodemap', False): |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
168 paths.append(self.join(obj, b'00changelog.n')) |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
169 return paths |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
170 |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
171 |
48040
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
172 class manifestlogcache(storecache): |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
173 """filecache for the manifestlog""" |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
174 |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
175 def __init__(self): |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
176 super(manifestlogcache, self).__init__() |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
177 _cachedfiles.add((b'00manifest.i', b'')) |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
178 _cachedfiles.add((b'00manifest.n', b'')) |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
179 |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
180 def tracked_paths(self, obj): |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
181 paths = [self.join(obj, b'00manifest.i')] |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
182 if obj.store.opener.options.get(b'persistent-nodemap', False): |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
183 paths.append(self.join(obj, b'00manifest.n')) |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
184 return paths |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
185 |
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
186 |
42323
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
187 class mixedrepostorecache(_basefilecache): |
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
188 """filecache for a mix files in .hg/store and outside""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
189 |
42323
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
190 def __init__(self, *pathsandlocations): |
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
191 # scmutil.filecache only uses the path for passing back into our |
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
192 # join(), so we can safely pass a list of paths and locations |
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
193 super(mixedrepostorecache, self).__init__(*pathsandlocations) |
42439
aae93201f758
mixedrepostorecache: fix a silly redundant updating of set
Martin von Zweigbergk <martinvonz@google.com>
parents:
42422
diff
changeset
|
194 _cachedfiles.update(pathsandlocations) |
42323
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
195 |
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
196 def join(self, obj, fnameandlocation): |
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
197 fname, location = fnameandlocation |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
198 if location == b'plain': |
42323
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
199 return obj.vfs.join(fname) |
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
200 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
201 if location != b'': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
202 raise error.ProgrammingError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
203 b'unexpected location: %s' % location |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
204 ) |
42323
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
205 return obj.sjoin(fname) |
c2b83c957621
localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
206 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
207 |
33382
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
208 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
|
209 """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
|
210 |
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
211 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
|
212 """ |
b107a7660f4e
localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33373
diff
changeset
|
213 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
|
214 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
|
215 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
|
216 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
|
217 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
218 |
29104
b207653ada10
localrepo: remove a couple of local type aliases
Augie Fackler <augie@google.com>
parents:
29075
diff
changeset
|
219 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
|
220 """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
|
221 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
222 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
|
223 unfi = repo.unfiltered() |
9789670992d6
repoview: have unfilteredpropertycache using the underlying cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19515
diff
changeset
|
224 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
|
225 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
|
226 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
|
227 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
228 |
29104
b207653ada10
localrepo: remove a couple of local type aliases
Augie Fackler <augie@google.com>
parents:
29075
diff
changeset
|
229 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
|
230 """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
|
231 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
232 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
|
233 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
|
234 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
235 |
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
236 def hasunfilteredcache(repo, name): |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18520
diff
changeset
|
237 """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
|
238 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
|
239 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
240 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
241 def unfilteredmethod(orig): |
17994
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
242 """decorate method that always need to be run on unfiltered version""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
243 |
45418
4111954cf86d
localrepo: use functools.wraps() in unfilteredmethod decorator
Augie Fackler <raf@durin42.com>
parents:
45386
diff
changeset
|
244 @functools.wraps(orig) |
17994
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
245 def wrapper(repo, *args, **kwargs): |
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
246 return orig(repo.unfiltered(), *args, **kwargs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
247 |
17994
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
248 return wrapper |
8899bf48116a
clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17993
diff
changeset
|
249 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
250 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
251 moderncaps = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
252 b'lookup', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
253 b'branchmap', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
254 b'pushkey', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
255 b'known', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
256 b'getbundle', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
257 b'unbundle', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
258 } |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
259 legacycaps = moderncaps.union({b'changegroupsubset'}) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
260 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
261 |
52075
ff4562ed9ed7
localrepo: drop the CamelCase name for `localrepo.localcommandexecutor`
Matt Harbison <matt_harbison@yahoo.com>
parents:
51901
diff
changeset
|
262 class localcommandexecutor: # (repository.ipeercommandexecutor) |
37630
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
263 def __init__(self, peer): |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
264 self._peer = peer |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
265 self._sent = False |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
266 self._closed = False |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
267 |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
268 def __enter__(self): |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
269 return self |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
270 |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
271 def __exit__(self, exctype, excvalue, exctb): |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
272 self.close() |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
273 |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
274 def callcommand(self, command, args): |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
275 if self._sent: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
276 raise error.ProgrammingError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
277 b'callcommand() cannot be used after sendcommands()' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
278 ) |
37630
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
279 |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
280 if self._closed: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
281 raise error.ProgrammingError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
282 b'callcommand() cannot be used after close()' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
283 ) |
37630
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
284 |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
285 # We don't need to support anything fancy. Just call the named |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
286 # method on the peer and return a resolved future. |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
287 fn = getattr(self._peer, pycompat.sysstr(command)) |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
288 |
48835
a0da5075bca3
cleanup: directly use concurrent.futures instead of via pycompat
Augie Fackler <augie@google.com>
parents:
48793
diff
changeset
|
289 f = futures.Future() |
37630
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
290 |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
291 try: |
37670
719b8cb22936
localrepo: add some overlooked strkwargs love for py3
Augie Fackler <augie@google.com>
parents:
37669
diff
changeset
|
292 result = fn(**pycompat.strkwargs(args)) |
37630
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
293 except Exception: |
37669
1cb54e6193a6
py3: paper over differences in future exception handling
Augie Fackler <augie@google.com>
parents:
37650
diff
changeset
|
294 pycompat.future_set_exception_info(f, sys.exc_info()[1:]) |
37630
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
295 else: |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
296 f.set_result(result) |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
297 |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
298 return f |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
299 |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
300 def sendcommands(self): |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
301 self._sent = True |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
302 |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
303 def close(self): |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
304 self._closed = True |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
305 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
306 |
52076
66579606f677
localrepo: drop the CamelCase name for `localrepo.localpeer`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52075
diff
changeset
|
307 class localpeer(repository.peer): # (repository.ipeercommands) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
308 '''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
|
309 |
50440
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50324
diff
changeset
|
310 def __init__(self, repo, caps=None, path=None, remotehidden=False): |
52076
66579606f677
localrepo: drop the CamelCase name for `localrepo.localpeer`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52075
diff
changeset
|
311 super(localpeer, self).__init__( |
50440
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50324
diff
changeset
|
312 repo.ui, path=path, remotehidden=remotehidden |
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50324
diff
changeset
|
313 ) |
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50324
diff
changeset
|
314 |
31412
ecc87acb4d10
localrepo: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31373
diff
changeset
|
315 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
|
316 caps = moderncaps.copy() |
50441
b15b6e2c3309
hidden: add support for --remote-hidden to localpeer
Manuel Jacob <me@manueljacob.de>
parents:
50440
diff
changeset
|
317 if remotehidden: |
b15b6e2c3309
hidden: add support for --remote-hidden to localpeer
Manuel Jacob <me@manueljacob.de>
parents:
50440
diff
changeset
|
318 self._repo = repo.filtered(b'served.hidden') |
b15b6e2c3309
hidden: add support for --remote-hidden to localpeer
Manuel Jacob <me@manueljacob.de>
parents:
50440
diff
changeset
|
319 else: |
b15b6e2c3309
hidden: add support for --remote-hidden to localpeer
Manuel Jacob <me@manueljacob.de>
parents:
50440
diff
changeset
|
320 self._repo = repo.filtered(b'served') |
46713
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
321 if repo._wanted_sidedata: |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
322 formatted = bundle2.format_remote_wanted_sidedata(repo) |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
323 caps.add(b'exp-wanted-sidedata=' + formatted) |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
324 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
325 self._caps = repo._restrictcapabilities(caps) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
326 |
33803
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
327 # Begin of _basepeer interface. |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
328 |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
329 def url(self): |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
330 return self._repo.url() |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
331 |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
332 def local(self): |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
333 return self._repo |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
334 |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
335 def canpush(self): |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
336 return True |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
337 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
338 def close(self): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
339 self._repo.close() |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
340 |
33803
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
341 # End of _basepeer interface. |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
342 |
33803
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
343 # Begin of _basewirecommands interface. |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
344 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
345 def branchmap(self): |
18279
679767c38cb5
clfilter: drop extra filtering in localpeer
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18278
diff
changeset
|
346 return self._repo.branchmap() |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
347 |
33803
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
348 def capabilities(self): |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
349 return self._caps |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
350 |
50699
2aaabd8f4471
clone-bundle: rename the methods and wireprotole command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50673
diff
changeset
|
351 def get_cached_bundle_inline(self, path): |
50666
60f9602b413e
clonebundles: add support for inline (streaming) clonebundles
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
50586
diff
changeset
|
352 # not needed with local peer |
60f9602b413e
clonebundles: add support for inline (streaming) clonebundles
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
50586
diff
changeset
|
353 raise NotImplementedError |
60f9602b413e
clonebundles: add support for inline (streaming) clonebundles
Mathias De Mare <mathias.de_mare@nokia.com>
parents:
50586
diff
changeset
|
354 |
37649
a168799687e5
wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37646
diff
changeset
|
355 def clonebundles(self): |
50544
e6948aafda6f
clonebundles: move the manifest reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50441
diff
changeset
|
356 return bundlecaches.get_manifest(self._repo) |
37649
a168799687e5
wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37646
diff
changeset
|
357 |
33803
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
358 def debugwireargs(self, one, two, three=None, four=None, five=None): |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
359 """Used to test argument passing over the wire""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
360 return b"%s %s %s %s %s" % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
361 one, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
362 two, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
363 pycompat.bytestr(three), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
364 pycompat.bytestr(four), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
365 pycompat.bytestr(five), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
366 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
367 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
368 def getbundle( |
46711
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents:
46705
diff
changeset
|
369 self, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents:
46705
diff
changeset
|
370 source, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents:
46705
diff
changeset
|
371 heads=None, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents:
46705
diff
changeset
|
372 common=None, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents:
46705
diff
changeset
|
373 bundlecaps=None, |
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents:
46705
diff
changeset
|
374 remote_sidedata=None, |
51284
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
375 **kwargs, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
376 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
377 chunks = exchange.getbundlechunks( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
378 self._repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
379 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
380 heads=heads, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
381 common=common, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
382 bundlecaps=bundlecaps, |
46711
a41565bef69f
changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents:
46705
diff
changeset
|
383 remote_sidedata=remote_sidedata, |
51284
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
384 **kwargs, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
385 )[1] |
30187
3e86261bf110
exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29975
diff
changeset
|
386 cb = util.chunkbuffer(chunks) |
3e86261bf110
exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29975
diff
changeset
|
387 |
32149
9a9d54ae9963
localrepo: reuse exchange.bundle2requested()
Martin von Zweigbergk <martinvonz@google.com>
parents:
32121
diff
changeset
|
388 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
|
389 # 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
|
390 # 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
|
391 # 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
|
392 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
|
393 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
394 return changegroup.getunbundler(b'01', cb, None) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
395 |
33803
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
396 def heads(self): |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
397 return self._repo.heads() |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
398 |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
399 def known(self, nodes): |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
400 return self._repo.known(nodes) |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
401 |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
402 def listkeys(self, namespace): |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
403 return self._repo.listkeys(namespace) |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
404 |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
405 def lookup(self, key): |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
406 return self._repo.lookup(key) |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
407 |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
408 def pushkey(self, namespace, key, old, new): |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
409 return self._repo.pushkey(namespace, key, old, new) |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
410 |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
411 def stream_out(self): |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
412 raise error.Abort(_(b'cannot perform stream clone against local peer')) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
413 |
37646
72e26319f3b8
wireproto: use command executor for unbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37635
diff
changeset
|
414 def unbundle(self, bundle, heads, url): |
20969
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
415 """apply a bundle on a repo |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
416 |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
417 This function handles the repo locking itself.""" |
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
418 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
|
419 try: |
37646
72e26319f3b8
wireproto: use command executor for unbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37635
diff
changeset
|
420 bundle = exchange.readbundle(self.ui, bundle, None) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
421 ret = exchange.unbundle(self._repo, bundle, heads, b'push', url) |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50919
diff
changeset
|
422 if hasattr(ret, 'getchunks'): |
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
|
423 # 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
|
424 # 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
|
425 # 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
|
426 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
|
427 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
|
428 return ret |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
429 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
|
430 # 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
|
431 # 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
|
432 # 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
|
433 # 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
|
434 # |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
435 # 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
|
436 # issue4594 |
d99d7e3f5cda
bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24798
diff
changeset
|
437 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
|
438 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
|
439 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
|
440 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
|
441 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
|
442 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
|
443 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
|
444 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
|
445 raise |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
446 except error.PushRaced as exc: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
447 raise error.ResponseError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
448 _(b'push failed:'), stringutil.forcebytestr(exc) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
449 ) |
20969
7a679918ee2b
localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20963
diff
changeset
|
450 |
33803
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
451 # End of _basewirecommands interface. |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
452 |
33803
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
453 # Begin of peer interface. |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
454 |
37630
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
455 def commandexecutor(self): |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
456 return localcommandexecutor(self) |
e1b32dc4646c
wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
457 |
33803
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
458 # End of peer interface. |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
459 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
460 |
52077
36be02a749e0
localrepo: drop the CamelCase name for `localrepo.locallegacypeer`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52076
diff
changeset
|
461 class locallegacypeer(localpeer): # (repository.ipeerlegacycommands) |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
462 """peer extension which implements legacy methods too; used for tests with |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
463 restricted capabilities""" |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
464 |
50440
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50324
diff
changeset
|
465 def __init__(self, repo, path=None, remotehidden=False): |
52077
36be02a749e0
localrepo: drop the CamelCase name for `localrepo.locallegacypeer`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52076
diff
changeset
|
466 super(locallegacypeer, self).__init__( |
50440
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50324
diff
changeset
|
467 repo, caps=legacycaps, path=path, remotehidden=remotehidden |
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50324
diff
changeset
|
468 ) |
33803
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
469 |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
470 # Begin of baselegacywirecommands interface. |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
471 |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
472 def between(self, pairs): |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
473 return self._repo.between(pairs) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
474 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
475 def branches(self, nodes): |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
476 return self._repo.branches(nodes) |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
477 |
37635
cc8c06835097
wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37633
diff
changeset
|
478 def changegroup(self, nodes, source): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
479 outgoing = discovery.outgoing( |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45106
diff
changeset
|
480 self._repo, missingroots=nodes, ancestorsof=self._repo.heads() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
481 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
482 return changegroup.makechangegroup(self._repo, outgoing, b'01', source) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
483 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
484 def changegroupsubset(self, bases, heads, source): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
485 outgoing = discovery.outgoing( |
45144
c93dd9d9f1e6
discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents:
45106
diff
changeset
|
486 self._repo, missingroots=bases, ancestorsof=heads |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
487 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
488 return changegroup.makechangegroup(self._repo, outgoing, b'01', source) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
489 |
33803
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
490 # End of baselegacywirecommands interface. |
707750e5310b
localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33737
diff
changeset
|
491 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
492 |
37135
ecac0006b90e
localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37120
diff
changeset
|
493 # Functions receiving (ui, features) that extensions can register to impact |
ecac0006b90e
localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37120
diff
changeset
|
494 # the ability to load repositories with custom requirements. Only |
ecac0006b90e
localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37120
diff
changeset
|
495 # functions defined in loaded extensions are called. |
ecac0006b90e
localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37120
diff
changeset
|
496 # |
ecac0006b90e
localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37120
diff
changeset
|
497 # The function receives a set of requirement strings that the repository |
ecac0006b90e
localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37120
diff
changeset
|
498 # is capable of opening. Functions will typically add elements to the |
ecac0006b90e
localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37120
diff
changeset
|
499 # set to reflect that the extension knows how to handle that requirements. |
ecac0006b90e
localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37120
diff
changeset
|
500 featuresetupfuncs = set() |
ecac0006b90e
localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37120
diff
changeset
|
501 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
502 |
45353
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
503 def _getsharedvfs(hgvfs, requirements): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
504 """returns the vfs object pointing to root of shared source |
45353
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
505 repo for a shared repository |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
506 |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
507 hgvfs is vfs pointing at .hg/ of current repo (shared one) |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
508 requirements is a set of requirements of current repo (shared one) |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
509 """ |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
510 # The ``shared`` or ``relshared`` requirements indicate the |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
511 # store lives in the path contained in the ``.hg/sharedpath`` file. |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
512 # This is an absolute path for ``shared`` and relative to |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
513 # ``.hg/`` for ``relshared``. |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
514 sharedpath = hgvfs.read(b'sharedpath').rstrip(b'\n') |
45386
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45373
diff
changeset
|
515 if requirementsmod.RELATIVE_SHARED_REQUIREMENT in requirements: |
46888
218a26df7813
share: store relative share paths with '/' separators
Matt Harbison <matt_harbison@yahoo.com>
parents:
46851
diff
changeset
|
516 sharedpath = util.normpath(hgvfs.join(sharedpath)) |
45353
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
517 |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
518 sharedvfs = vfsmod.vfs(sharedpath, realpath=True) |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
519 |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
520 if not sharedvfs.exists(): |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
521 raise error.RepoError( |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
522 _(b'.hg/sharedpath points to nonexistent directory %s') |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
523 % sharedvfs.base |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
524 ) |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
525 return sharedvfs |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
526 |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
527 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
528 def makelocalrepository(baseui, path: bytes, intents=None): |
39687
bfeab472e3c0
localrepo: create new function for instantiating a local repo object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39668
diff
changeset
|
529 """Create a local repository object. |
bfeab472e3c0
localrepo: create new function for instantiating a local repo object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39668
diff
changeset
|
530 |
bfeab472e3c0
localrepo: create new function for instantiating a local repo object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39668
diff
changeset
|
531 Given arguments needed to construct a local repository, this function |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
532 performs various early repository loading functionality (such as |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
533 reading the ``.hg/requires`` and ``.hg/hgrc`` files), validates that |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
534 the repository can be opened, derives a type suitable for representing |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
535 that repository, and returns an instance of it. |
39687
bfeab472e3c0
localrepo: create new function for instantiating a local repo object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39668
diff
changeset
|
536 |
bfeab472e3c0
localrepo: create new function for instantiating a local repo object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39668
diff
changeset
|
537 The returned object conforms to the ``repository.completelocalrepository`` |
bfeab472e3c0
localrepo: create new function for instantiating a local repo object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39668
diff
changeset
|
538 interface. |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
539 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
540 The repository type is derived by calling a series of factory functions |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
541 for each aspect/interface of the final repository. These are defined by |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
542 ``REPO_INTERFACES``. |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
543 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
544 Each factory function is called to produce a type implementing a specific |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
545 interface. The cumulative list of returned types will be combined into a |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
546 new type and that type will be instantiated to represent the local |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
547 repository. |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
548 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
549 The factory functions each receive various state that may be consulted |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
550 as part of deriving a type. |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
551 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
552 Extensions should wrap these factory functions to customize repository type |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
553 creation. Note that an extension's wrapped function may be called even if |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
554 that extension is not loaded for the repo being constructed. Extensions |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
555 should check if their ``__name__`` appears in the |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
556 ``extensionmodulenames`` set passed to the factory function and no-op if |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
557 not. |
39687
bfeab472e3c0
localrepo: create new function for instantiating a local repo object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39668
diff
changeset
|
558 """ |
39689
f19bba3f4d3f
localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39688
diff
changeset
|
559 ui = baseui.copy() |
f19bba3f4d3f
localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39688
diff
changeset
|
560 # Prevent copying repo configuration. |
f19bba3f4d3f
localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39688
diff
changeset
|
561 ui.copy = baseui.copy |
f19bba3f4d3f
localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39688
diff
changeset
|
562 |
39688
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
563 # Working directory VFS rooted at repository root. |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
564 wdirvfs = vfsmod.vfs(path, expandpath=True, realpath=True) |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
565 |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
566 # Main VFS for .hg/ directory. |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
567 hgpath = wdirvfs.join(b'.hg') |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
568 hgvfs = vfsmod.vfs(hgpath, cacheaudited=True) |
45353
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
569 # Whether this repository is shared one or not |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
570 shared = False |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
571 # If this repository is shared, vfs pointing to shared repo |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
572 sharedvfs = None |
39688
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
573 |
39691
2f067e365532
localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39690
diff
changeset
|
574 # The .hg/ path should exist and should be a directory. All other |
2f067e365532
localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39690
diff
changeset
|
575 # cases are errors. |
2f067e365532
localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39690
diff
changeset
|
576 if not hgvfs.isdir(): |
2f067e365532
localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39690
diff
changeset
|
577 try: |
2f067e365532
localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39690
diff
changeset
|
578 hgvfs.stat() |
49306
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
49284
diff
changeset
|
579 except FileNotFoundError: |
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
49284
diff
changeset
|
580 pass |
44943
9e5b4dbe8ff2
localrepo: handle ValueError during repository opening
Gregory Szorc <gregory.szorc@gmail.com>
parents:
44941
diff
changeset
|
581 except ValueError as e: |
9e5b4dbe8ff2
localrepo: handle ValueError during repository opening
Gregory Szorc <gregory.szorc@gmail.com>
parents:
44941
diff
changeset
|
582 # Can be raised on Python 3.8 when path is invalid. |
9e5b4dbe8ff2
localrepo: handle ValueError during repository opening
Gregory Szorc <gregory.szorc@gmail.com>
parents:
44941
diff
changeset
|
583 raise error.Abort( |
46572
d5d9177c0045
localrepo: fix conversion of exceptions to strings flagged by pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46571
diff
changeset
|
584 _(b'invalid path %s: %s') % (path, stringutil.forcebytestr(e)) |
44943
9e5b4dbe8ff2
localrepo: handle ValueError during repository opening
Gregory Szorc <gregory.szorc@gmail.com>
parents:
44941
diff
changeset
|
585 ) |
39691
2f067e365532
localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39690
diff
changeset
|
586 |
2f067e365532
localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39690
diff
changeset
|
587 raise error.RepoError(_(b'repository %s not found') % path) |
2f067e365532
localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39690
diff
changeset
|
588 |
51803
45c467d8422c
localrepo: remove _readrequires function in favor of scmutil.readrequires
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51683
diff
changeset
|
589 requirements = scmutil.readrequires(hgvfs, True) |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
590 shared = ( |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
591 requirementsmod.SHARED_REQUIREMENT in requirements |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
592 or requirementsmod.RELATIVE_SHARED_REQUIREMENT in requirements |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
593 ) |
46234
9804162a4053
localrepo: move storevfs calculation out of if statement
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46114
diff
changeset
|
594 storevfs = None |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
595 if shared: |
46234
9804162a4053
localrepo: move storevfs calculation out of if statement
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46114
diff
changeset
|
596 # This is a shared repo |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
597 sharedvfs = _getsharedvfs(hgvfs, requirements) |
46234
9804162a4053
localrepo: move storevfs calculation out of if statement
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46114
diff
changeset
|
598 storevfs = vfsmod.vfs(sharedvfs.join(b'store')) |
9804162a4053
localrepo: move storevfs calculation out of if statement
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46114
diff
changeset
|
599 else: |
9804162a4053
localrepo: move storevfs calculation out of if statement
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46114
diff
changeset
|
600 storevfs = vfsmod.vfs(hgvfs.join(b'store')) |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
601 |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
602 # if .hg/requires contains the sharesafe requirement, it means |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
603 # there exists a `.hg/store/requires` too and we should read it |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
604 # NOTE: presence of SHARESAFE_REQUIREMENT imply that store requirement |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
605 # is present. We never write SHARESAFE_REQUIREMENT for a repo if store |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
606 # is not present, refer checkrequirementscompat() for that |
46004
49b4ab1d9f5e
share: show warning if share is outdated while source supports share-safe
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
46003
diff
changeset
|
607 # |
49b4ab1d9f5e
share: show warning if share is outdated while source supports share-safe
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
46003
diff
changeset
|
608 # However, if SHARESAFE_REQUIREMENT is not present, it means that the |
49b4ab1d9f5e
share: show warning if share is outdated while source supports share-safe
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
46003
diff
changeset
|
609 # repository was shared the old way. We check the share source .hg/requires |
49b4ab1d9f5e
share: show warning if share is outdated while source supports share-safe
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
46003
diff
changeset
|
610 # for SHARESAFE_REQUIREMENT to detect whether the current repository needs |
49b4ab1d9f5e
share: show warning if share is outdated while source supports share-safe
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
46003
diff
changeset
|
611 # to be reshared |
46571
25392c48da8a
localrepo: fix a UI string to be bytes
Matt Harbison <matt_harbison@yahoo.com>
parents:
46549
diff
changeset
|
612 hint = _(b"see `hg help config.format.use-share-safe` for more information") |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
613 if requirementsmod.SHARESAFE_REQUIREMENT in requirements: |
46003
c6a1fa42e325
upgrade: add support to downgrade share safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45942
diff
changeset
|
614 if ( |
c6a1fa42e325
upgrade: add support to downgrade share safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45942
diff
changeset
|
615 shared |
c6a1fa42e325
upgrade: add support to downgrade share safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45942
diff
changeset
|
616 and requirementsmod.SHARESAFE_REQUIREMENT |
51803
45c467d8422c
localrepo: remove _readrequires function in favor of scmutil.readrequires
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51683
diff
changeset
|
617 not in scmutil.readrequires(sharedvfs, True) |
46003
c6a1fa42e325
upgrade: add support to downgrade share safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45942
diff
changeset
|
618 ): |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
619 mismatch_warn = ui.configbool( |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
620 b'share', b'safe-mismatch.source-not-safe.warn' |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
621 ) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
622 mismatch_config = ui.config( |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
623 b'share', b'safe-mismatch.source-not-safe' |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
624 ) |
49343
4f04bb0d8deb
auto-upgrade: add an option to silence the safe-mismatch message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49313
diff
changeset
|
625 mismatch_verbose_upgrade = ui.configbool( |
4f04bb0d8deb
auto-upgrade: add an option to silence the safe-mismatch message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49313
diff
changeset
|
626 b'share', b'safe-mismatch.source-not-safe:verbose-upgrade' |
4f04bb0d8deb
auto-upgrade: add an option to silence the safe-mismatch message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49313
diff
changeset
|
627 ) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
628 if mismatch_config in ( |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
629 b'downgrade-allow', |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
630 b'allow', |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
631 b'downgrade-abort', |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
632 ): |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
633 # prevent cyclic import localrepo -> upgrade -> localrepo |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
634 from . import upgrade |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
635 |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
636 upgrade.downgrade_share_to_non_safe( |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
637 ui, |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
638 hgvfs, |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
639 sharedvfs, |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
640 requirements, |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
641 mismatch_config, |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
642 mismatch_warn, |
49343
4f04bb0d8deb
auto-upgrade: add an option to silence the safe-mismatch message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49313
diff
changeset
|
643 mismatch_verbose_upgrade, |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
644 ) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
645 elif mismatch_config == b'abort': |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
646 raise error.Abort( |
46351
085294a8c0e0
share-safe: fix an abort message that references the experimental requirement
Matt Harbison <matt_harbison@yahoo.com>
parents:
46348
diff
changeset
|
647 _(b"share source does not support share-safe requirement"), |
46348
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46334
diff
changeset
|
648 hint=hint, |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
649 ) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
650 else: |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
651 raise error.Abort( |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
652 _( |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
653 b"share-safe mismatch with source.\nUnrecognized" |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
654 b" value '%s' of `share.safe-mismatch.source-not-safe`" |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
655 b" set." |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
656 ) |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
657 % mismatch_config, |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
658 hint=hint, |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
659 ) |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
660 else: |
51803
45c467d8422c
localrepo: remove _readrequires function in favor of scmutil.readrequires
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51683
diff
changeset
|
661 requirements |= scmutil.readrequires(storevfs, False) |
46004
49b4ab1d9f5e
share: show warning if share is outdated while source supports share-safe
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
46003
diff
changeset
|
662 elif shared: |
51803
45c467d8422c
localrepo: remove _readrequires function in favor of scmutil.readrequires
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
51683
diff
changeset
|
663 sourcerequires = scmutil.readrequires(sharedvfs, False) |
46004
49b4ab1d9f5e
share: show warning if share is outdated while source supports share-safe
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
46003
diff
changeset
|
664 if requirementsmod.SHARESAFE_REQUIREMENT in sourcerequires: |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
665 mismatch_config = ui.config(b'share', b'safe-mismatch.source-safe') |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
666 mismatch_warn = ui.configbool( |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
667 b'share', b'safe-mismatch.source-safe.warn' |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
668 ) |
49343
4f04bb0d8deb
auto-upgrade: add an option to silence the safe-mismatch message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49313
diff
changeset
|
669 mismatch_verbose_upgrade = ui.configbool( |
4f04bb0d8deb
auto-upgrade: add an option to silence the safe-mismatch message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49313
diff
changeset
|
670 b'share', b'safe-mismatch.source-safe:verbose-upgrade' |
4f04bb0d8deb
auto-upgrade: add an option to silence the safe-mismatch message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49313
diff
changeset
|
671 ) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
672 if mismatch_config in ( |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
673 b'upgrade-allow', |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
674 b'allow', |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
675 b'upgrade-abort', |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
676 ): |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46234
diff
changeset
|
677 # prevent cyclic import localrepo -> upgrade -> localrepo |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46234
diff
changeset
|
678 from . import upgrade |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46234
diff
changeset
|
679 |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46234
diff
changeset
|
680 upgrade.upgrade_share_to_safe( |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46234
diff
changeset
|
681 ui, |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46234
diff
changeset
|
682 hgvfs, |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46234
diff
changeset
|
683 storevfs, |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46234
diff
changeset
|
684 requirements, |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
685 mismatch_config, |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
686 mismatch_warn, |
49343
4f04bb0d8deb
auto-upgrade: add an option to silence the safe-mismatch message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49313
diff
changeset
|
687 mismatch_verbose_upgrade, |
46004
49b4ab1d9f5e
share: show warning if share is outdated while source supports share-safe
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
46003
diff
changeset
|
688 ) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
689 elif mismatch_config == b'abort': |
46331
8788981c95f8
localrepo: disallow share if there is a version mismatch by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46312
diff
changeset
|
690 raise error.Abort( |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46234
diff
changeset
|
691 _( |
46331
8788981c95f8
localrepo: disallow share if there is a version mismatch by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46312
diff
changeset
|
692 b'version mismatch: source uses share-safe' |
8788981c95f8
localrepo: disallow share if there is a version mismatch by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46312
diff
changeset
|
693 b' functionality while the current share does not' |
46348
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46334
diff
changeset
|
694 ), |
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46334
diff
changeset
|
695 hint=hint, |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46234
diff
changeset
|
696 ) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
697 else: |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
698 raise error.Abort( |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
699 _( |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
700 b"share-safe mismatch with source.\nUnrecognized" |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
701 b" value '%s' of `share.safe-mismatch.source-safe` set." |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
702 ) |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
703 % mismatch_config, |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
704 hint=hint, |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46331
diff
changeset
|
705 ) |
39692
6a3162ed881d
localrepo: read requirements file in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39691
diff
changeset
|
706 |
39690
e0c5017124b3
localrepo: load extensions in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39689
diff
changeset
|
707 # The .hg/hgrc file may load extensions or contain config options |
e0c5017124b3
localrepo: load extensions in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39689
diff
changeset
|
708 # that influence repository construction. Attempt to load it and |
e0c5017124b3
localrepo: load extensions in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39689
diff
changeset
|
709 # process any new extensions that it may have pulled in. |
45485
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45483
diff
changeset
|
710 if loadhgrc(ui, wdirvfs, hgvfs, requirements, sharedvfs): |
39852
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
711 afterhgrcload(ui, wdirvfs, hgvfs, requirements) |
39690
e0c5017124b3
localrepo: load extensions in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39689
diff
changeset
|
712 extensions.loadall(ui) |
40729
c93d046d4300
extensions: add "uipopulate" hook, called per instance, not per process
Yuya Nishihara <yuya@tcha.org>
parents:
40718
diff
changeset
|
713 extensions.populateui(ui) |
39690
e0c5017124b3
localrepo: load extensions in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39689
diff
changeset
|
714 |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
715 # Set of module names of extensions loaded for this repository. |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
716 extensionmodulenames = {m.__name__ for n, m in extensions.extensions(ui)} |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
717 |
39693
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
718 supportedrequirements = gathersupportedrequirements(ui) |
39695
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
719 |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
720 # We first validate the requirements are known. |
39693
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
721 ensurerequirementsrecognized(requirements, supportedrequirements) |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
722 |
39695
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
723 # Then we validate that the known set is reasonable to use together. |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
724 ensurerequirementscompatible(ui, requirements) |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
725 |
39696
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
726 # TODO there are unhandled edge cases related to opening repositories with |
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
727 # shared storage. If storage is shared, we should also test for requirements |
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
728 # compatibility in the pointed-to repo. This entails loading the .hg/hgrc in |
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
729 # that repo, as that repo may load extensions needed to open it. This is a |
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
730 # bit complicated because we don't want the other hgrc to overwrite settings |
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
731 # in this hgrc. |
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
732 # |
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
733 # This bug is somewhat mitigated by the fact that we copy the .hg/requires |
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
734 # file when sharing repos. But if a requirement is added after the share is |
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
735 # performed, thereby introducing a new requirement for the opener, we may |
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
736 # will not see that and could encounter a run-time error interacting with |
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
737 # that shared store since it has an unknown-to-us requirement. |
9de1a1c83cd7
localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39695
diff
changeset
|
738 |
39693
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
739 # At this point, we know we should be capable of opening the repository. |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
740 # Now get on with doing that. |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
741 |
39850
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
742 features = set() |
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
743 |
39697
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
744 # The "store" part of the repository holds versioned data. How it is |
45353
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
745 # accessed is determined by various requirements. If `shared` or |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
746 # `relshared` requirements are present, this indicates current repository |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
747 # is a share and store exists in path mentioned in `.hg/sharedpath` |
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
748 if shared: |
39697
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
749 storebasepath = sharedvfs.base |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
750 cachepath = sharedvfs.join(b'cache') |
45353
665e911563da
localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45301
diff
changeset
|
751 features.add(repository.REPO_FEATURE_SHARED_STORAGE) |
39697
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
752 else: |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
753 storebasepath = hgvfs.base |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
754 cachepath = hgvfs.join(b'cache') |
40795
e1c3a2e9df59
repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents:
40794
diff
changeset
|
755 wcachepath = hgvfs.join(b'wcache') |
e1c3a2e9df59
repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents:
40794
diff
changeset
|
756 |
39697
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
757 # The store has changed over time and the exact layout is dictated by |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
758 # requirements. The store interface abstracts differences across all |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
759 # of them. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
760 store = makestore( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
761 requirements, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
762 storebasepath, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
763 lambda base: vfsmod.vfs(base, cacheaudited=True), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
764 ) |
39697
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
765 hgvfs.createmode = store.createmode |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
766 |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
767 storevfs = store.vfs |
39850
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
768 storevfs.options = resolvestorevfsoptions(ui, requirements, features) |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
769 |
47263
6c84fc9c9a90
changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47260
diff
changeset
|
770 if ( |
6c84fc9c9a90
changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47260
diff
changeset
|
771 requirementsmod.REVLOGV2_REQUIREMENT in requirements |
6c84fc9c9a90
changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47260
diff
changeset
|
772 or requirementsmod.CHANGELOGV2_REQUIREMENT in requirements |
6c84fc9c9a90
changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47260
diff
changeset
|
773 ): |
47226
19d4802cb304
sidedata: add a 'side-data' repository feature and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47221
diff
changeset
|
774 features.add(repository.REPO_FEATURE_SIDE_DATA) |
47238
6597255a4f94
revlogv2: track current index size in the docket
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
775 # the revlogv2 docket introduced race condition that we need to fix |
6597255a4f94
revlogv2: track current index size in the docket
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47233
diff
changeset
|
776 features.discard(repository.REPO_FEATURE_STREAM_CLONE) |
47226
19d4802cb304
sidedata: add a 'side-data' repository feature and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47221
diff
changeset
|
777 |
39697
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
778 # The cache vfs is used to manage cache files. |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
779 cachevfs = vfsmod.vfs(cachepath, cacheaudited=True) |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
780 cachevfs.createmode = store.createmode |
40795
e1c3a2e9df59
repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents:
40794
diff
changeset
|
781 # The cache vfs is used to manage cache files related to the working copy |
e1c3a2e9df59
repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents:
40794
diff
changeset
|
782 wcachevfs = vfsmod.vfs(wcachepath, cacheaudited=True) |
e1c3a2e9df59
repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents:
40794
diff
changeset
|
783 wcachevfs.createmode = store.createmode |
39697
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
784 |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
785 # Now resolve the type for the repository object. We do this by repeatedly |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
786 # calling a factory function to produces types for specific aspects of the |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
787 # repo's operation. The aggregate returned types are used as base classes |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
788 # for a dynamically-derived type, which will represent our new repository. |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
789 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
790 bases = [] |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
791 extrastate = {} |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
792 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
793 for iface, fn in REPO_INTERFACES: |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
794 # We pass all potentially useful state to give extensions tons of |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
795 # flexibility. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
796 typ = fn()( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
797 ui=ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
798 intents=intents, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
799 requirements=requirements, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
800 features=features, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
801 wdirvfs=wdirvfs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
802 hgvfs=hgvfs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
803 store=store, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
804 storevfs=storevfs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
805 storeoptions=storevfs.options, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
806 cachevfs=cachevfs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
807 wcachevfs=wcachevfs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
808 extensionmodulenames=extensionmodulenames, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
809 extrastate=extrastate, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
810 baseclasses=bases, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
811 ) |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
812 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
813 if not isinstance(typ, type): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
814 raise error.ProgrammingError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
815 b'unable to construct type for %s' % iface |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
816 ) |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
817 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
818 bases.append(typ) |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
819 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
820 # type() allows you to use characters in type names that wouldn't be |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
821 # recognized as Python symbols in source code. We abuse that to add |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
822 # rich information about our constructed repo. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
823 name = pycompat.sysstr( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
824 b'derivedrepo:%s<%s>' % (wdirvfs.base, b','.join(sorted(requirements))) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
825 ) |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
826 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
827 cls = type(name, tuple(bases), {}) |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
828 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
829 return cls( |
39689
f19bba3f4d3f
localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39688
diff
changeset
|
830 baseui=baseui, |
f19bba3f4d3f
localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39688
diff
changeset
|
831 ui=ui, |
f19bba3f4d3f
localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39688
diff
changeset
|
832 origroot=path, |
39688
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
833 wdirvfs=wdirvfs, |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
834 hgvfs=hgvfs, |
39692
6a3162ed881d
localrepo: read requirements file in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39691
diff
changeset
|
835 requirements=requirements, |
39693
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
836 supportedrequirements=supportedrequirements, |
39697
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
837 sharedpath=storebasepath, |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
838 store=store, |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
839 cachevfs=cachevfs, |
40795
e1c3a2e9df59
repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents:
40794
diff
changeset
|
840 wcachevfs=wcachevfs, |
39850
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
841 features=features, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
842 intents=intents, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
843 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
844 |
39687
bfeab472e3c0
localrepo: create new function for instantiating a local repo object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39668
diff
changeset
|
845 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
846 def loadhgrc( |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
847 ui, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
848 wdirvfs: vfsmod.vfs, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
849 hgvfs: vfsmod.vfs, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
850 requirements, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
851 sharedvfs: Optional[vfsmod.vfs] = None, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
852 ): |
40535
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
853 """Load hgrc files/content into a ui instance. |
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
854 |
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
855 This is called during repository opening to load any additional |
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
856 config files or settings relevant to the current repository. |
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
857 |
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
858 Returns a bool indicating whether any additional configs were loaded. |
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
859 |
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
860 Extensions should monkeypatch this function to modify how per-repo |
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
861 configs are loaded. For example, an extension may wish to pull in |
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
862 configs from alternate files or sources. |
45485
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45483
diff
changeset
|
863 |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45483
diff
changeset
|
864 sharedvfs is vfs object pointing to source repo if the current one is a |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45483
diff
changeset
|
865 shared one |
40535
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
866 """ |
44243
238790674d69
config: add a function in `rcutil` to abstract HGRCSKIPREPO
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44124
diff
changeset
|
867 if not rcutil.use_repo_hgrc(): |
44124
d56a2d6f34f0
hgrc: introduce HGRCSKIPREPO to skip reading the repository's hgrc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44107
diff
changeset
|
868 return False |
45485
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45483
diff
changeset
|
869 |
45783
88a47cbf063c
config: add a .hg/hgrc-not-shared which won't be shared in share-safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
870 ret = False |
45485
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45483
diff
changeset
|
871 # first load config from shared source if we has to |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45483
diff
changeset
|
872 if requirementsmod.SHARESAFE_REQUIREMENT in requirements and sharedvfs: |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45483
diff
changeset
|
873 try: |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45483
diff
changeset
|
874 ui.readconfig(sharedvfs.join(b'hgrc'), root=sharedvfs.base) |
45783
88a47cbf063c
config: add a .hg/hgrc-not-shared which won't be shared in share-safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
875 ret = True |
45485
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45483
diff
changeset
|
876 except IOError: |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45483
diff
changeset
|
877 pass |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45483
diff
changeset
|
878 |
40535
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
879 try: |
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
880 ui.readconfig(hgvfs.join(b'hgrc'), root=wdirvfs.base) |
45783
88a47cbf063c
config: add a .hg/hgrc-not-shared which won't be shared in share-safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
881 ret = True |
40535
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
882 except IOError: |
45783
88a47cbf063c
config: add a .hg/hgrc-not-shared which won't be shared in share-safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
883 pass |
88a47cbf063c
config: add a .hg/hgrc-not-shared which won't be shared in share-safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
884 |
88a47cbf063c
config: add a .hg/hgrc-not-shared which won't be shared in share-safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
885 try: |
88a47cbf063c
config: add a .hg/hgrc-not-shared which won't be shared in share-safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
886 ui.readconfig(hgvfs.join(b'hgrc-not-shared'), root=wdirvfs.base) |
88a47cbf063c
config: add a .hg/hgrc-not-shared which won't be shared in share-safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
887 ret = True |
88a47cbf063c
config: add a .hg/hgrc-not-shared which won't be shared in share-safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
888 except IOError: |
88a47cbf063c
config: add a .hg/hgrc-not-shared which won't be shared in share-safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
889 pass |
88a47cbf063c
config: add a .hg/hgrc-not-shared which won't be shared in share-safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
890 |
88a47cbf063c
config: add a .hg/hgrc-not-shared which won't be shared in share-safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
891 return ret |
40535
473510bf0575
localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40424
diff
changeset
|
892 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
893 |
39852
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
894 def afterhgrcload(ui, wdirvfs, hgvfs, requirements): |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
895 """Perform additional actions after .hg/hgrc is loaded. |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
896 |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
897 This function is called during repository loading immediately after |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
898 the .hg/hgrc file is loaded and before per-repo extensions are loaded. |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
899 |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
900 The function can be used to validate configs, automatically add |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
901 options (including extensions) based on requirements, etc. |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
902 """ |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
903 |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
904 # Map of requirements to list of extensions to load automatically when |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
905 # requirement is present. |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
906 autoextensions = { |
44482
21893ff382cd
localrepo: add git extension to autoextensions list
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
907 b'git': [b'git'], |
39854
823a580448d7
largefiles: automatically load largefiles extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39852
diff
changeset
|
908 b'largefiles': [b'largefiles'], |
39852
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
909 b'lfs': [b'lfs'], |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
910 } |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
911 |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
912 for requirement, names in sorted(autoextensions.items()): |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
913 if requirement not in requirements: |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
914 continue |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
915 |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
916 for name in names: |
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
917 if not ui.hasconfig(b'extensions', name): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
918 ui.setconfig(b'extensions', name, b'', source=b'autoload') |
39852
2c2fadbc9851
localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39850
diff
changeset
|
919 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
920 |
39693
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
921 def gathersupportedrequirements(ui): |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
922 """Determine the complete set of recognized requirements.""" |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
923 # Start with all requirements supported by this file. |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
924 supported = set(localrepository._basesupported) |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
925 |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
926 # Execute ``featuresetupfuncs`` entries if they belong to an extension |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
927 # relevant to this ui instance. |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
928 modules = {m.__name__ for n, m in extensions.extensions(ui)} |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
929 |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
930 for fn in featuresetupfuncs: |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
931 if fn.__module__ in modules: |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
932 fn(ui, supported) |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
933 |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
934 # Add derived requirements from registered compression engines. |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
935 for name in util.compengines: |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
936 engine = util.compengines[name] |
42135
b970fece153d
compression: only declare revlog support for available engine
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42127
diff
changeset
|
937 if engine.available() and engine.revlogheader(): |
39693
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
938 supported.add(b'exp-compression-%s' % name) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
939 if engine.name() == b'zstd': |
48652
6fd9a17c32ab
requirements: add an official `REVLOG_COMPRESSION_ZSTD` const
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48604
diff
changeset
|
940 supported.add(requirementsmod.REVLOG_COMPRESSION_ZSTD) |
39693
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
941 |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
942 return supported |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
943 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
944 |
39693
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
945 def ensurerequirementsrecognized(requirements, supported): |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
946 """Validate that a set of local requirements is recognized. |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
947 |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
948 Receives a set of requirements. Raises an ``error.RepoError`` if there |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
949 exists any requirement in that set that currently loaded code doesn't |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
950 recognize. |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
951 |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
952 Returns a set of supported requirements. |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
953 """ |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
954 missing = set() |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
955 |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
956 for requirement in requirements: |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
957 if requirement in supported: |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
958 continue |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
959 |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
960 if not requirement or not requirement[0:1].isalnum(): |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
961 raise error.RequirementError(_(b'.hg/requires file is corrupt')) |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
962 |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
963 missing.add(requirement) |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
964 |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
965 if missing: |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
966 raise error.RequirementError( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
967 _(b'repository requires features unknown to this Mercurial: %s') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
968 % b' '.join(sorted(missing)), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
969 hint=_( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
970 b'see https://mercurial-scm.org/wiki/MissingRequirement ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
971 b'for more information' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
972 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
973 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
974 |
39693
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
975 |
39695
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
976 def ensurerequirementscompatible(ui, requirements): |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
977 """Validates that a set of recognized requirements is mutually compatible. |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
978 |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
979 Some requirements may not be compatible with others or require |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
980 config options that aren't enabled. This function is called during |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
981 repository opening to ensure that the set of requirements needed |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
982 to open a repository is sane and compatible with config options. |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
983 |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
984 Extensions can monkeypatch this function to perform additional |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
985 checking. |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
986 |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
987 ``error.RepoError`` should be raised on failure. |
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
988 """ |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
989 if ( |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
990 requirementsmod.SPARSE_REQUIREMENT in requirements |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
991 and not sparse.enabled |
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
992 ): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
993 raise error.RepoError( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
994 _( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
995 b'repository is using sparse feature but ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
996 b'sparse is not enabled; enable the ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
997 b'"sparse" extensions to access' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
998 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
999 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1000 |
39695
cb2dcfa5cade
localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39693
diff
changeset
|
1001 |
39698
f44187605315
localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39697
diff
changeset
|
1002 def makestore(requirements, path, vfstype): |
f44187605315
localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39697
diff
changeset
|
1003 """Construct a storage object for a repository.""" |
46637
ab58098bebed
requirements: also add a store constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46636
diff
changeset
|
1004 if requirementsmod.STORE_REQUIREMENT in requirements: |
46638
b4c2a2af25e2
requirements: also add a fncache constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46637
diff
changeset
|
1005 if requirementsmod.FNCACHE_REQUIREMENT in requirements: |
46636
c3773636ddbb
requirements: also add a dotencode constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46627
diff
changeset
|
1006 dotencode = requirementsmod.DOTENCODE_REQUIREMENT in requirements |
c3773636ddbb
requirements: also add a dotencode constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46627
diff
changeset
|
1007 return storemod.fncachestore(path, vfstype, dotencode) |
39698
f44187605315
localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39697
diff
changeset
|
1008 |
f44187605315
localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39697
diff
changeset
|
1009 return storemod.encodedstore(path, vfstype) |
f44187605315
localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39697
diff
changeset
|
1010 |
f44187605315
localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39697
diff
changeset
|
1011 return storemod.basicstore(path, vfstype) |
f44187605315
localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39697
diff
changeset
|
1012 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1013 |
39850
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
1014 def resolvestorevfsoptions(ui, requirements, features): |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1015 """Resolve the options to pass to the store vfs opener. |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1016 |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1017 The returned dict is used to influence behavior of the storage layer. |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1018 """ |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1019 options = {} |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1020 |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
1021 if requirementsmod.TREEMANIFEST_REQUIREMENT in requirements: |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1022 options[b'treemanifest'] = True |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1023 |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1024 # experimental config: format.manifestcachesize |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1025 manifestcachesize = ui.configint(b'format', b'manifestcachesize') |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1026 if manifestcachesize is not None: |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1027 options[b'manifestcachesize'] = manifestcachesize |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1028 |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1029 # In the absence of another requirement superseding a revlog-related |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1030 # requirement, we have to assume the repo is using revlog version 0. |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1031 # This revlog format is super old and we don't bother trying to parse |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1032 # opener options for it because those options wouldn't do anything |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1033 # meaningful on such old repos. |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
1034 if ( |
46626
ee91966aec0f
requirements: add constant for revlog v1 requirement
Raphaël Gomès <rgomes@octobus.net>
parents:
46607
diff
changeset
|
1035 requirementsmod.REVLOGV1_REQUIREMENT in requirements |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
1036 or requirementsmod.REVLOGV2_REQUIREMENT in requirements |
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
1037 ): |
39850
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
1038 options.update(resolverevlogstorevfsoptions(ui, requirements, features)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1039 else: # explicitly mark repo as using revlogv0 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1040 options[b'revlogv0'] = True |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1041 |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
1042 if requirementsmod.COPIESSDC_REQUIREMENT in requirements: |
43142
beed7ce61681
sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43137
diff
changeset
|
1043 options[b'copies-storage'] = b'changeset-sidedata' |
beed7ce61681
sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43137
diff
changeset
|
1044 else: |
beed7ce61681
sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43137
diff
changeset
|
1045 writecopiesto = ui.config(b'experimental', b'copies.write-to') |
beed7ce61681
sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43137
diff
changeset
|
1046 copiesextramode = (b'changeset-only', b'compatibility') |
beed7ce61681
sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43137
diff
changeset
|
1047 if writecopiesto in copiesextramode: |
beed7ce61681
sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43137
diff
changeset
|
1048 options[b'copies-storage'] = b'extra' |
43026
0b87eb2fba67
copies: prepare changelog for more copies storage mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43024
diff
changeset
|
1049 |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1050 return options |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1051 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1052 |
39850
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
1053 def resolverevlogstorevfsoptions(ui, requirements, features): |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1054 """Resolve opener options specific to revlogs.""" |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1055 |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1056 options = {} |
40267
9d5ddf55415b
revlog: allow flag processors to be applied via store options
Matt Harbison <matt_harbison@yahoo.com>
parents:
40086
diff
changeset
|
1057 options[b'flagprocessors'] = {} |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1058 |
51031
133f5a54ed9d
revlog: create the revlog object at the repository level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50929
diff
changeset
|
1059 feature_config = options[b'feature-config'] = revlog.FeatureConfig() |
133f5a54ed9d
revlog: create the revlog object at the repository level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50929
diff
changeset
|
1060 data_config = options[b'data-config'] = revlog.DataConfig() |
133f5a54ed9d
revlog: create the revlog object at the repository level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50929
diff
changeset
|
1061 delta_config = options[b'delta-config'] = revlog.DeltaConfig() |
133f5a54ed9d
revlog: create the revlog object at the repository level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50929
diff
changeset
|
1062 |
46626
ee91966aec0f
requirements: add constant for revlog v1 requirement
Raphaël Gomès <rgomes@octobus.net>
parents:
46607
diff
changeset
|
1063 if requirementsmod.REVLOGV1_REQUIREMENT in requirements: |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1064 options[b'revlogv1'] = True |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
1065 if requirementsmod.REVLOGV2_REQUIREMENT in requirements: |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1066 options[b'revlogv2'] = True |
47263
6c84fc9c9a90
changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47260
diff
changeset
|
1067 if requirementsmod.CHANGELOGV2_REQUIREMENT in requirements: |
6c84fc9c9a90
changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47260
diff
changeset
|
1068 options[b'changelogv2'] = True |
49663
45d7b8c380d7
changelog-v2: add a configuration to disable rank computation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49657
diff
changeset
|
1069 cmp_rank = ui.configbool(b'experimental', b'changelog-v2.compute-rank') |
45d7b8c380d7
changelog-v2: add a configuration to disable rank computation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49657
diff
changeset
|
1070 options[b'changelogv2.compute-rank'] = cmp_rank |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1071 |
46627
f4c325bf80fc
requirements: also add a generaldelta constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46626
diff
changeset
|
1072 if requirementsmod.GENERALDELTA_REQUIREMENT in requirements: |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1073 options[b'generaldelta'] = True |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1074 |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1075 # experimental config: format.chunkcachesize |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1076 chunkcachesize = ui.configint(b'format', b'chunkcachesize') |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1077 if chunkcachesize is not None: |
51032
774c00348f9f
revlog: skip opener option to pass chunk_cache_size value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51031
diff
changeset
|
1078 data_config.chunk_cache_size = chunkcachesize |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1079 |
51284
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
1080 memory_profile = scmutil.get_resource_profile(ui, b'memory') |
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
1081 if memory_profile >= scmutil.RESOURCE_MEDIUM: |
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
1082 data_config.uncompressed_cache_count = 10_000 |
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
1083 data_config.uncompressed_cache_factor = 4 |
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
1084 if memory_profile >= scmutil.RESOURCE_HIGH: |
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
1085 data_config.uncompressed_cache_factor = 10 |
51108
0250e45040f1
revlog: add a small cache of unfiltered chunk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51104
diff
changeset
|
1086 |
51033
cd16b6895f62
revlog: skip opener option to pass delta_both_parents value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51032
diff
changeset
|
1087 delta_config.delta_both_parents = ui.configbool( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1088 b'storage', b'revlog.optimize-delta-parent-choice' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1089 ) |
51034
a11179fb6bd9
revlog: skip opener options to pass candidate_group_chunk_size value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51033
diff
changeset
|
1090 delta_config.candidate_group_chunk_size = ui.configint( |
49657
f5f113f1b011
delta-find: add a way to control the number of bases tested at the same time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49585
diff
changeset
|
1091 b'storage', |
f5f113f1b011
delta-find: add a way to control the number of bases tested at the same time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49585
diff
changeset
|
1092 b'revlog.delta-parent-search.candidate-group-chunk-size', |
f5f113f1b011
delta-find: add a way to control the number of bases tested at the same time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49585
diff
changeset
|
1093 ) |
51035
6ccb07b9eeeb
revlog: skip opener options to pass debug_delta value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51034
diff
changeset
|
1094 delta_config.debug_delta = ui.configbool(b'debug', b'revlog.debug-delta') |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1095 |
47822
2813d406b036
issue6528: add a config option to control the fixing on the fly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47441
diff
changeset
|
1096 issue6528 = ui.configbool(b'storage', b'revlog.issue6528.fix-incoming') |
2813d406b036
issue6528: add a config option to control the fixing on the fly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47441
diff
changeset
|
1097 options[b'issue6528.fix-incoming'] = issue6528 |
2813d406b036
issue6528: add a config option to control the fixing on the fly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47441
diff
changeset
|
1098 |
41819
688fc33e105d
storage: introduce a `revlog.reuse-external-delta` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41818
diff
changeset
|
1099 lazydelta = ui.configbool(b'storage', b'revlog.reuse-external-delta') |
688fc33e105d
storage: introduce a `revlog.reuse-external-delta` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41818
diff
changeset
|
1100 lazydeltabase = False |
688fc33e105d
storage: introduce a `revlog.reuse-external-delta` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41818
diff
changeset
|
1101 if lazydelta: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1102 lazydeltabase = ui.configbool( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1103 b'storage', b'revlog.reuse-external-delta-parent' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1104 ) |
51036
83ce99f5e7f2
revlog: skip opener options to pass lazy_delta values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51035
diff
changeset
|
1105 if lazydeltabase is None: |
83ce99f5e7f2
revlog: skip opener options to pass lazy_delta values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51035
diff
changeset
|
1106 lazydeltabase = not scmutil.gddeltaconfig(ui) |
83ce99f5e7f2
revlog: skip opener options to pass lazy_delta values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51035
diff
changeset
|
1107 delta_config.lazy_delta = lazydelta |
83ce99f5e7f2
revlog: skip opener options to pass lazy_delta values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51035
diff
changeset
|
1108 delta_config.lazy_delta_base = lazydeltabase |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1109 |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1110 chainspan = ui.configbytes(b'experimental', b'maxdeltachainspan') |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1111 if 0 <= chainspan: |
51037
d900f74456cc
revlog: skip opener options to pass max_deltachain_span
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51036
diff
changeset
|
1112 delta_config.max_deltachain_span = chainspan |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1113 |
51683
5f37c36f36b9
revlog: use mmap by default is pre-population is available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51682
diff
changeset
|
1114 has_populate = util.has_mmap_populate() |
5f37c36f36b9
revlog: use mmap by default is pre-population is available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51682
diff
changeset
|
1115 if ui.configbool(b'storage', b'revlog.mmap.index', has_populate): |
51682
c10fa6388dbf
revlog: use an explicit config option to enable mmap usage for index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51642
diff
changeset
|
1116 data_config.mmap_index_threshold = ui.configbytes( |
c10fa6388dbf
revlog: use an explicit config option to enable mmap usage for index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51642
diff
changeset
|
1117 b'storage', |
c10fa6388dbf
revlog: use an explicit config option to enable mmap usage for index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51642
diff
changeset
|
1118 b'revlog.mmap.index:size-threshold', |
c10fa6388dbf
revlog: use an explicit config option to enable mmap usage for index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51642
diff
changeset
|
1119 ) |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1120 |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1121 withsparseread = ui.configbool(b'experimental', b'sparse-read') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1122 srdensitythres = float( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1123 ui.config(b'experimental', b'sparse-read.density-threshold') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1124 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1125 srmingapsize = ui.configbytes(b'experimental', b'sparse-read.min-gap-size') |
51044
e2941c398f10
revlog: skip opener options to pass sparse reading values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51043
diff
changeset
|
1126 data_config.with_sparse_read = withsparseread |
e2941c398f10
revlog: skip opener options to pass sparse reading values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51043
diff
changeset
|
1127 data_config.sr_density_threshold = srdensitythres |
e2941c398f10
revlog: skip opener options to pass sparse reading values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51043
diff
changeset
|
1128 data_config.sr_min_gap_size = srmingapsize |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1129 |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
1130 sparserevlog = requirementsmod.SPARSEREVLOG_REQUIREMENT in requirements |
51043
8ed03f773eac
revlog: skip opener options to pass sparse_revlog value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51042
diff
changeset
|
1131 delta_config.sparse_revlog = sparserevlog |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1132 if sparserevlog: |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1133 options[b'generaldelta'] = True |
51044
e2941c398f10
revlog: skip opener options to pass sparse reading values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51043
diff
changeset
|
1134 data_config.with_sparse_read = True |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1135 |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1136 maxchainlen = None |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1137 if sparserevlog: |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1138 maxchainlen = revlogconst.SPARSE_REVLOG_MAX_CHAIN_LENGTH |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1139 # experimental config: format.maxchainlen |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1140 maxchainlen = ui.configint(b'format', b'maxchainlen', maxchainlen) |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1141 if maxchainlen is not None: |
51038
8228e8dd96dd
revlog: skip opener options to pass max_chain_len
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51037
diff
changeset
|
1142 delta_config.max_chain_len = maxchainlen |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1143 |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1144 for r in requirements: |
42136
10a6725dca6e
compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42135
diff
changeset
|
1145 # we allow multiple compression engine requirement to co-exist because |
10a6725dca6e
compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42135
diff
changeset
|
1146 # strickly speaking, revlog seems to support mixed compression style. |
10a6725dca6e
compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42135
diff
changeset
|
1147 # |
10a6725dca6e
compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42135
diff
changeset
|
1148 # The compression used for new entries will be "the last one" |
10a6725dca6e
compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42135
diff
changeset
|
1149 prefix = r.startswith |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1150 if prefix(b'revlog-compression-') or prefix(b'exp-compression-'): |
51039
940445de2b09
revlog: skip opener options to pass compression_engine value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51038
diff
changeset
|
1151 feature_config.compression_engine = r.split(b'-', 2)[2] |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1152 |
51040
7d66621c5349
revlog: skip opener options to pass compression option values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51039
diff
changeset
|
1153 zlib_level = ui.configint(b'storage', b'revlog.zlib.level') |
7d66621c5349
revlog: skip opener options to pass compression option values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51039
diff
changeset
|
1154 if zlib_level is not None: |
7d66621c5349
revlog: skip opener options to pass compression option values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51039
diff
changeset
|
1155 if not (0 <= zlib_level <= 9): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1156 msg = _(b'invalid value for `storage.revlog.zlib.level` config: %d') |
51040
7d66621c5349
revlog: skip opener options to pass compression option values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51039
diff
changeset
|
1157 raise error.Abort(msg % zlib_level) |
7d66621c5349
revlog: skip opener options to pass compression option values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51039
diff
changeset
|
1158 feature_config.compression_engine_options[b'zlib.level'] = zlib_level |
7d66621c5349
revlog: skip opener options to pass compression option values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51039
diff
changeset
|
1159 zstd_level = ui.configint(b'storage', b'revlog.zstd.level') |
7d66621c5349
revlog: skip opener options to pass compression option values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51039
diff
changeset
|
1160 if zstd_level is not None: |
7d66621c5349
revlog: skip opener options to pass compression option values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51039
diff
changeset
|
1161 if not (0 <= zstd_level <= 22): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1162 msg = _(b'invalid value for `storage.revlog.zstd.level` config: %d') |
51040
7d66621c5349
revlog: skip opener options to pass compression option values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51039
diff
changeset
|
1163 raise error.Abort(msg % zstd_level) |
7d66621c5349
revlog: skip opener options to pass compression option values
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51039
diff
changeset
|
1164 feature_config.compression_engine_options[b'zstd.level'] = zstd_level |
42043
1fac9b931d46
compression: introduce a `storage.revlog.zlib.level` configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42004
diff
changeset
|
1165 |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
1166 if requirementsmod.NARROW_REQUIREMENT in requirements: |
51041
683b96c416d8
revlog: skip opener options to pass enable_ellipsis
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51040
diff
changeset
|
1167 feature_config.enable_ellipsis = True |
39770
7aa440222323
localrepo: enable ellipsis flag on revlogs when repo is narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39765
diff
changeset
|
1168 |
44043
b958419b6c53
py3: byteify some `ui.configbool()` parameters
Matt Harbison <matt_harbison@yahoo.com>
parents:
44023
diff
changeset
|
1169 if ui.configbool(b'experimental', b'rust.index'): |
44014
8042856c90b6
rust-index: add a `experimental.rust.index` option to use the wrapper
Georges Racinet <georges.racinet@octobus.net>
parents:
43778
diff
changeset
|
1170 options[b'rust.index'] = True |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
1171 if requirementsmod.NODEMAP_REQUIREMENT in requirements: |
46309
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1172 slow_path = ui.config( |
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1173 b'storage', b'revlog.persistent-nodemap.slow-path' |
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1174 ) |
46311
014ac7a32048
persistent-nodemap: add a "abort" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46310
diff
changeset
|
1175 if slow_path not in (b'allow', b'warn', b'abort'): |
46309
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1176 default = ui.config_default( |
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1177 b'storage', b'revlog.persistent-nodemap.slow-path' |
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1178 ) |
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1179 msg = _( |
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1180 b'unknown value for config ' |
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1181 b'"storage.revlog.persistent-nodemap.slow-path": "%s"\n' |
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1182 ) |
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1183 ui.warn(msg % slow_path) |
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1184 if not ui.quiet: |
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1185 ui.warn(_(b'falling back to default value: %s\n') % default) |
2c9c88879ab7
persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46306
diff
changeset
|
1186 slow_path = default |
46310
fc2d5c0aed7f
persistent-nodemap: add a "warn" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46309
diff
changeset
|
1187 |
fc2d5c0aed7f
persistent-nodemap: add a "warn" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46309
diff
changeset
|
1188 msg = _( |
fc2d5c0aed7f
persistent-nodemap: add a "warn" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46309
diff
changeset
|
1189 b"accessing `persistent-nodemap` repository without associated " |
fc2d5c0aed7f
persistent-nodemap: add a "warn" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46309
diff
changeset
|
1190 b"fast implementation." |
fc2d5c0aed7f
persistent-nodemap: add a "warn" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46309
diff
changeset
|
1191 ) |
fc2d5c0aed7f
persistent-nodemap: add a "warn" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46309
diff
changeset
|
1192 hint = _( |
fc2d5c0aed7f
persistent-nodemap: add a "warn" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46309
diff
changeset
|
1193 b"check `hg help config.format.use-persistent-nodemap` " |
fc2d5c0aed7f
persistent-nodemap: add a "warn" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46309
diff
changeset
|
1194 b"for details" |
fc2d5c0aed7f
persistent-nodemap: add a "warn" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46309
diff
changeset
|
1195 ) |
46311
014ac7a32048
persistent-nodemap: add a "abort" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46310
diff
changeset
|
1196 if not revlog.HAS_FAST_PERSISTENT_NODEMAP: |
014ac7a32048
persistent-nodemap: add a "abort" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46310
diff
changeset
|
1197 if slow_path == b'warn': |
014ac7a32048
persistent-nodemap: add a "abort" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46310
diff
changeset
|
1198 msg = b"warning: " + msg + b'\n' |
014ac7a32048
persistent-nodemap: add a "abort" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46310
diff
changeset
|
1199 ui.warn(msg) |
014ac7a32048
persistent-nodemap: add a "abort" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46310
diff
changeset
|
1200 if not ui.quiet: |
014ac7a32048
persistent-nodemap: add a "abort" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46310
diff
changeset
|
1201 hint = b'(' + hint + b')\n' |
014ac7a32048
persistent-nodemap: add a "abort" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46310
diff
changeset
|
1202 ui.warn(hint) |
014ac7a32048
persistent-nodemap: add a "abort" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46310
diff
changeset
|
1203 if slow_path == b'abort': |
014ac7a32048
persistent-nodemap: add a "abort" option to the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46310
diff
changeset
|
1204 raise error.Abort(msg, hint=hint) |
44792
5e3c718692bb
nodemap: drop the 'exp-' prefix for internal opener option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44791
diff
changeset
|
1205 options[b'persistent-nodemap'] = True |
48235
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1206 if requirementsmod.DIRSTATE_V2_REQUIREMENT in requirements: |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1207 slow_path = ui.config(b'storage', b'dirstate-v2.slow-path') |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1208 if slow_path not in (b'allow', b'warn', b'abort'): |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1209 default = ui.config_default(b'storage', b'dirstate-v2.slow-path') |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1210 msg = _(b'unknown value for config "dirstate-v2.slow-path": "%s"\n') |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1211 ui.warn(msg % slow_path) |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1212 if not ui.quiet: |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1213 ui.warn(_(b'falling back to default value: %s\n') % default) |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1214 slow_path = default |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1215 |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1216 msg = _( |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1217 b"accessing `dirstate-v2` repository without associated " |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1218 b"fast implementation." |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1219 ) |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1220 hint = _( |
48674
f7086f6173f8
dirstate-v2: rename the configuration to enable the format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48295
diff
changeset
|
1221 b"check `hg help config.format.use-dirstate-v2` " b"for details" |
48235
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1222 ) |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1223 if not dirstate.HAS_FAST_DIRSTATE_V2: |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1224 if slow_path == b'warn': |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1225 msg = b"warning: " + msg + b'\n' |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1226 ui.warn(msg) |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1227 if not ui.quiet: |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1228 hint = b'(' + hint + b')\n' |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1229 ui.warn(hint) |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1230 if slow_path == b'abort': |
5c567aca080d
dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48223
diff
changeset
|
1231 raise error.Abort(msg, hint=hint) |
46306
7d096e5a5b90
persistent-nodemap: rename the storage.revlog.nodemap.mmap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46263
diff
changeset
|
1232 if ui.configbool(b'storage', b'revlog.persistent-nodemap.mmap'): |
44792
5e3c718692bb
nodemap: drop the 'exp-' prefix for internal opener option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44791
diff
changeset
|
1233 options[b'persistent-nodemap.mmap'] = True |
44313
6f9e8e142cea
nodemap: add a (python) index class for persistent nodemap testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44308
diff
changeset
|
1234 if ui.configbool(b'devel', b'persistent-nodemap'): |
6f9e8e142cea
nodemap: add a (python) index class for persistent nodemap testing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44308
diff
changeset
|
1235 options[b'devel-force-nodemap'] = True |
44014
8042856c90b6
rust-index: add a `experimental.rust.index` option to use the wrapper
Georges Racinet <georges.racinet@octobus.net>
parents:
43778
diff
changeset
|
1236 |
39700
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1237 return options |
b10d145837bc
localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39699
diff
changeset
|
1238 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1239 |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1240 def makemain(**kwargs): |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1241 """Produce a type conforming to ``ilocalrepositorymain``.""" |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1242 return localrepository |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1243 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1244 |
52078
eb4f902819d8
localrepo: drop the CamelCase name for `localrepo.revlogfilestorage`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52077
diff
changeset
|
1245 class revlogfilestorage: # (repository.ilocalrepositoryfilestorage) |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1246 """File storage when using revlogs.""" |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1247 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1248 def file(self, path): |
46549
9842c00f0252
log: fix handling of root (or empty) path provided by matcher (issue6478)
Yuya Nishihara <yuya@tcha.org>
parents:
46351
diff
changeset
|
1249 if path.startswith(b'/'): |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1250 path = path[1:] |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1251 |
50316
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1252 try_split = ( |
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1253 self.currenttransaction() is not None |
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1254 or txnutil.mayhavepending(self.root) |
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1255 ) |
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1256 |
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1257 return filelog.filelog(self.svfs, path, try_split=try_split) |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1258 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1259 |
52079
fc77b968aace
localrepo: drop the CamelCase name for `localrepo.revlognarrowfilestorage`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52078
diff
changeset
|
1260 class revlognarrowfilestorage: # (repository.ilocalrepositoryfilestorage) |
39765
3e801ffd7269
filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39764
diff
changeset
|
1261 """File storage when using revlogs and narrow files.""" |
3e801ffd7269
filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39764
diff
changeset
|
1262 |
3e801ffd7269
filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39764
diff
changeset
|
1263 def file(self, path): |
46549
9842c00f0252
log: fix handling of root (or empty) path provided by matcher (issue6478)
Yuya Nishihara <yuya@tcha.org>
parents:
46351
diff
changeset
|
1264 if path.startswith(b'/'): |
39765
3e801ffd7269
filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39764
diff
changeset
|
1265 path = path[1:] |
3e801ffd7269
filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39764
diff
changeset
|
1266 |
50316
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1267 try_split = ( |
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1268 self.currenttransaction() is not None |
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1269 or txnutil.mayhavepending(self.root) |
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1270 ) |
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1271 return filelog.narrowfilelog( |
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1272 self.svfs, path, self._storenarrowmatch, try_split=try_split |
87f0155d68aa
revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50301
diff
changeset
|
1273 ) |
39765
3e801ffd7269
filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39764
diff
changeset
|
1274 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1275 |
39850
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
1276 def makefilestorage(requirements, features, **kwargs): |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1277 """Produce a type conforming to ``ilocalrepositoryfilestorage``.""" |
39850
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
1278 features.add(repository.REPO_FEATURE_REVLOG_FILE_STORAGE) |
40027
83146d176c03
localrepo: add repository feature when repo can be stream cloned
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39996
diff
changeset
|
1279 features.add(repository.REPO_FEATURE_STREAM_CLONE) |
39850
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
1280 |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
1281 if requirementsmod.NARROW_REQUIREMENT in requirements: |
39765
3e801ffd7269
filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39764
diff
changeset
|
1282 return revlognarrowfilestorage |
3e801ffd7269
filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39764
diff
changeset
|
1283 else: |
3e801ffd7269
filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39764
diff
changeset
|
1284 return revlogfilestorage |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1285 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1286 |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1287 # List of repository interfaces and factory functions for them. Each |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1288 # will be called in order during ``makelocalrepository()`` to iteratively |
39994
6962ebc8f817
localrepo: capture repo interface factory functions as lambas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39959
diff
changeset
|
1289 # derive the final type for a local repository instance. We capture the |
6962ebc8f817
localrepo: capture repo interface factory functions as lambas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39959
diff
changeset
|
1290 # function as a lambda so we don't hold a reference and the module-level |
6962ebc8f817
localrepo: capture repo interface factory functions as lambas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39959
diff
changeset
|
1291 # functions can be wrapped. |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1292 REPO_INTERFACES = [ |
39994
6962ebc8f817
localrepo: capture repo interface factory functions as lambas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39959
diff
changeset
|
1293 (repository.ilocalrepositorymain, lambda: makemain), |
6962ebc8f817
localrepo: capture repo interface factory functions as lambas
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39959
diff
changeset
|
1294 (repository.ilocalrepositoryfilestorage, lambda: makefilestorage), |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1295 ] |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1296 |
51895
ee7e106b372b
typing: make the localrepo classes known to pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
51863
diff
changeset
|
1297 _localrepo_base_classes = object |
ee7e106b372b
typing: make the localrepo classes known to pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
51863
diff
changeset
|
1298 |
ee7e106b372b
typing: make the localrepo classes known to pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
51863
diff
changeset
|
1299 if typing.TYPE_CHECKING: |
ee7e106b372b
typing: make the localrepo classes known to pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
51863
diff
changeset
|
1300 _localrepo_base_classes = [ |
ee7e106b372b
typing: make the localrepo classes known to pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
51863
diff
changeset
|
1301 repository.ilocalrepositorymain, |
ee7e106b372b
typing: make the localrepo classes known to pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
51863
diff
changeset
|
1302 repository.ilocalrepositoryfilestorage, |
ee7e106b372b
typing: make the localrepo classes known to pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
51863
diff
changeset
|
1303 ] |
ee7e106b372b
typing: make the localrepo classes known to pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
51863
diff
changeset
|
1304 |
ee7e106b372b
typing: make the localrepo classes known to pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
51863
diff
changeset
|
1305 |
52080
513b413702e8
localrepo: drop the CamelCase name for `localrepo.ilocalrepositorymain`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52079
diff
changeset
|
1306 class localrepository(_localrepo_base_classes): |
39764
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1307 """Main class for representing local repositories. |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1308 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1309 All local repositories are instances of this class. |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1310 |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1311 Constructed on its own, instances of this class are not usable as |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1312 repository objects. To obtain a usable repository object, call |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1313 ``hg.repository()``, ``localrepo.instance()``, or |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1314 ``localrepo.makelocalrepository()``. The latter is the lowest-level. |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1315 ``instance()`` adds support for creating new repositories. |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1316 ``hg.repository()`` adds more extension integration, including calling |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1317 ``reposetup()``. Generally speaking, ``hg.repository()`` should be |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1318 used. |
e4e881572382
localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39763
diff
changeset
|
1319 """ |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
1320 |
48604
348d2c6b5048
requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48603
diff
changeset
|
1321 _basesupported = { |
49451
0c70d888a484
phase: introduce a dedicated requirement for the `archived` phase
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49355
diff
changeset
|
1322 requirementsmod.ARCHIVED_PHASE_REQUIREMENT, |
48604
348d2c6b5048
requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48603
diff
changeset
|
1323 requirementsmod.BOOKMARKS_IN_STORE_REQUIREMENT, |
47263
6c84fc9c9a90
changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47260
diff
changeset
|
1324 requirementsmod.CHANGELOGV2_REQUIREMENT, |
48604
348d2c6b5048
requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48603
diff
changeset
|
1325 requirementsmod.COPIESSDC_REQUIREMENT, |
48793
6e559391f96e
tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48792
diff
changeset
|
1326 requirementsmod.DIRSTATE_TRACKED_HINT_V1, |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48040
diff
changeset
|
1327 requirementsmod.DIRSTATE_V2_REQUIREMENT, |
48603
3a8bc0b48e51
requirements: sort _basesupported
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48602
diff
changeset
|
1328 requirementsmod.DOTENCODE_REQUIREMENT, |
46638
b4c2a2af25e2
requirements: also add a fncache constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46637
diff
changeset
|
1329 requirementsmod.FNCACHE_REQUIREMENT, |
48604
348d2c6b5048
requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48603
diff
changeset
|
1330 requirementsmod.GENERALDELTA_REQUIREMENT, |
48603
3a8bc0b48e51
requirements: sort _basesupported
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48602
diff
changeset
|
1331 requirementsmod.INTERNAL_PHASE_REQUIREMENT, |
48604
348d2c6b5048
requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48603
diff
changeset
|
1332 requirementsmod.NODEMAP_REQUIREMENT, |
45386
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45373
diff
changeset
|
1333 requirementsmod.RELATIVE_SHARED_REQUIREMENT, |
46626
ee91966aec0f
requirements: add constant for revlog v1 requirement
Raphaël Gomès <rgomes@octobus.net>
parents:
46607
diff
changeset
|
1334 requirementsmod.REVLOGV1_REQUIREMENT, |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
1335 requirementsmod.REVLOGV2_REQUIREMENT, |
48603
3a8bc0b48e51
requirements: sort _basesupported
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48602
diff
changeset
|
1336 requirementsmod.SHARED_REQUIREMENT, |
48604
348d2c6b5048
requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48603
diff
changeset
|
1337 requirementsmod.SHARESAFE_REQUIREMENT, |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
1338 requirementsmod.SPARSE_REQUIREMENT, |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
1339 requirementsmod.SPARSEREVLOG_REQUIREMENT, |
46637
ab58098bebed
requirements: also add a store constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46636
diff
changeset
|
1340 requirementsmod.STORE_REQUIREMENT, |
48604
348d2c6b5048
requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48603
diff
changeset
|
1341 requirementsmod.TREEMANIFEST_REQUIREMENT, |
32314
9f35c7836f60
localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32312
diff
changeset
|
1342 } |
17137
b090601a80d1
localrepo: make requirements and openerreqs mutable by subclasses
Bryan O'Sullivan <bryano@fb.com>
parents:
17075
diff
changeset
|
1343 |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1344 # 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
|
1345 # 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
|
1346 _wlockfreeprefix = { |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1347 # 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
|
1348 # 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
|
1349 # 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
|
1350 # now. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1351 b'hgrc', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1352 b'requires', |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1353 # 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
|
1354 # should investigate this in depth at some point |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1355 b'cache/', |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1356 # 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
|
1357 # 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
|
1358 # the remainig bit and drop this line |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1359 b'bisect.state', |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1360 } |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1361 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1362 def __init__( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1363 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1364 baseui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1365 ui, |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
1366 origroot: bytes, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
1367 wdirvfs: vfsmod.vfs, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
1368 hgvfs: vfsmod.vfs, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1369 requirements, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1370 supportedrequirements, |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
1371 sharedpath: bytes, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1372 store, |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
1373 cachevfs: vfsmod.vfs, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
1374 wcachevfs: vfsmod.vfs, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1375 features, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1376 intents=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1377 ): |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
1378 """Create a new local repository instance. |
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
1379 |
39688
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1380 Most callers should use ``hg.repository()``, ``localrepo.instance()``, |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1381 or ``localrepo.makelocalrepository()`` for obtaining a new repository |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1382 object. |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1383 |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1384 Arguments: |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1385 |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1386 baseui |
39689
f19bba3f4d3f
localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39688
diff
changeset
|
1387 ``ui.ui`` instance that ``ui`` argument was based off of. |
f19bba3f4d3f
localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39688
diff
changeset
|
1388 |
f19bba3f4d3f
localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39688
diff
changeset
|
1389 ui |
f19bba3f4d3f
localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39688
diff
changeset
|
1390 ``ui.ui`` instance for use by the repository. |
39688
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1391 |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1392 origroot |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1393 ``bytes`` path to working directory root of this repository. |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1394 |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1395 wdirvfs |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1396 ``vfs.vfs`` rooted at the working directory. |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1397 |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1398 hgvfs |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1399 ``vfs.vfs`` rooted at .hg/ |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1400 |
39692
6a3162ed881d
localrepo: read requirements file in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39691
diff
changeset
|
1401 requirements |
6a3162ed881d
localrepo: read requirements file in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39691
diff
changeset
|
1402 ``set`` of bytestrings representing repository opening requirements. |
6a3162ed881d
localrepo: read requirements file in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39691
diff
changeset
|
1403 |
39693
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
1404 supportedrequirements |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
1405 ``set`` of bytestrings representing repository requirements that we |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
1406 know how to open. May be a supetset of ``requirements``. |
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
1407 |
39697
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1408 sharedpath |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1409 ``bytes`` Defining path to storage base directory. Points to a |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1410 ``.hg/`` directory somewhere. |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1411 |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1412 store |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1413 ``store.basicstore`` (or derived) instance providing access to |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1414 versioned storage. |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1415 |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1416 cachevfs |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1417 ``vfs.vfs`` used for cache files. |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1418 |
40795
e1c3a2e9df59
repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents:
40794
diff
changeset
|
1419 wcachevfs |
e1c3a2e9df59
repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents:
40794
diff
changeset
|
1420 ``vfs.vfs`` used for cache files related to the working copy. |
e1c3a2e9df59
repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents:
40794
diff
changeset
|
1421 |
39850
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
1422 features |
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
1423 ``set`` of bytestrings defining features/capabilities of this |
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
1424 instance. |
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
1425 |
39688
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1426 intents |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1427 ``set`` of system strings indicating what this repo will be used |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1428 for. |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
1429 """ |
39688
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1430 self.baseui = baseui |
39689
f19bba3f4d3f
localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39688
diff
changeset
|
1431 self.ui = ui |
39688
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1432 self.origroot = origroot |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1433 # vfs rooted at working directory. |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1434 self.wvfs = wdirvfs |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1435 self.root = wdirvfs.base |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1436 # vfs rooted at .hg/. Used to access most non-store paths. |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1437 self.vfs = hgvfs |
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1438 self.path = hgvfs.base |
39693
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
1439 self.requirements = requirements |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46713
diff
changeset
|
1440 self.nodeconstants = sha1nodeconstants |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46713
diff
changeset
|
1441 self.nullid = self.nodeconstants.nullid |
39693
5b8e9b2060ef
localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39692
diff
changeset
|
1442 self.supported = supportedrequirements |
39697
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1443 self.sharedpath = sharedpath |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1444 self.store = store |
98ca9078807a
localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39696
diff
changeset
|
1445 self.cachevfs = cachevfs |
40795
e1c3a2e9df59
repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents:
40794
diff
changeset
|
1446 self.wcachevfs = wcachevfs |
39850
d89d5bc06eaa
localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39849
diff
changeset
|
1447 self.features = features |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
1448 |
32730
b8ff7d0ff361
localrepo: move filtername to __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32729
diff
changeset
|
1449 self.filtername = None |
39688
2f9cdb5b3644
localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39687
diff
changeset
|
1450 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1451 if self.ui.configbool(b'devel', b'all-warnings') or self.ui.configbool( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1452 b'devel', b'check-locks' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1453 ): |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1454 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
|
1455 # 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
|
1456 # 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
|
1457 # 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
|
1458 self._phasedefaults = [] |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1459 |
31111
95ec3ad62f62
color: initialize color for the localrepo ui
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31054
diff
changeset
|
1460 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
|
1461 |
6840
80e51429cb9a
introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents:
6839
diff
changeset
|
1462 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
|
1463 self.svfs = self.store.vfs |
6840
80e51429cb9a
introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents:
6839
diff
changeset
|
1464 self.sjoin = self.store.join |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1465 if self.ui.configbool(b'devel', b'all-warnings') or self.ui.configbool( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1466 b'devel', b'check-locks' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1467 ): |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50919
diff
changeset
|
1468 if hasattr(self.svfs, 'vfs'): # this is filtervfs |
33437
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
1469 self.svfs.vfs.audit = self._getsvfsward(self.svfs.vfs.audit) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1470 else: # standard vfs |
33437
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
1471 self.svfs.audit = self._getsvfsward(self.svfs.audit) |
3850
a4457828ca1a
move code around
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3803
diff
changeset
|
1472 |
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
1473 self._dirstatevalidatewarned = False |
9146
5614a628d173
localrepo: rename in-memory tag cache instance attributes (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9145
diff
changeset
|
1474 |
41615
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41529
diff
changeset
|
1475 self._branchcaches = branchmap.BranchMapCache() |
24373
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
1476 self._revbranchcache = None |
37137
db90a5793103
localrepo: make filterpats private (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37135
diff
changeset
|
1477 self._filterpats = {} |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
1478 self._datafilters = {} |
4916
5c5d23d93447
Use a weakref for recursive transactions
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
1479 self._transref = self._lockref = self._wlockref = None |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1480 |
14929
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
1481 # 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
|
1482 # (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
|
1483 # |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
1484 # 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
|
1485 self._filecache = {} |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
1486 |
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
|
1487 # 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
|
1488 # 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
|
1489 # - 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
|
1490 # - 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
|
1491 # - 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
|
1492 # - 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
|
1493 # - 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
|
1494 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
|
1495 |
50128
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50127
diff
changeset
|
1496 self._dirstate = None |
32814
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
1497 # 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
|
1498 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
|
1499 |
50186
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50128
diff
changeset
|
1500 self._pending_narrow_pats = None |
50187
f18e4608bb61
narrow: delegate the dirstate's narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50186
diff
changeset
|
1501 self._pending_narrow_pats_dirstate = None |
50186
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50128
diff
changeset
|
1502 |
23558
3198aac7a95d
namespaces: add bookmarks to the names data structure
Sean Farley <sean.michael.farley@gmail.com>
parents:
23546
diff
changeset
|
1503 # generic mapping between names and nodes |
23561
3c2419e07df5
namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents:
23558
diff
changeset
|
1504 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
|
1505 |
33302
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33278
diff
changeset
|
1506 # Key to signature value. |
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33278
diff
changeset
|
1507 self._sparsesignaturecache = {} |
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33278
diff
changeset
|
1508 # Signature to cached matcher instance. |
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33278
diff
changeset
|
1509 self._sparsematchercache = {} |
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33278
diff
changeset
|
1510 |
42231
d345627d104b
repoview: introduce a `experimental.extra-filter-revs` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
1511 self._extrafilterid = repoview.extrafilter(ui) |
d345627d104b
repoview: introduce a `experimental.extra-filter-revs` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
1512 |
43142
beed7ce61681
sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43137
diff
changeset
|
1513 self.filecopiesmode = None |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
1514 if requirementsmod.COPIESSDC_REQUIREMENT in self.requirements: |
43142
beed7ce61681
sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43137
diff
changeset
|
1515 self.filecopiesmode = b'changeset-sidedata' |
beed7ce61681
sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43137
diff
changeset
|
1516 |
46713
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
1517 self._wanted_sidedata = set() |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
1518 self._sidedata_computers = {} |
47085
3aab2330b7d3
sidedata: move sidedata-related utils to the dedicated module
Raphaël Gomès <rgomes@octobus.net>
parents:
47083
diff
changeset
|
1519 sidedatamod.set_sidedata_spec_for_repo(self) |
46713
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
1520 |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1521 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
|
1522 """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
|
1523 rref = weakref.ref(self) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1524 |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1525 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
|
1526 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
|
1527 repo = rref() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1528 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1529 repo is None |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50919
diff
changeset
|
1530 or not hasattr(repo, '_wlockref') |
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50919
diff
changeset
|
1531 or not hasattr(repo, '_lockref') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1532 ): |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1533 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1534 if mode in (None, b'r', b'rb'): |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1535 return |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1536 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
|
1537 # truncate name relative to the repository (.hg) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1538 path = path[len(repo.path) + 1 :] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1539 if path.startswith(b'cache/'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1540 msg = b'accessing cache with vfs instead of cachevfs: "%s"' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1541 repo.ui.develwarn(msg % path, stacklevel=3, config=b"cache-vfs") |
45015
5797dbb630df
locks: expect repo lock, not wlock, when writing to .hg/strip-backup/
Martin von Zweigbergk <martinvonz@google.com>
parents:
44943
diff
changeset
|
1542 # path prefixes covered by 'lock' |
45433
324ad3e7ef41
localrepo: warn if we are writing to cache without a lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45418
diff
changeset
|
1543 vfs_path_prefixes = ( |
324ad3e7ef41
localrepo: warn if we are writing to cache without a lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45418
diff
changeset
|
1544 b'journal.', |
324ad3e7ef41
localrepo: warn if we are writing to cache without a lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45418
diff
changeset
|
1545 b'undo.', |
324ad3e7ef41
localrepo: warn if we are writing to cache without a lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45418
diff
changeset
|
1546 b'strip-backup/', |
324ad3e7ef41
localrepo: warn if we are writing to cache without a lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45418
diff
changeset
|
1547 b'cache/', |
324ad3e7ef41
localrepo: warn if we are writing to cache without a lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45418
diff
changeset
|
1548 ) |
45015
5797dbb630df
locks: expect repo lock, not wlock, when writing to .hg/strip-backup/
Martin von Zweigbergk <martinvonz@google.com>
parents:
44943
diff
changeset
|
1549 if any(path.startswith(prefix) for prefix in vfs_path_prefixes): |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1550 if repo._currentlock(repo._lockref) is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1551 repo.ui.develwarn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1552 b'write with no lock: "%s"' % path, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1553 stacklevel=3, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1554 config=b'check-locks', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1555 ) |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1556 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
|
1557 # 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
|
1558 # |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1559 # 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
|
1560 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
|
1561 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
|
1562 return |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1563 repo.ui.develwarn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1564 b'write with no wlock: "%s"' % path, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1565 stacklevel=3, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1566 config=b'check-locks', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1567 ) |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1568 return ret |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1569 |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1570 return checkvfs |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33403
diff
changeset
|
1571 |
33437
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
1572 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
|
1573 """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
|
1574 rref = weakref.ref(self) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1575 |
33437
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
1576 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
|
1577 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
|
1578 repo = rref() |
50928
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50919
diff
changeset
|
1579 if repo is None or not hasattr(repo, '_lockref'): |
33437
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
1580 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1581 if mode in (None, b'r', b'rb'): |
33437
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
1582 return |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
1583 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
|
1584 # truncate name relative to the repository (.hg) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1585 path = path[len(repo.sharedpath) + 1 :] |
33437
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
1586 if repo._currentlock(repo._lockref) is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1587 repo.ui.develwarn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1588 b'write with no lock: "%s"' % path, stacklevel=4 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1589 ) |
33437
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
1590 return ret |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1591 |
33437
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
1592 return checksvfs |
0720e6265c8a
reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33436
diff
changeset
|
1593 |
50281
f34887316f1f
undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50267
diff
changeset
|
1594 @property |
f34887316f1f
undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50267
diff
changeset
|
1595 def vfs_map(self): |
f34887316f1f
undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50267
diff
changeset
|
1596 return { |
f34887316f1f
undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50267
diff
changeset
|
1597 b'': self.svfs, |
f34887316f1f
undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50267
diff
changeset
|
1598 b'plain': self.vfs, |
f34887316f1f
undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50267
diff
changeset
|
1599 b'store': self.svfs, |
f34887316f1f
undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50267
diff
changeset
|
1600 } |
f34887316f1f
undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50267
diff
changeset
|
1601 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
1602 def close(self): |
24378
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
1603 self._writecaches() |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
1604 |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
1605 def _writecaches(self): |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
1606 if self._revbranchcache: |
9347c15d8136
revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents:
24373
diff
changeset
|
1607 self._revbranchcache.write() |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
1608 |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
1609 def _restrictcapabilities(self, caps): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1610 if self.ui.configbool(b'experimental', b'bundle2-advertise'): |
20955
12f161f08d74
bundle2: allow pulling changegroups using bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20954
diff
changeset
|
1611 caps = set(caps) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1612 capsblob = bundle2.encodecaps( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1613 bundle2.getrepocaps(self, role=b'client') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1614 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1615 caps.add(b'bundle2=' + urlreq.quote(capsblob)) |
46902
631001150e13
narrow: add capabilities for local repos, not just remote peers
Charles Chamberlain <cchamberlain@janestreet.com>
parents:
46888
diff
changeset
|
1616 if self.ui.configbool(b'experimental', b'narrow'): |
631001150e13
narrow: add capabilities for local repos, not just remote peers
Charles Chamberlain <cchamberlain@janestreet.com>
parents:
46888
diff
changeset
|
1617 caps.add(wireprototypes.NARROWCAP) |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
1618 return caps |
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
1619 |
39312
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1620 # Don't cache auditor/nofsauditor, or you'll end up with reference cycle: |
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1621 # self -> auditor -> self._checknested -> self |
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1622 |
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1623 @property |
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1624 def auditor(self): |
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1625 # This is only used by context.workingctx.match in order to |
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1626 # detect files in subrepos. |
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1627 return pathutil.pathauditor(self.root, callback=self._checknested) |
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1628 |
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1629 @property |
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1630 def nofsauditor(self): |
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1631 # This is only used by context.basectx.match in order to detect |
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1632 # files in subrepos. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1633 return pathutil.pathauditor( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1634 self.root, callback=self._checknested, realfs=False, cached=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1635 ) |
39312
9198e41df6ef
localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents:
39301
diff
changeset
|
1636 |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1637 def _checknested(self, path): |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1638 """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
|
1639 if not path.startswith(self.root): |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1640 return False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1641 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
|
1642 normsubpath = util.pconvert(subpath) |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1643 |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1644 # 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
|
1645 # 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
|
1646 # |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1647 # $ 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
|
1648 # |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1649 # 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
|
1650 # parent revision. |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1651 # |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1652 # 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
|
1653 # 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
|
1654 # 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
|
1655 # 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
|
1656 # panics when it sees sub/.hg/. |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1657 # |
12174
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
1658 # 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
|
1659 # 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
|
1660 # the filesystem *now*. |
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
1661 ctx = self[None] |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1662 parts = util.splitpath(subpath) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1663 while parts: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1664 prefix = b'/'.join(parts) |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1665 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
|
1666 if prefix == normsubpath: |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1667 return True |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1668 else: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1669 sub = ctx.sub(prefix) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1670 return sub.checknested(subpath[len(prefix) + 1 :]) |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1671 else: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1672 parts.pop() |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1673 return False |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1674 |
50440
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50324
diff
changeset
|
1675 def peer(self, path=None, remotehidden=False): |
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50324
diff
changeset
|
1676 return localpeer( |
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50324
diff
changeset
|
1677 self, path=path, remotehidden=remotehidden |
3a2df812e1c7
pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents:
50324
diff
changeset
|
1678 ) # not cached to avoid reference cycle |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
1679 |
17993
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
1680 def unfiltered(self): |
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
1681 """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
|
1682 |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18520
diff
changeset
|
1683 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
|
1684 return self |
1a6f8820eb71
clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
1685 |
35492
3ad582b2895c
repoview: add visibilityexceptions as an optional argument to repo.filtered()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35309
diff
changeset
|
1686 def filtered(self, name, visibilityexceptions=None): |
42105
e0357a46c39d
repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42079
diff
changeset
|
1687 """Return a filtered version of a repository |
e0357a46c39d
repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42079
diff
changeset
|
1688 |
e0357a46c39d
repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42079
diff
changeset
|
1689 The `name` parameter is the identifier of the requested view. This |
e0357a46c39d
repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42079
diff
changeset
|
1690 will return a repoview object set "exactly" to the specified view. |
e0357a46c39d
repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42079
diff
changeset
|
1691 |
e0357a46c39d
repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42079
diff
changeset
|
1692 This function does not apply recursive filtering to a repository. For |
e0357a46c39d
repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42079
diff
changeset
|
1693 example calling `repo.filtered("served")` will return a repoview using |
e0357a46c39d
repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42079
diff
changeset
|
1694 the "served" view, regardless of the initial view used by `repo`. |
e0357a46c39d
repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42079
diff
changeset
|
1695 |
e0357a46c39d
repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42079
diff
changeset
|
1696 In other word, there is always only one level of `repoview` "filtering". |
e0357a46c39d
repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42079
diff
changeset
|
1697 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1698 if self._extrafilterid is not None and b'%' not in name: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1699 name = name + b'%' + self._extrafilterid |
42231
d345627d104b
repoview: introduce a `experimental.extra-filter-revs` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42141
diff
changeset
|
1700 |
35248
c752fbe228fb
repoview: extract a factory function of proxy class
Yuya Nishihara <yuya@tcha.org>
parents:
35247
diff
changeset
|
1701 cls = repoview.newtype(self.unfiltered().__class__) |
35492
3ad582b2895c
repoview: add visibilityexceptions as an optional argument to repo.filtered()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35309
diff
changeset
|
1702 return cls(self, name, visibilityexceptions) |
18100
3a6ddacb7198
clfilter: add actual repo filtering mechanism
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18092
diff
changeset
|
1703 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1704 @mixedrepostorecache( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1705 (b'bookmarks', b'plain'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1706 (b'bookmarks.current', b'plain'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1707 (b'bookmarks', b''), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1708 (b'00changelog.i', b''), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1709 ) |
13355
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
1710 def _bookmarks(self): |
42682
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1711 # Since the multiple files involved in the transaction cannot be |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1712 # written atomically (with current repository format), there is a race |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1713 # condition here. |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1714 # |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1715 # 1) changelog content A is read |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1716 # 2) outside transaction update changelog to content B |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1717 # 3) outside transaction update bookmark file referring to content B |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1718 # 4) bookmarks file content is read and filtered against changelog-A |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1719 # |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1720 # When this happens, bookmarks against nodes missing from A are dropped. |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1721 # |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1722 # Having this happening during read is not great, but it become worse |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1723 # when this happen during write because the bookmarks to the "unknown" |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1724 # nodes will be dropped for good. However, writes happen within locks. |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1725 # This locking makes it possible to have a race free consistent read. |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1726 # For this purpose data read from disc before locking are |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1727 # "invalidated" right after the locks are taken. This invalidations are |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1728 # "light", the `filecache` mechanism keep the data in memory and will |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1729 # reuse them if the underlying files did not changed. Not parsing the |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1730 # same data multiple times helps performances. |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1731 # |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1732 # Unfortunately in the case describe above, the files tracked by the |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1733 # bookmarks file cache might not have changed, but the in-memory |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1734 # content is still "wrong" because we used an older changelog content |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1735 # to process the on-disk data. So after locking, the changelog would be |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1736 # refreshed but `_bookmarks` would be preserved. |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1737 # Adding `00changelog.i` to the list of tracked file is not |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1738 # enough, because at the time we build the content for `_bookmarks` in |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1739 # (4), the changelog file has already diverged from the content used |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1740 # for loading `changelog` in (1) |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1741 # |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1742 # To prevent the issue, we force the changelog to be explicitly |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1743 # reloaded while computing `_bookmarks`. The data race can still happen |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1744 # without the lock (with a narrower window), but it would no longer go |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1745 # undetected during the lock time refresh. |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1746 # |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1747 # The new schedule is as follow |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1748 # |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1749 # 1) filecache logic detect that `_bookmarks` needs to be computed |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1750 # 2) cachestat for `bookmarks` and `changelog` are captured (for book) |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1751 # 3) We force `changelog` filecache to be tested |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1752 # 4) cachestat for `changelog` are captured (for changelog) |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1753 # 5) `_bookmarks` is computed and cached |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1754 # |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1755 # The step in (3) ensure we have a changelog at least as recent as the |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1756 # cache stat computed in (1). As a result at locking time: |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1757 # * if the changelog did not changed since (1) -> we can reuse the data |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1758 # * otherwise -> the bookmarks get refreshed. |
e0cf09bc35ef
bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42621
diff
changeset
|
1759 self._refreshchangelog() |
17922
7f5dab94e48c
bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents:
17857
diff
changeset
|
1760 return bookmarks.bmstore(self) |
13355
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
1761 |
42510
3472a3f9d785
localrepo: introduce a `_refreshchangelog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42421
diff
changeset
|
1762 def _refreshchangelog(self): |
3472a3f9d785
localrepo: introduce a `_refreshchangelog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42421
diff
changeset
|
1763 """make sure the in memory changelog match the on-disk one""" |
43414
a0916e8819f6
localrepo: use str for lookup in vars()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43202
diff
changeset
|
1764 if 'changelog' in vars(self) and self.currenttransaction() is None: |
42510
3472a3f9d785
localrepo: introduce a `_refreshchangelog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42421
diff
changeset
|
1765 del self.changelog |
3472a3f9d785
localrepo: introduce a `_refreshchangelog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42421
diff
changeset
|
1766 |
27698
dad6404ccddb
bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents:
27522
diff
changeset
|
1767 @property |
24947
a02d293a1079
bookmarks: rename bookmarkcurrent to activebookmark (API)
Ryan McElroy <rmcelroy@fb.com>
parents:
24946
diff
changeset
|
1768 def _activebookmark(self): |
27698
dad6404ccddb
bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents:
27522
diff
changeset
|
1769 return self._bookmarks.active |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
1770 |
35309
d13526333835
phases: drop the list with phase of each rev, always comput phase sets
Joerg Sonnenberger <joerg@bec.de>
parents:
35308
diff
changeset
|
1771 # _phasesets depend on changelog. what we need is to call |
d13526333835
phases: drop the list with phase of each rev, always comput phase sets
Joerg Sonnenberger <joerg@bec.de>
parents:
35308
diff
changeset
|
1772 # _phasecache.invalidate() if '00changelog.i' was changed, but it |
26405
c15d8f84343e
localrepo: recreate phasecache if changelog was modified (issue4855)
Yuya Nishihara <yuya@tcha.org>
parents:
25878
diff
changeset
|
1773 # can't be easily expressed in filecache mechanism. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1774 @storecache(b'phaseroots', b'00changelog.i') |
16657
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16646
diff
changeset
|
1775 def _phasecache(self): |
b6081c2c4647
phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents:
16646
diff
changeset
|
1776 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
|
1777 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1778 @storecache(b'obsstore') |
17070
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
1779 def obsstore(self): |
32729
c8177792fef6
obsolete: move obsstore creation logic from localrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32697
diff
changeset
|
1780 return obsolete.makestore(self.ui, self) |
17070
ad0d6c2b3279
obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents:
17013
diff
changeset
|
1781 |
48039
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
1782 @changelogcache() |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
1783 def changelog(repo): |
44826
35b255e474d9
dirstate: make sure the dirstate is loaded before the changelog (issue6303)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44687
diff
changeset
|
1784 # load dirstate before changelog to avoid race see issue6303 |
48039
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
1785 repo.dirstate.prefetch_parents() |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
1786 return repo.store.changelog( |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
1787 txnutil.mayhavepending(repo.root), |
c094e829e848
changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47822
diff
changeset
|
1788 concurrencychecker=revlogchecker.get_checker(repo.ui, b'changelog'), |
46607
e9901d01d135
revlog: add a mechanism to verify expected file position before appending
Kyle Lippincott <spectral@google.com>
parents:
46414
diff
changeset
|
1789 ) |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
1790 |
48040
7970895a21cb
manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48039
diff
changeset
|
1791 @manifestlogcache() |
29825
426d931e5db2
manifest: introduce manifestlog and manifestctx classes
Durham Goode <durham@fb.com>
parents:
29709
diff
changeset
|
1792 def manifestlog(self): |
42905
3df3b139a43d
localrepo: push manifestlog and changelog construction code into store
Augie Fackler <augie@google.com>
parents:
42814
diff
changeset
|
1793 return self.store.manifestlog(self, self._storenarrowmatch) |
29825
426d931e5db2
manifest: introduce manifestlog and manifestctx classes
Durham Goode <durham@fb.com>
parents:
29709
diff
changeset
|
1794 |
50127
ec769cbc1fa2
dirstate: directly manage the dirstate property on localrepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50085
diff
changeset
|
1795 @unfilteredpropertycache |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
1796 def dirstate(self): |
50128
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50127
diff
changeset
|
1797 if self._dirstate is None: |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50127
diff
changeset
|
1798 self._dirstate = self._makedirstate() |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50127
diff
changeset
|
1799 else: |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50127
diff
changeset
|
1800 self._dirstate.refresh() |
2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50127
diff
changeset
|
1801 return self._dirstate |
38128
1cba497491be
narrow: only wrap dirstate functions once, instead of per-reposetup
Kyle Lippincott <spectral@google.com>
parents:
37848
diff
changeset
|
1802 |
1cba497491be
narrow: only wrap dirstate functions once, instead of per-reposetup
Kyle Lippincott <spectral@google.com>
parents:
37848
diff
changeset
|
1803 def _makedirstate(self): |
38132
2b8cb0ab231c
localrepo: add docstring to _makedirstate to make it less likely to be removed
Kyle Lippincott <spectral@google.com>
parents:
38128
diff
changeset
|
1804 """Extension point for wrapping the dirstate per-repo.""" |
49355
0540c1628fd4
sparse: use None as the sparse matcher value when disabled
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49343
diff
changeset
|
1805 sparsematchfn = None |
0540c1628fd4
sparse: use None as the sparse matcher value when disabled
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49343
diff
changeset
|
1806 if sparse.use_sparse(self): |
0540c1628fd4
sparse: use None as the sparse matcher value when disabled
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49343
diff
changeset
|
1807 sparsematchfn = lambda: sparse.matcher(self) |
47280
1766130fe9ba
dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
47279
diff
changeset
|
1808 v2_req = requirementsmod.DIRSTATE_V2_REQUIREMENT |
48793
6e559391f96e
tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48792
diff
changeset
|
1809 th = requirementsmod.DIRSTATE_TRACKED_HINT_V1 |
47280
1766130fe9ba
dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
47279
diff
changeset
|
1810 use_dirstate_v2 = v2_req in self.requirements |
48793
6e559391f96e
tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48792
diff
changeset
|
1811 use_tracked_hint = th in self.requirements |
33373
fb320398a21c
dirstate: expose a sparse matcher on dirstate (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33336
diff
changeset
|
1812 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1813 return dirstate.dirstate( |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46713
diff
changeset
|
1814 self.vfs, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46713
diff
changeset
|
1815 self.ui, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46713
diff
changeset
|
1816 self.root, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46713
diff
changeset
|
1817 self._dirstatevalidate, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46713
diff
changeset
|
1818 sparsematchfn, |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46713
diff
changeset
|
1819 self.nodeconstants, |
47280
1766130fe9ba
dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
47279
diff
changeset
|
1820 use_dirstate_v2, |
48793
6e559391f96e
tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48792
diff
changeset
|
1821 use_tracked_hint=use_tracked_hint, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1822 ) |
13032
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
1823 |
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
1824 def _dirstatevalidate(self, node): |
50324
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1825 okay = True |
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
1826 try: |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
1827 self.changelog.rev(node) |
50324
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1828 except error.LookupError: |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1829 # If the parent are unknown it might just be because the changelog |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1830 # in memory is lagging behind the dirstate in memory. So try to |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1831 # refresh the changelog first. |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1832 # |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1833 # We only do so if we don't hold the lock, if we do hold the lock |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1834 # the invalidation at that time should have taken care of this and |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1835 # something is very fishy. |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1836 if self.currentlock() is None: |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1837 self.invalidate() |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1838 try: |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1839 self.changelog.rev(node) |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1840 except error.LookupError: |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1841 okay = False |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1842 else: |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1843 # XXX we should consider raising an error here. |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1844 okay = False |
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1845 if okay: |
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
1846 return node |
50324
e6532a7336d0
dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50323
diff
changeset
|
1847 else: |
26155
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
1848 if not self._dirstatevalidatewarned: |
51a30cae2bff
localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents:
26118
diff
changeset
|
1849 self._dirstatevalidatewarned = True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1850 self.ui.warn( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1851 _(b"warning: ignoring unknown working parent %s!\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1852 % short(node) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1853 ) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
1854 return self.nullid |
2155
ff255b41b4aa
support hooks written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2150
diff
changeset
|
1855 |
38872
576eef1ab43d
narrow: move .hg/narrowspec to .hg/store/narrowspec (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
38869
diff
changeset
|
1856 @storecache(narrowspec.FILENAME) |
36471
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1857 def narrowpats(self): |
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1858 """matcher patterns for this repository's narrowspec |
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1859 |
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1860 A tuple of (includes, excludes). |
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1861 """ |
50186
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50128
diff
changeset
|
1862 # the narrow management should probably move into its own object |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50128
diff
changeset
|
1863 val = self._pending_narrow_pats |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50128
diff
changeset
|
1864 if val is None: |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50128
diff
changeset
|
1865 val = narrowspec.load(self) |
8bc14ac53a41
narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50128
diff
changeset
|
1866 return val |
36471
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1867 |
38872
576eef1ab43d
narrow: move .hg/narrowspec to .hg/store/narrowspec (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
38869
diff
changeset
|
1868 @storecache(narrowspec.FILENAME) |
41230
d2d716cc0700
narrow: extract repo property for store narrowmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
1869 def _storenarrowmatch(self): |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
1870 if requirementsmod.NARROW_REQUIREMENT not in self.requirements: |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41675
diff
changeset
|
1871 return matchmod.always() |
41230
d2d716cc0700
narrow: extract repo property for store narrowmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
1872 include, exclude = self.narrowpats |
d2d716cc0700
narrow: extract repo property for store narrowmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
1873 return narrowspec.match(self.root, include=include, exclude=exclude) |
d2d716cc0700
narrow: extract repo property for store narrowmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
1874 |
d2d716cc0700
narrow: extract repo property for store narrowmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
1875 @storecache(narrowspec.FILENAME) |
36471
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1876 def _narrowmatch(self): |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
1877 if requirementsmod.NARROW_REQUIREMENT not in self.requirements: |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41675
diff
changeset
|
1878 return matchmod.always() |
41043
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41038
diff
changeset
|
1879 narrowspec.checkworkingcopynarrowspec(self) |
36471
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1880 include, exclude = self.narrowpats |
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1881 return narrowspec.match(self.root, include=include, exclude=exclude) |
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1882 |
40086
41fcdfe3bfeb
narrow: allow repo.narrowmatch(match) to include exact matches from "match"
Martin von Zweigbergk <martinvonz@google.com>
parents:
40082
diff
changeset
|
1883 def narrowmatch(self, match=None, includeexact=False): |
40082
4fd0fac48922
localrepo: allow narrowmatch() to accept matcher to intersect with
Martin von Zweigbergk <martinvonz@google.com>
parents:
40064
diff
changeset
|
1884 """matcher corresponding the the repo's narrowspec |
4fd0fac48922
localrepo: allow narrowmatch() to accept matcher to intersect with
Martin von Zweigbergk <martinvonz@google.com>
parents:
40064
diff
changeset
|
1885 |
4fd0fac48922
localrepo: allow narrowmatch() to accept matcher to intersect with
Martin von Zweigbergk <martinvonz@google.com>
parents:
40064
diff
changeset
|
1886 If `match` is given, then that will be intersected with the narrow |
4fd0fac48922
localrepo: allow narrowmatch() to accept matcher to intersect with
Martin von Zweigbergk <martinvonz@google.com>
parents:
40064
diff
changeset
|
1887 matcher. |
40086
41fcdfe3bfeb
narrow: allow repo.narrowmatch(match) to include exact matches from "match"
Martin von Zweigbergk <martinvonz@google.com>
parents:
40082
diff
changeset
|
1888 |
41fcdfe3bfeb
narrow: allow repo.narrowmatch(match) to include exact matches from "match"
Martin von Zweigbergk <martinvonz@google.com>
parents:
40082
diff
changeset
|
1889 If `includeexact` is True, then any exact matches from `match` will |
41fcdfe3bfeb
narrow: allow repo.narrowmatch(match) to include exact matches from "match"
Martin von Zweigbergk <martinvonz@google.com>
parents:
40082
diff
changeset
|
1890 be included even if they're outside the narrowspec. |
40082
4fd0fac48922
localrepo: allow narrowmatch() to accept matcher to intersect with
Martin von Zweigbergk <martinvonz@google.com>
parents:
40064
diff
changeset
|
1891 """ |
4fd0fac48922
localrepo: allow narrowmatch() to accept matcher to intersect with
Martin von Zweigbergk <martinvonz@google.com>
parents:
40064
diff
changeset
|
1892 if match: |
40086
41fcdfe3bfeb
narrow: allow repo.narrowmatch(match) to include exact matches from "match"
Martin von Zweigbergk <martinvonz@google.com>
parents:
40082
diff
changeset
|
1893 if includeexact and not self._narrowmatch.always(): |
41fcdfe3bfeb
narrow: allow repo.narrowmatch(match) to include exact matches from "match"
Martin von Zweigbergk <martinvonz@google.com>
parents:
40082
diff
changeset
|
1894 # do not exclude explicitly-specified paths so that they can |
41fcdfe3bfeb
narrow: allow repo.narrowmatch(match) to include exact matches from "match"
Martin von Zweigbergk <martinvonz@google.com>
parents:
40082
diff
changeset
|
1895 # be warned later on |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41675
diff
changeset
|
1896 em = matchmod.exact(match.files()) |
40086
41fcdfe3bfeb
narrow: allow repo.narrowmatch(match) to include exact matches from "match"
Martin von Zweigbergk <martinvonz@google.com>
parents:
40082
diff
changeset
|
1897 nm = matchmod.unionmatcher([self._narrowmatch, em]) |
41fcdfe3bfeb
narrow: allow repo.narrowmatch(match) to include exact matches from "match"
Martin von Zweigbergk <martinvonz@google.com>
parents:
40082
diff
changeset
|
1898 return matchmod.intersectmatchers(match, nm) |
40082
4fd0fac48922
localrepo: allow narrowmatch() to accept matcher to intersect with
Martin von Zweigbergk <martinvonz@google.com>
parents:
40064
diff
changeset
|
1899 return matchmod.intersectmatchers(match, self._narrowmatch) |
36471
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1900 return self._narrowmatch |
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1901 |
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1902 def setnarrowpats(self, newincludes, newexcludes): |
39557
623081f2abc2
narrow: remove hack to write narrowspec to shared .hg directory
Yuya Nishihara <yuya@tcha.org>
parents:
39551
diff
changeset
|
1903 narrowspec.save(self, newincludes, newexcludes) |
36471
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1904 self.invalidate(clearfilecache=True) |
c28b6d609c47
narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents:
36422
diff
changeset
|
1905 |
44104
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1906 @unfilteredpropertycache |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1907 def _quick_access_changeid_null(self): |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1908 return { |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
1909 b'null': (nullrev, self.nodeconstants.nullid), |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
1910 nullrev: (nullrev, self.nodeconstants.nullid), |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
1911 self.nullid: (nullrev, self.nullid), |
44104
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1912 } |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1913 |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1914 @unfilteredpropertycache |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1915 def _quick_access_changeid_wc(self): |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1916 # also fast path access to the working copy parents |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1917 # however, only do it for filter that ensure wc is visible. |
45464
4a0ccbecbaa6
repo: avoid copying/updating a dict on every `repo.__getitem__`
Kyle Lippincott <spectral@google.com>
parents:
45433
diff
changeset
|
1918 quick = self._quick_access_changeid_null.copy() |
44104
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1919 cl = self.unfiltered().changelog |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1920 for node in self.dirstate.parents(): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
1921 if node == self.nullid: |
44104
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1922 continue |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1923 rev = cl.index.get_rev(node) |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1924 if rev is None: |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1925 # unknown working copy parent case: |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1926 # |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1927 # skip the fast path and let higher code deal with it |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1928 continue |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1929 pair = (rev, node) |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1930 quick[rev] = pair |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1931 quick[node] = pair |
44107
5a012404503b
localrepo: also fast past the parents of working copies parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44106
diff
changeset
|
1932 # also add the parents of the parents |
5a012404503b
localrepo: also fast past the parents of working copies parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44106
diff
changeset
|
1933 for r in cl.parentrevs(rev): |
5a012404503b
localrepo: also fast past the parents of working copies parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44106
diff
changeset
|
1934 if r == nullrev: |
5a012404503b
localrepo: also fast past the parents of working copies parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44106
diff
changeset
|
1935 continue |
5a012404503b
localrepo: also fast past the parents of working copies parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44106
diff
changeset
|
1936 n = cl.node(r) |
5a012404503b
localrepo: also fast past the parents of working copies parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44106
diff
changeset
|
1937 pair = (r, n) |
5a012404503b
localrepo: also fast past the parents of working copies parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44106
diff
changeset
|
1938 quick[r] = pair |
5a012404503b
localrepo: also fast past the parents of working copies parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44106
diff
changeset
|
1939 quick[n] = pair |
44105
d86dede17392
localrepo: fastpath access to "."
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44104
diff
changeset
|
1940 p1node = self.dirstate.p1() |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
1941 if p1node != self.nullid: |
44105
d86dede17392
localrepo: fastpath access to "."
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44104
diff
changeset
|
1942 quick[b'.'] = quick[p1node] |
44104
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1943 return quick |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1944 |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1945 @unfilteredmethod |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1946 def _quick_access_changeid_invalidate(self): |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1947 if '_quick_access_changeid_wc' in vars(self): |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1948 del self.__dict__['_quick_access_changeid_wc'] |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1949 |
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1950 @property |
43765
e89e3275f658
localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43763
diff
changeset
|
1951 def _quick_access_changeid(self): |
e89e3275f658
localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43763
diff
changeset
|
1952 """an helper dictionnary for __getitem__ calls |
e89e3275f658
localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43763
diff
changeset
|
1953 |
e89e3275f658
localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43763
diff
changeset
|
1954 This contains a list of symbol we can recognise right away without |
e89e3275f658
localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43763
diff
changeset
|
1955 further processing. |
e89e3275f658
localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43763
diff
changeset
|
1956 """ |
44104
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1957 if self.filtername in repoview.filter_has_wc: |
45464
4a0ccbecbaa6
repo: avoid copying/updating a dict on every `repo.__getitem__`
Kyle Lippincott <spectral@google.com>
parents:
45433
diff
changeset
|
1958 return self._quick_access_changeid_wc |
4a0ccbecbaa6
repo: avoid copying/updating a dict on every `repo.__getitem__`
Kyle Lippincott <spectral@google.com>
parents:
45433
diff
changeset
|
1959 return self._quick_access_changeid_null |
43765
e89e3275f658
localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43763
diff
changeset
|
1960 |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
1961 def __getitem__(self, changeid): |
43750
9c83d28776af
localrepo: add some basic comment for block in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43735
diff
changeset
|
1962 # dealing with special cases |
32660
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32481
diff
changeset
|
1963 if changeid is None: |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
1964 return context.workingctx(self) |
37174
bb47dc2f71a0
context: move reuse of context object to repo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37172
diff
changeset
|
1965 if isinstance(changeid, context.basectx): |
bb47dc2f71a0
context: move reuse of context object to repo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37172
diff
changeset
|
1966 return changeid |
43750
9c83d28776af
localrepo: add some basic comment for block in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43735
diff
changeset
|
1967 |
9c83d28776af
localrepo: add some basic comment for block in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43735
diff
changeset
|
1968 # dealing with multiple revisions |
23630
b9af235810cc
localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents:
23561
diff
changeset
|
1969 if isinstance(changeid, slice): |
32660
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32481
diff
changeset
|
1970 # wdirrev isn't contiguous so the slice shouldn't include it |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1971 return [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1972 self[i] |
49284
d44e3c45f0e4
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents:
49227
diff
changeset
|
1973 for i in range(*changeid.indices(len(self))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1974 if i not in self.changelog.filteredrevs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
1975 ] |
43750
9c83d28776af
localrepo: add some basic comment for block in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43735
diff
changeset
|
1976 |
43751
6237cb11753e
localrepo: extract handling of some special value in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43750
diff
changeset
|
1977 # dealing with some special values |
43765
e89e3275f658
localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43763
diff
changeset
|
1978 quick_access = self._quick_access_changeid.get(changeid) |
e89e3275f658
localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43763
diff
changeset
|
1979 if quick_access is not None: |
e89e3275f658
localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43763
diff
changeset
|
1980 rev, node = quick_access |
e89e3275f658
localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43763
diff
changeset
|
1981 return context.changectx(self, rev, node, maybe_filtered=False) |
43752
657bdb724b47
localrepo: extract handling of some special value in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43751
diff
changeset
|
1982 if changeid == b'tip': |
657bdb724b47
localrepo: extract handling of some special value in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43751
diff
changeset
|
1983 node = self.changelog.tip() |
657bdb724b47
localrepo: extract handling of some special value in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43751
diff
changeset
|
1984 rev = self.changelog.rev(node) |
657bdb724b47
localrepo: extract handling of some special value in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43751
diff
changeset
|
1985 return context.changectx(self, rev, node) |
657bdb724b47
localrepo: extract handling of some special value in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43751
diff
changeset
|
1986 |
43750
9c83d28776af
localrepo: add some basic comment for block in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43735
diff
changeset
|
1987 # dealing with arbitrary values |
32660
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32481
diff
changeset
|
1988 try: |
39958
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
1989 if isinstance(changeid, int): |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
1990 node = self.changelog.node(changeid) |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
1991 rev = changeid |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1992 elif changeid == b'.': |
39958
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
1993 # this is a hack to delay/avoid loading obsmarkers |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
1994 # when we know that '.' won't be hidden |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
1995 node = self.dirstate.p1() |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
1996 rev = self.unfiltered().changelog.rev(node) |
47042
c5e1cc0b4c77
core: don't hard-code node length
Joerg Sonnenberger <joerg@bec.de>
parents:
47041
diff
changeset
|
1997 elif len(changeid) == self.nodeconstants.nodelen: |
39958
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
1998 try: |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
1999 node = changeid |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2000 rev = self.changelog.rev(changeid) |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2001 except error.FilteredLookupError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2002 changeid = hex(changeid) # for the error message |
39958
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2003 raise |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2004 except LookupError: |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2005 # check if it might have come from damaged dirstate |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2006 # |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2007 # XXX we could avoid the unfiltered if we had a recognizable |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2008 # exception for filtered changeset access |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2009 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2010 self.local() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2011 and changeid in self.unfiltered().dirstate.parents() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2012 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2013 msg = _(b"working directory has unknown parent '%s'!") |
39958
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2014 raise error.Abort(msg % short(changeid)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2015 changeid = hex(changeid) # for the error message |
40063
f84d7ed3bb35
repo: remove the last few "pass" statements in localrepo.__getitem__
Martin von Zweigbergk <martinvonz@google.com>
parents:
40056
diff
changeset
|
2016 raise |
39958
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2017 |
47041
a407fe56d6e8
core: don't hard-code hex node lengths
Joerg Sonnenberger <joerg@bec.de>
parents:
47012
diff
changeset
|
2018 elif len(changeid) == 2 * self.nodeconstants.nodelen: |
40063
f84d7ed3bb35
repo: remove the last few "pass" statements in localrepo.__getitem__
Martin von Zweigbergk <martinvonz@google.com>
parents:
40056
diff
changeset
|
2019 node = bin(changeid) |
f84d7ed3bb35
repo: remove the last few "pass" statements in localrepo.__getitem__
Martin von Zweigbergk <martinvonz@google.com>
parents:
40056
diff
changeset
|
2020 rev = self.changelog.rev(node) |
39958
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2021 else: |
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2022 raise error.ProgrammingError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2023 b"unsupported changeid '%s' of type %s" |
43710
c5bcd946a34b
py3: use pycompat.bytestr() instead of pycompat.sysstr()
Manuel Jacob <me@manueljacob.de>
parents:
43587
diff
changeset
|
2024 % (changeid, pycompat.bytestr(type(changeid))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2025 ) |
39958
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2026 |
40064
5c3585a58845
repo: create changectx in a single place in localrepo.__getitem__
Martin von Zweigbergk <martinvonz@google.com>
parents:
40063
diff
changeset
|
2027 return context.changectx(self, rev, node) |
5c3585a58845
repo: create changectx in a single place in localrepo.__getitem__
Martin von Zweigbergk <martinvonz@google.com>
parents:
40063
diff
changeset
|
2028 |
39958
3d35304bd09b
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
39957
diff
changeset
|
2029 except (error.FilteredIndexError, error.FilteredLookupError): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2030 raise error.FilteredRepoLookupError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2031 _(b"filtered revision '%s'") % pycompat.bytestr(changeid) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2032 ) |
40063
f84d7ed3bb35
repo: remove the last few "pass" statements in localrepo.__getitem__
Martin von Zweigbergk <martinvonz@google.com>
parents:
40056
diff
changeset
|
2033 except (IndexError, LookupError): |
40353
a2ebdca4d10e
localrepo: ensure we properly %-format int in exception throw
Augie Fackler <augie@google.com>
parents:
40324
diff
changeset
|
2034 raise error.RepoLookupError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2035 _(b"unknown revision '%s'") % pycompat.bytestr(changeid) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2036 ) |
32660
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32481
diff
changeset
|
2037 except error.WdirUnsupported: |
a722c8e17363
localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents:
32481
diff
changeset
|
2038 return context.workingctx(self) |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
2039 |
9924
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
2040 def __contains__(self, changeid): |
46114
c6ae1982b2a1
localrepo: delete obsolete comment about `prefix in repo` raising exception
Martin von Zweigbergk <martinvonz@google.com>
parents:
46096
diff
changeset
|
2041 """True if the given changeid exists""" |
9924
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
2042 try: |
24320
b9f7f3eeb99c
localrepo: extend "changeid in repo" to return True for workingctx revision
Yuya Nishihara <yuya@tcha.org>
parents:
24306
diff
changeset
|
2043 self[changeid] |
b9f7f3eeb99c
localrepo: extend "changeid in repo" to return True for workingctx revision
Yuya Nishihara <yuya@tcha.org>
parents:
24306
diff
changeset
|
2044 return True |
37797
43221a57e22f
context: translate FilteredIndex/LookupError at repo[changeid] (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37717
diff
changeset
|
2045 except error.RepoLookupError: |
9924
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
2046 return False |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
2047 |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
2048 def __nonzero__(self): |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
2049 return True |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
2050 |
31476
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31466
diff
changeset
|
2051 __bool__ = __nonzero__ |
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31466
diff
changeset
|
2052 |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
2053 def __len__(self): |
35736
29f57ce416ed
localrepo: micro-optimize __len__() to bypass repoview
Yuya Nishihara <yuya@tcha.org>
parents:
35726
diff
changeset
|
2054 # no need to pay the cost of repoview.changelog |
29f57ce416ed
localrepo: micro-optimize __len__() to bypass repoview
Yuya Nishihara <yuya@tcha.org>
parents:
35726
diff
changeset
|
2055 unfi = self.unfiltered() |
29f57ce416ed
localrepo: micro-optimize __len__() to bypass repoview
Yuya Nishihara <yuya@tcha.org>
parents:
35726
diff
changeset
|
2056 return len(unfi.changelog) |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
2057 |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
2058 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
|
2059 return iter(self.changelog) |
2155
ff255b41b4aa
support hooks written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2150
diff
changeset
|
2060 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2061 def revs(self, expr: bytes, *args): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2062 """Find revisions matching a revset. |
27071
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
2063 |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
2064 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
|
2065 %-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
|
2066 |
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29373
diff
changeset
|
2067 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
|
2068 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
|
2069 ``repo.anyrevs([expr], user=True)``. |
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29373
diff
changeset
|
2070 |
44075
2122ffa903ea
doc: fix references to `revset.abstractsmartset`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44060
diff
changeset
|
2071 Returns a smartset.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
|
2072 that contains integer revisions. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2073 """ |
41222
8aca89a694d4
revset: introduce an API that avoids `formatspec` input serialization
Boris Feld <boris.feld@octobus.net>
parents:
41202
diff
changeset
|
2074 tree = revsetlang.spectree(expr, *args) |
8aca89a694d4
revset: introduce an API that avoids `formatspec` input serialization
Boris Feld <boris.feld@octobus.net>
parents:
41202
diff
changeset
|
2075 return revset.makematcher(tree)(self) |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
2076 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2077 def set(self, expr: bytes, *args): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2078 """Find revisions matching a revset and emit changectx instances. |
27071
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
2079 |
dfb31eebd949
localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26998
diff
changeset
|
2080 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
|
2081 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
|
2082 |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29373
diff
changeset
|
2083 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
|
2084 user aliases, consider calling ``scmutil.revrange()``. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2085 """ |
15403
e27561eb4a76
localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents:
15381
diff
changeset
|
2086 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
|
2087 yield self[r] |
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
2088 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2089 def anyrevs(self, specs: bytes, user=False, localalias=None): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2090 """Find revisions matching one of the given revsets. |
31025
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
2091 |
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
2092 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
|
2093 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
|
2094 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
|
2095 ``{name: definitionstring}``. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2096 """ |
43758
09409a3fc3cc
localrepo: recognize trivial "null" queries in `anyrev`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43757
diff
changeset
|
2097 if specs == [b'null']: |
09409a3fc3cc
localrepo: recognize trivial "null" queries in `anyrev`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43757
diff
changeset
|
2098 return revset.baseset([nullrev]) |
44106
bfaf4c673bec
localrepo: recognize trivial request for '.'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44105
diff
changeset
|
2099 if specs == [b'.']: |
bfaf4c673bec
localrepo: recognize trivial request for '.'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44105
diff
changeset
|
2100 quick_data = self._quick_access_changeid.get(b'.') |
bfaf4c673bec
localrepo: recognize trivial request for '.'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44105
diff
changeset
|
2101 if quick_data is not None: |
bfaf4c673bec
localrepo: recognize trivial request for '.'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44105
diff
changeset
|
2102 return revset.baseset([quick_data[0]]) |
31025
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
2103 if user: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2104 m = revset.matchany( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2105 self.ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2106 specs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2107 lookup=revset.lookupfn(self), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2108 localalias=localalias, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2109 ) |
31025
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
2110 else: |
33336
4672db164c98
revset: make repo.anyrevs accept customized alias override (API)
Jun Wu <quark@fb.com>
parents:
33302
diff
changeset
|
2111 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
|
2112 return m(self) |
6cf2857526c7
scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents:
31024
diff
changeset
|
2113 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2114 def url(self) -> bytes: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2115 return b'file:' + self.root |
2673
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
2116 |
1718
c1996b84d4f5
make hook code nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1717
diff
changeset
|
2117 def hook(self, name, throw=False, **args): |
21866
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
2118 """Call a hook, passing this repo instance. |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
2119 |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
2120 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
|
2121 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
|
2122 replacing code that is expected to call a hook. |
a2ca9dcb4b77
localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21702
diff
changeset
|
2123 """ |
4622
fff50306e6dd
hooks: separate hook code into a separate module
Matt Mackall <mpm@selenic.com>
parents:
4619
diff
changeset
|
2124 return hook.hook(self.ui, self, name, throw, **args) |
487 | 2125 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
2126 @filteredpropertycache |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2127 def _tagscache(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2128 """Returns a tagscache object that contains various tags related |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2129 caches.""" |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2130 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2131 # 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
|
2132 # function (this one) and the rest simply fetch things from it. |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48935
diff
changeset
|
2133 class tagscache: |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2134 def __init__(self): |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2135 # 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
|
2136 # 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
|
2137 # '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
|
2138 # 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
|
2139 # 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
|
2140 self.tags = self.tagtypes = None |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2141 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2142 self.nodetagscache = self.tagslist = None |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2143 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2144 cache = tagscache() |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2145 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
|
2146 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2147 return cache |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2148 |
343 | 2149 def tags(self): |
2150 '''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
|
2151 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
|
2152 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
|
2153 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
|
2154 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
|
2155 tags = self._tagscache.tags |
40745
300f8564220f
tags: cache `repo.changelog` access when checking tags nodes
Boris Feld <boris.feld@octobus.net>
parents:
40729
diff
changeset
|
2156 rev = self.changelog.rev |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
2157 for k, v in tags.items(): |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
2158 try: |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
2159 # ignore tags to unknown nodes |
40745
300f8564220f
tags: cache `repo.changelog` access when checking tags nodes
Boris Feld <boris.feld@octobus.net>
parents:
40729
diff
changeset
|
2160 rev(v) |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
2161 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
|
2162 except (error.LookupError, ValueError): |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
2163 pass |
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
2164 return t |
4210
caff92047e87
Refactor tags code to prepare for improving the algorithm
Matt Mackall <mpm@selenic.com>
parents:
4178
diff
changeset
|
2165 |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
2166 def _findtags(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2167 """Do the hard work of finding tags. Return a pair of dicts |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
2168 (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
|
2169 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
|
2170 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
|
2171 should be aware that the returned dicts will be retained for the |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2172 duration of the localrepo object.""" |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
2173 |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
2174 # 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
|
2175 # 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
|
2176 # 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
|
2177 # 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
|
2178 # quo fine? |
4210
caff92047e87
Refactor tags code to prepare for improving the algorithm
Matt Mackall <mpm@selenic.com>
parents:
4178
diff
changeset
|
2179 |
31709
c34c170b25f3
tags: only return 'alltags' in 'findglobaltags'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31706
diff
changeset
|
2180 # 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
|
2181 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
|
2182 # map tag name to tag type |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44445
diff
changeset
|
2183 tagtypes = {tag: b'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
|
2184 |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
2185 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
|
2186 |
9152
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
2187 # 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
|
2188 # 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
|
2189 # 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
|
2190 # local encoding. |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
2191 tags = {} |
50022
e333cc169c45
dirstate: rename `pendingparentchange` to `is_changing_parents`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49959
diff
changeset
|
2192 for name, (node, hist) in alltags.items(): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
2193 if node != self.nullid: |
16371
4417eb761ba8
tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents:
16361
diff
changeset
|
2194 tags[encoding.tolocal(name)] = node |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2195 tags[b'tip'] = self.changelog.tip() |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44445
diff
changeset
|
2196 tagtypes = { |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
2197 encoding.tolocal(name): value for (name, value) in tagtypes.items() |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44445
diff
changeset
|
2198 } |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
2199 return (tags, tagtypes) |
343 | 2200 |
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
2201 def tagtype(self, tagname): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2202 """ |
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
2203 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
|
2204 |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
2205 '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
|
2206 '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
|
2207 None : tag does not exist |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2208 """ |
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
2209 |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2210 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
|
2211 |
343 | 2212 def tagslist(self): |
2213 '''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
|
2214 if not self._tagscache.tagslist: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2215 l = [] |
48925
1414b65303d5
localrepo: remove pycompat.iteritems()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
2216 for t, n in self.tags().items(): |
22201
269688a398c4
cleanup: fix some list comprehension redefinitions of existing vars
Mads Kiilerich <madski@unity3d.com>
parents:
22080
diff
changeset
|
2217 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
|
2218 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
|
2219 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2220 return self._tagscache.tagslist |
343 | 2221 |
2222 def nodetags(self, node): | |
2223 '''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
|
2224 if not self._tagscache.nodetagscache: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2225 nodetagscache = {} |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
2226 for t, n in self._tagscache.tags.items(): |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2227 nodetagscache.setdefault(n, []).append(t) |
48935
2cce2fa5bcf7
py3: replace pycompat.itervalues(x) with x.values()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48925
diff
changeset
|
2228 for tags in nodetagscache.values(): |
11047
c7dbd6c4877a
tags: return tags in sorted order
Eric Eisner <ede@mit.edu>
parents:
10970
diff
changeset
|
2229 tags.sort() |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2230 self._tagscache.nodetagscache = nodetagscache |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2231 return self._tagscache.nodetagscache.get(node, []) |
343 | 2232 |
13384
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
2233 def nodebookmarks(self, node): |
27166
263db31329a6
localrepo: document nodebookmarks
Augie Fackler <augie@google.com>
parents:
27165
diff
changeset
|
2234 """return the list of bookmarks pointing to the specified node""" |
37848
6e2259847f5f
bookmarks: extract function that looks up bookmark names by node
Yuya Nishihara <yuya@tcha.org>
parents:
37810
diff
changeset
|
2235 return self._bookmarks.names(node) |
13384
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
2236 |
12066
d01e28657429
localrepo: introduce method for explicit branch cache update
Georg Brandl <georg@python.org>
parents:
12035
diff
changeset
|
2237 def branchmap(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2238 """returns a dictionary {branch: [branchheads]} with branchheads |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2239 ordered by increasing revision number""" |
41615
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41529
diff
changeset
|
2240 return self._branchcaches[self] |
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
|
2241 |
24373
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
2242 @unfilteredmethod |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
2243 def revbranchcache(self): |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
2244 if not self._revbranchcache: |
51901
f0e07efc199f
rev-branch-cache: move the code in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51895
diff
changeset
|
2245 unfi = self.unfiltered() |
f0e07efc199f
rev-branch-cache: move the code in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51895
diff
changeset
|
2246 self._revbranchcache = rev_branch_cache.revbranchcache(unfi) |
24373
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
2247 return self._revbranchcache |
59cc09240afb
revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents:
24320
diff
changeset
|
2248 |
46371
0903d6b9b1df
repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents:
46334
diff
changeset
|
2249 def register_changeset(self, rev, changelogrevision): |
46372
3e91d9978bec
branchmap: update rev-branch-cache incrementally
Joerg Sonnenberger <joerg@bec.de>
parents:
46371
diff
changeset
|
2250 self.revbranchcache().setdata(rev, changelogrevision) |
46371
0903d6b9b1df
repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents:
46334
diff
changeset
|
2251 |
23775
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
2252 def branchtip(self, branch, ignoremissing=False): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2253 """return the tip node for a given branch |
23775
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
2254 |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
2255 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
|
2256 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
|
2257 (e.g. namespace). |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
2258 |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2259 """ |
20187
4d6d5ef88538
localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents:
20184
diff
changeset
|
2260 try: |
4d6d5ef88538
localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents:
20184
diff
changeset
|
2261 return self.branchmap().branchtip(branch) |
4d6d5ef88538
localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents:
20184
diff
changeset
|
2262 except KeyError: |
23775
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
2263 if not ignoremissing: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2264 raise error.RepoLookupError(_(b"unknown branch '%s'") % branch) |
23775
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
2265 else: |
885c0290f7d5
localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents:
23749
diff
changeset
|
2266 pass |
16719
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16716
diff
changeset
|
2267 |
343 | 2268 def lookup(self, key): |
42079
fcd7a91dec23
localrepo: don't allow lookup of working directory revision
Martin von Zweigbergk <martinvonz@google.com>
parents:
42062
diff
changeset
|
2269 node = scmutil.revsymbol(self, key).node() |
fcd7a91dec23
localrepo: don't allow lookup of working directory revision
Martin von Zweigbergk <martinvonz@google.com>
parents:
42062
diff
changeset
|
2270 if node is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2271 raise error.RepoLookupError(_(b"unknown revision '%s'") % key) |
42079
fcd7a91dec23
localrepo: don't allow lookup of working directory revision
Martin von Zweigbergk <martinvonz@google.com>
parents:
42062
diff
changeset
|
2272 return node |
67 | 2273 |
37351
fdd22bf6398f
localrepo: drop "remote" argument from lookupbranch() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37321
diff
changeset
|
2274 def lookupbranch(self, key): |
42004
0bd730fbcc2b
branchcache: introduce hasbranch()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42001
diff
changeset
|
2275 if self.branchmap().hasbranch(key): |
10960
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
2276 return key |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
2277 |
37352
92171562c7f3
localrepo: use revsymbol in lookupbranch() too
Martin von Zweigbergk <martinvonz@google.com>
parents:
37351
diff
changeset
|
2278 return scmutil.revsymbol(self, key).branch() |
10960
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
2279 |
13723
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
2280 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
|
2281 cl = self.changelog |
43555
ded3d545b6f0
index: use `index.get_rev` in `localrepo.known`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43537
diff
changeset
|
2282 get_rev = cl.index.get_rev |
27319
b64b6fdc5c9b
discovery: properly filter changeset in 'peer.known' (issue4982)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27291
diff
changeset
|
2283 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
|
2284 result = [] |
816209eaf963
phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15888
diff
changeset
|
2285 for n in nodes: |
43555
ded3d545b6f0
index: use `index.get_rev` in `localrepo.known`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43537
diff
changeset
|
2286 r = get_rev(n) |
27319
b64b6fdc5c9b
discovery: properly filter changeset in 'peer.known' (issue4982)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27291
diff
changeset
|
2287 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
|
2288 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
|
2289 return result |
13723
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
2290 |
926 | 2291 def local(self): |
14603
68a43fdd7d80
localrepo: local() returns self
Matt Mackall <mpm@selenic.com>
parents:
14549
diff
changeset
|
2292 return self |
926 | 2293 |
25623
0bee97fa1fa8
publishing: add helper method to localrepo
Matt Mackall <mpm@selenic.com>
parents:
25290
diff
changeset
|
2294 def publishing(self): |
25625
ce9e231265c1
publishing: unconditionally trust publishing flag
Matt Mackall <mpm@selenic.com>
parents:
25624
diff
changeset
|
2295 # 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
|
2296 # so that we don't finalize changes shared between users via ssh or nfs |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2297 return self.ui.configbool(b'phases', b'publish', untrusted=True) |
25623
0bee97fa1fa8
publishing: add helper method to localrepo
Matt Mackall <mpm@selenic.com>
parents:
25290
diff
changeset
|
2298 |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
2299 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
|
2300 # 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
|
2301 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
|
2302 return False |
25624
f0745da75056
publishing: use new helper method
Matt Mackall <mpm@selenic.com>
parents:
25623
diff
changeset
|
2303 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
|
2304 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
|
2305 # if publishing we can't copy if there is filtered content |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2306 return not self.filtered(b'visible').changelog.filteredrevs |
17192
1ac628cd7113
peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
17183
diff
changeset
|
2307 |
23666
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
2308 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
|
2309 '''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
|
2310 if self.sharedpath != self.path: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2311 return b'store' |
23666
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
2312 return None |
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23648
diff
changeset
|
2313 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2314 def wjoin(self, f: bytes, *insidef: bytes) -> bytes: |
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
|
2315 return self.vfs.reljoin(self.root, f, *insidef) |
244 | 2316 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
2317 def setparents(self, p1, p2=None): |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
2318 if p2 is None: |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
2319 p2 = self.nullid |
44052
b74270da5eee
workingctx: move setparents() logic from localrepo to mirror overlayworkingctx
Martin von Zweigbergk <martinvonz@google.com>
parents:
44043
diff
changeset
|
2320 self[None].setparents(p1, p2) |
44104
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
2321 self._quick_access_changeid_invalidate() |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16536
diff
changeset
|
2322 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2323 def filectx(self, path: bytes, changeid=None, fileid=None, changectx=None): |
40718
5bcf264bb1a0
localrepo: correct docstring of filectx()
Yuya Nishihara <yuya@tcha.org>
parents:
40535
diff
changeset
|
2324 """changeid must be a changeset revision, if specified. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2325 fileid can be a file revision or node.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2326 return context.filectx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2327 self, path, changeid, fileid, changectx=changectx |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2328 ) |
2564
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
2329 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2330 def getcwd(self) -> bytes: |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
839
diff
changeset
|
2331 return self.dirstate.getcwd() |
627 | 2332 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2333 def pathto(self, f: bytes, cwd: Optional[bytes] = None) -> bytes: |
4525
78b6add1f966
Add dirstate.pathto and localrepo.pathto.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4516
diff
changeset
|
2334 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
|
2335 |
11698
9df481f8036d
localrepo: refactor filter computation
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11669
diff
changeset
|
2336 def _loadfilter(self, filter): |
37137
db90a5793103
localrepo: make filterpats private (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37135
diff
changeset
|
2337 if filter not in self._filterpats: |
1258 | 2338 l = [] |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
2339 for pat, cmd in self.ui.configitems(filter): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2340 if cmd == b'!': |
7226
b71a52f101dc
Make it possible to disable filtering for a pattern.
Mads Kiilerich <mads@kiilerich.com>
parents:
7208
diff
changeset
|
2341 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2342 mf = matchmod.match(self.root, b'', [pat]) |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
2343 fn = None |
6066
f3a8b5360100
Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents:
6065
diff
changeset
|
2344 params = cmd |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
2345 for name, filterfn in self._datafilters.items(): |
6210
942287cb1f57
Removed trailing spaces from everything except test output
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6201
diff
changeset
|
2346 if cmd.startswith(name): |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
2347 fn = filterfn |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2348 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
|
2349 break |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
2350 if not fn: |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
2351 fn = lambda s, c, **kwargs: procutil.filter(s, c) |
43201
6ceb3721e203
localrepo: debug log of filter name when filtering through a function
Mads Kiilerich <mads@kiilerich.com>
parents:
43167
diff
changeset
|
2352 fn.__name__ = 'commandfilter' |
5967
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
2353 # Wrap old filters not supporting keyword arguments |
36178
646002338365
py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents:
36009
diff
changeset
|
2354 if not pycompat.getargspec(fn)[2]: |
5967
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
2355 oldfn = fn |
43202
8864aa96f1f6
localrepo: fix variable binding in handling of old filters
Mads Kiilerich <mads@kiilerich.com>
parents:
43201
diff
changeset
|
2356 fn = lambda s, c, oldfn=oldfn, **kwargs: oldfn(s, c) |
43201
6ceb3721e203
localrepo: debug log of filter name when filtering through a function
Mads Kiilerich <mads@kiilerich.com>
parents:
43167
diff
changeset
|
2357 fn.__name__ = 'compat-' + oldfn.__name__ |
6066
f3a8b5360100
Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents:
6065
diff
changeset
|
2358 l.append((mf, fn, params)) |
37137
db90a5793103
localrepo: make filterpats private (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37135
diff
changeset
|
2359 self._filterpats[filter] = l |
db90a5793103
localrepo: make filterpats private (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37135
diff
changeset
|
2360 return self._filterpats[filter] |
1258 | 2361 |
12707
2216ab103ea8
localrepo: load filter patterns outside of _filter
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12706
diff
changeset
|
2362 def _filter(self, filterpats, filename, data): |
2216ab103ea8
localrepo: load filter patterns outside of _filter
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12706
diff
changeset
|
2363 for mf, fn, cmd in filterpats: |
1258 | 2364 if mf(filename): |
43201
6ceb3721e203
localrepo: debug log of filter name when filtering through a function
Mads Kiilerich <mads@kiilerich.com>
parents:
43167
diff
changeset
|
2365 self.ui.debug( |
6ceb3721e203
localrepo: debug log of filter name when filtering through a function
Mads Kiilerich <mads@kiilerich.com>
parents:
43167
diff
changeset
|
2366 b"filtering %s through %s\n" |
6ceb3721e203
localrepo: debug log of filter name when filtering through a function
Mads Kiilerich <mads@kiilerich.com>
parents:
43167
diff
changeset
|
2367 % (filename, cmd or pycompat.sysbytes(fn.__name__)) |
6ceb3721e203
localrepo: debug log of filter name when filtering through a function
Mads Kiilerich <mads@kiilerich.com>
parents:
43167
diff
changeset
|
2368 ) |
5967
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
2369 data = fn(data, cmd, ui=self.ui, repo=self, filename=filename) |
1258 | 2370 break |
2371 | |
2372 return data | |
1019
a9cca981c423
Create helper functions for I/O to files in the working directory
mpm@selenic.com
parents:
1013
diff
changeset
|
2373 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
2374 @unfilteredpropertycache |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
2375 def _encodefilterpats(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2376 return self._loadfilter(b'encode') |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
2377 |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
2378 @unfilteredpropertycache |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
2379 def _decodefilterpats(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2380 return self._loadfilter(b'decode') |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
2381 |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
2382 def adddatafilter(self, name, filter): |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
2383 self._datafilters[name] = filter |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
2384 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2385 def wread(self, filename: bytes) -> bytes: |
31428
9b361478b03a
localrepo: use self.wvfs.islink directly
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31418
diff
changeset
|
2386 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
|
2387 data = self.wvfs.readlink(filename) |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
2388 else: |
23854
f6070d3a9cb8
localrepo: remove all internal uses of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23853
diff
changeset
|
2389 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
|
2390 return self._filter(self._encodefilterpats, filename, data) |
1258 | 2391 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2392 def wwrite( |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2393 self, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2394 filename: bytes, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2395 data: bytes, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2396 flags: bytes, |
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2397 backgroundclose=False, |
51284
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
2398 **kwargs, |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2399 ) -> int: |
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
|
2400 """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
|
2401 |
21b33f0460e0
revert: apply normallookup on reverted file if size isn't changed (issue4583)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24825
diff
changeset
|
2402 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
|
2403 """ |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
2404 data = self._filter(self._decodefilterpats, filename, data) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2405 if b'l' in flags: |
23854
f6070d3a9cb8
localrepo: remove all internal uses of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23853
diff
changeset
|
2406 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
|
2407 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2408 self.wvfs.write( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2409 filename, data, backgroundclose=backgroundclose, **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2410 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2411 if b'x' in flags: |
18951
d13916a00b7e
localrepo: use "vfs.setflags()" instead of "util.setflags()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18950
diff
changeset
|
2412 self.wvfs.setflags(filename, False, True) |
35726
45b678bf3a78
atomicupdate: add an experimental option to use atomictemp when updating
Boris Feld <boris.feld@octobus.net>
parents:
35725
diff
changeset
|
2413 else: |
45b678bf3a78
atomicupdate: add an experimental option to use atomictemp when updating
Boris Feld <boris.feld@octobus.net>
parents:
35725
diff
changeset
|
2414 self.wvfs.setflags(filename, False, 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
|
2415 return len(data) |
1258 | 2416 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
2417 def wwritedata(self, filename: bytes, data: bytes) -> bytes: |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
2418 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
|
2419 |
23379
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
2420 def currenttransaction(self): |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
2421 """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
|
2422 if self._transref: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
2423 tr = self._transref() |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
2424 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
2425 tr = None |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
2426 |
8072
ecf7795479d5
transaction: support multiple, separate transactions
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7948
diff
changeset
|
2427 if tr and tr.running(): |
23379
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
2428 return tr |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
2429 return None |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
2430 |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
2431 def transaction(self, desc, report=None): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2432 if self.ui.configbool(b'devel', b'all-warnings') or self.ui.configbool( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2433 b'devel', b'check-locks' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2434 ): |
29705
41689e293994
develwarn: use the lock helper in local repo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29417
diff
changeset
|
2435 if self._currentlock(self._lockref) is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2436 raise error.ProgrammingError(b'transaction requires locking') |
23379
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
2437 tr = self.currenttransaction() |
86c6f06feb04
localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23311
diff
changeset
|
2438 if tr is not None: |
36819
aff5996f3043
transaction: add a name and a __repr__ implementation (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
36554
diff
changeset
|
2439 return tr.nest(name=desc) |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
2440 |
5865
e7127f669edb
transactions: don't show a backtrace when journal exists
Matt Mackall <mpm@selenic.com>
parents:
5814
diff
changeset
|
2441 # abort here if the journal already exists |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2442 if self.svfs.exists(b"journal"): |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
2443 raise error.RepoError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2444 _(b"abandoned transaction found"), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2445 hint=_(b"run 'hg recover' to clean up transaction"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2446 ) |
5865
e7127f669edb
transactions: don't show a backtrace when journal exists
Matt Mackall <mpm@selenic.com>
parents:
5814
diff
changeset
|
2447 |
50082
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2448 # At that point your dirstate should be clean: |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2449 # |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2450 # - If you don't have the wlock, why would you still have a dirty |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2451 # dirstate ? |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2452 # |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2453 # - If you hold the wlock, you should not be opening a transaction in |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2454 # the middle of a `distate.changing_*` block. The transaction needs to |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2455 # be open before that and wrap the change-context. |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2456 # |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2457 # - If you are not within a `dirstate.changing_*` context, why is our |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2458 # dirstate dirty? |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2459 if self.dirstate._dirty: |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2460 m = "cannot open a transaction with a dirty dirstate" |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2461 raise error.ProgrammingError(m) |
a66926099c0f
localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50071
diff
changeset
|
2462 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2463 idbase = b"%.40f#%f" % (random.random(), time.time()) |
44060
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
44052
diff
changeset
|
2464 ha = hex(hashutil.sha1(idbase).digest()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2465 txnid = b'TXN:' + ha |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2466 self.hook(b'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
|
2467 |
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
2468 self._writejournal(desc) |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
2469 if report: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
2470 rp = report |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
2471 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24284
diff
changeset
|
2472 rp = self.ui.warn |
50281
f34887316f1f
undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50267
diff
changeset
|
2473 vfsmap = self.vfs_map |
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
|
2474 # 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
|
2475 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
|
2476 # 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
|
2477 # |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
2478 # 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
|
2479 # 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
|
2480 # 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
|
2481 # 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
|
2482 # 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
|
2483 # 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
|
2484 # |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
2485 # 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
|
2486 # 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
|
2487 # 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
|
2488 # 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
|
2489 # 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
|
2490 # |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
2491 # 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
|
2492 # 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
|
2493 # |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
2494 # 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
|
2495 # 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
|
2496 # 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
|
2497 # ``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
|
2498 # 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
|
2499 # 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
|
2500 # 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
|
2501 # |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
2502 # <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
|
2503 # |
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
2504 # 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
|
2505 # "-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
|
2506 # "+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
|
2507 # "-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
|
2508 # "+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
|
2509 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
|
2510 # experimental config: experimental.hook-track-tags |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2511 shouldtracktags = self.ui.configbool( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2512 b'experimental', b'hook-track-tags' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2513 ) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2514 if desc != b'strip' and shouldtracktags: |
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
|
2515 oldheads = self.changelog.headrevs() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2516 |
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
|
2517 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
|
2518 repo = reporef() |
46792
7e08fa9b3d13
typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46572
diff
changeset
|
2519 assert repo is not None # help pytype |
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
|
2520 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
|
2521 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
|
2522 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
|
2523 # 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
|
2524 # 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
|
2525 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
|
2526 if changes: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2527 tr2.hookargs[b'tag_moved'] = b'1' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2528 with repo.vfs( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2529 b'changes/tags.changes', b'w', atomictemp=True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2530 ) as changesfile: |
31996
e6e1884df298
track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31995
diff
changeset
|
2531 # 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
|
2532 # 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
|
2533 # 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
|
2534 tagsmod.writediff(changesfile, changes) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2535 |
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
|
2536 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
|
2537 """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
|
2538 # 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
|
2539 # 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
|
2540 # |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
2541 # 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
|
2542 # 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
|
2543 # 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
|
2544 # |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
2545 # 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
|
2546 # 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
|
2547 # 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
|
2548 # |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
2549 # 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
|
2550 # 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
|
2551 # |
b36318e6d2ef
track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31819
diff
changeset
|
2552 # 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
|
2553 # 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
|
2554 tracktags(tr2) |
34709
c212947273a7
bookmark: add a dedicated pretxnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents:
34708
diff
changeset
|
2555 repo = reporef() |
46792
7e08fa9b3d13
typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46572
diff
changeset
|
2556 assert repo is not None # help pytype |
42969
76608f9f27f6
singlehead: introduce special handling of closed heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2557 |
43734
88a306478556
singlehead: making config item a bool again
Georges Racinet <georges.racinet@octobus.net>
parents:
43710
diff
changeset
|
2558 singleheadopt = (b'experimental', b'single-head-per-branch') |
88a306478556
singlehead: making config item a bool again
Georges Racinet <georges.racinet@octobus.net>
parents:
43710
diff
changeset
|
2559 singlehead = repo.ui.configbool(*singleheadopt) |
42969
76608f9f27f6
singlehead: introduce special handling of closed heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2560 if singlehead: |
43734
88a306478556
singlehead: making config item a bool again
Georges Racinet <georges.racinet@octobus.net>
parents:
43710
diff
changeset
|
2561 singleheadsub = repo.ui.configsuboptions(*singleheadopt)[1] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2562 accountclosed = singleheadsub.get( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2563 b"account-closed-heads", False |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2564 ) |
46096
4d5e2fd53707
singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents:
46004
diff
changeset
|
2565 if singleheadsub.get(b"public-changes-only", False): |
4d5e2fd53707
singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents:
46004
diff
changeset
|
2566 filtername = b"immutable" |
4d5e2fd53707
singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents:
46004
diff
changeset
|
2567 else: |
4d5e2fd53707
singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents:
46004
diff
changeset
|
2568 filtername = b"visible" |
4d5e2fd53707
singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents:
46004
diff
changeset
|
2569 scmutil.enforcesinglehead( |
4d5e2fd53707
singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents:
46004
diff
changeset
|
2570 repo, tr2, desc, accountclosed, filtername |
4d5e2fd53707
singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents:
46004
diff
changeset
|
2571 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2572 if hook.hashook(repo.ui, b'pretxnclose-bookmark'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2573 for name, (old, new) in sorted( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2574 tr.changes[b'bookmarks'].items() |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2575 ): |
34709
c212947273a7
bookmark: add a dedicated pretxnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents:
34708
diff
changeset
|
2576 args = tr.hookargs.copy() |
c212947273a7
bookmark: add a dedicated pretxnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents:
34708
diff
changeset
|
2577 args.update(bookmarks.preparehookargs(name, old, new)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2578 repo.hook( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2579 b'pretxnclose-bookmark', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2580 throw=True, |
51284
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
2581 **pycompat.strkwargs(args), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2582 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2583 if hook.hashook(repo.ui, b'pretxnclose-phase'): |
34711
f6d17075608f
phase: add a dedicated pretxnclose-phase hook
Boris Feld <boris.feld@octobus.net>
parents:
34710
diff
changeset
|
2584 cl = repo.unfiltered().changelog |
44548
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2585 for revs, (old, new) in tr.changes[b'phases']: |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2586 for rev in revs: |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2587 args = tr.hookargs.copy() |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2588 node = hex(cl.node(rev)) |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2589 args.update(phases.preparehookargs(node, old, new)) |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2590 repo.hook( |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2591 b'pretxnclose-phase', |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2592 throw=True, |
51284
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
2593 **pycompat.strkwargs(args), |
44548
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2594 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2595 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2596 repo.hook( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2597 b'pretxnclose', throw=True, **pycompat.strkwargs(tr.hookargs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2598 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2599 |
26577
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
2600 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
|
2601 repo = reporef() |
42669
36c692eb28d3
transaction: leave unfinished without crashing when not properly released
Martin von Zweigbergk <martinvonz@google.com>
parents:
42621
diff
changeset
|
2602 if repo is None: |
36c692eb28d3
transaction: leave unfinished without crashing when not properly released
Martin von Zweigbergk <martinvonz@google.com>
parents:
42621
diff
changeset
|
2603 # If the repo has been GC'd (and this release function is being |
36c692eb28d3
transaction: leave unfinished without crashing when not properly released
Martin von Zweigbergk <martinvonz@google.com>
parents:
42621
diff
changeset
|
2604 # called from transaction.__del__), there's not much we can do, |
36c692eb28d3
transaction: leave unfinished without crashing when not properly released
Martin von Zweigbergk <martinvonz@google.com>
parents:
42621
diff
changeset
|
2605 # so just leave the unfinished transaction there and let the |
36c692eb28d3
transaction: leave unfinished without crashing when not properly released
Martin von Zweigbergk <martinvonz@google.com>
parents:
42621
diff
changeset
|
2606 # user run `hg recover`. |
36c692eb28d3
transaction: leave unfinished without crashing when not properly released
Martin von Zweigbergk <martinvonz@google.com>
parents:
42621
diff
changeset
|
2607 return |
26577
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
2608 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
|
2609 # 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
|
2610 # 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
|
2611 # 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
|
2612 # 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
|
2613 # 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
|
2614 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
|
2615 else: |
8f2ff40fe9c9
localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26499
diff
changeset
|
2616 # 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
|
2617 # out) in this transaction |
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
2618 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
|
2619 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2620 tr = transaction.transaction( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2621 rp, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2622 self.svfs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2623 vfsmap, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2624 b"journal", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2625 b"undo", |
50285
473103758373
undo-files: drop the old undo rename logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50284
diff
changeset
|
2626 lambda: None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2627 self.store.createmode, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2628 validator=validate, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2629 releasefn=releasefn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2630 checkambigfiles=_cachedfiles, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2631 name=desc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2632 ) |
50284
a43f0562220c
undo-files: have the transaction directly tracks and manages journal rename
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50281
diff
changeset
|
2633 for vfs_id, path in self._journalfiles(): |
a43f0562220c
undo-files: have the transaction directly tracks and manages journal rename
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50281
diff
changeset
|
2634 tr.add_journal(vfs_id, path) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2635 tr.changes[b'origrepolen'] = len(self) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2636 tr.changes[b'obsmarkers'] = set() |
44548
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2637 tr.changes[b'phases'] = [] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2638 tr.changes[b'bookmarks'] = {} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2639 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2640 tr.hookargs[b'txnid'] = txnid |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2641 tr.hookargs[b'txnname'] = desc |
44835
09da5cf44772
hooks: provide access to transaction changes for internal hooks
Joerg Sonnenberger <joerg@bec.de>
parents:
44796
diff
changeset
|
2642 tr.hookargs[b'changes'] = tr.changes |
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
|
2643 # 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
|
2644 # 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
|
2645 # this is not expected to break anything that happen during the hooks. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2646 tr.addfinalize(b'flush-fncache', self.store.write) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2647 |
24282
db8679812f84
hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24281
diff
changeset
|
2648 def txnclosehook(tr2): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2649 """To be run if transaction is successful, will schedule a hook run""" |
27907
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
2650 # 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
|
2651 # 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
|
2652 # 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
|
2653 # fixes the function accumulation. |
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
2654 hookargs = tr2.hookargs |
e219dbfd0342
localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27846
diff
changeset
|
2655 |
43778
888bd39ed555
lock: pass "success" boolean to _afterlock callbacks
Kyle Lippincott <spectral@google.com>
parents:
43765
diff
changeset
|
2656 def hookfunc(unused_success): |
34708
ee5f0d047b41
bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents:
34520
diff
changeset
|
2657 repo = reporef() |
46792
7e08fa9b3d13
typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46572
diff
changeset
|
2658 assert repo is not None # help pytype |
7e08fa9b3d13
typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46572
diff
changeset
|
2659 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2660 if hook.hashook(repo.ui, b'txnclose-bookmark'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2661 bmchanges = sorted(tr.changes[b'bookmarks'].items()) |
34708
ee5f0d047b41
bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents:
34520
diff
changeset
|
2662 for name, (old, new) in bmchanges: |
ee5f0d047b41
bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents:
34520
diff
changeset
|
2663 args = tr.hookargs.copy() |
ee5f0d047b41
bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents:
34520
diff
changeset
|
2664 args.update(bookmarks.preparehookargs(name, old, new)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2665 repo.hook( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2666 b'txnclose-bookmark', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2667 throw=False, |
51284
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
2668 **pycompat.strkwargs(args), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2669 ) |
34708
ee5f0d047b41
bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents:
34520
diff
changeset
|
2670 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2671 if hook.hashook(repo.ui, b'txnclose-phase'): |
34710
cdf833d7de98
phase: add a dedicated txnclose-phase hook
Boris Feld <boris.feld@octobus.net>
parents:
34709
diff
changeset
|
2672 cl = repo.unfiltered().changelog |
44548
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2673 phasemv = sorted( |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2674 tr.changes[b'phases'], key=lambda r: r[0][0] |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2675 ) |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2676 for revs, (old, new) in phasemv: |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2677 for rev in revs: |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2678 args = tr.hookargs.copy() |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2679 node = hex(cl.node(rev)) |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2680 args.update(phases.preparehookargs(node, old, new)) |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2681 repo.hook( |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2682 b'txnclose-phase', |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2683 throw=False, |
51284
58d39c7865e5
usage: configure uncompressed chunk cache through resource configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51134
diff
changeset
|
2684 **pycompat.strkwargs(args), |
44548
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44482
diff
changeset
|
2685 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2686 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2687 repo.hook( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2688 b'txnclose', throw=False, **pycompat.strkwargs(hookargs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2689 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2690 |
46792
7e08fa9b3d13
typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46572
diff
changeset
|
2691 repo = reporef() |
7e08fa9b3d13
typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46572
diff
changeset
|
2692 assert repo is not None # help pytype |
7e08fa9b3d13
typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46572
diff
changeset
|
2693 repo._afterlock(hookfunc) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2694 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2695 tr.addfinalize(b'txnclose-hook', txnclosehook) |
35749
3a3b59bbe7ce
localrepo: run cache-warming transaction callback before report callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
35736
diff
changeset
|
2696 # Include a leading "-" to make it happen before the transaction summary |
3a3b59bbe7ce
localrepo: run cache-warming transaction callback before report callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
35736
diff
changeset
|
2697 # reports registered via scmutil.registersummarycallback() whose names |
3a3b59bbe7ce
localrepo: run cache-warming transaction callback before report callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
35736
diff
changeset
|
2698 # are 00-txnreport etc. That way, the caches will be warm when the |
3a3b59bbe7ce
localrepo: run cache-warming transaction callback before report callback
Martin von Zweigbergk <martinvonz@google.com>
parents:
35736
diff
changeset
|
2699 # callbacks run. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2700 tr.addpostclose(b'-warm-cache', self._buildcacheupdater(tr)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2701 |
24792
7d0421de8de3
hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24784
diff
changeset
|
2702 def txnaborthook(tr2): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2703 """To be run if transaction is aborted""" |
46792
7e08fa9b3d13
typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46572
diff
changeset
|
2704 repo = reporef() |
7e08fa9b3d13
typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46572
diff
changeset
|
2705 assert repo is not None # help pytype |
7e08fa9b3d13
typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46572
diff
changeset
|
2706 repo.hook( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2707 b'txnabort', throw=False, **pycompat.strkwargs(tr2.hookargs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2708 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2709 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2710 tr.addabort(b'txnabort-hook', txnaborthook) |
26251
5c0f5db65c6b
localrepo: refresh filecache stats only if transaction finished successfully
Yuya Nishihara <yuya@tcha.org>
parents:
26250
diff
changeset
|
2711 # 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
|
2712 # to stored data if transaction has no error. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2713 tr.addpostclose(b'refresh-filecachestats', self._refreshfilecachestats) |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2714 self._transref = weakref.ref(tr) |
33541
b47fef6d2365
transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents:
33539
diff
changeset
|
2715 scmutil.registersummarycallback(self, tr, desc) |
50084
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2716 # This only exist to deal with the need of rollback to have viable |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2717 # parents at the end of the operation. So backup viable parents at the |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2718 # time of this operation. |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2719 # |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2720 # We only do it when the `wlock` is taken, otherwise other might be |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2721 # altering the dirstate under us. |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2722 # |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2723 # This is really not a great way to do this (first, because we cannot |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2724 # always do it). There are more viable alternative that exists |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2725 # |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2726 # - backing only the working copy parent in a dedicated files and doing |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2727 # a clean "keep-update" to them on `hg rollback`. |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2728 # |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2729 # - slightly changing the behavior an applying a logic similar to "hg |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2730 # strip" to pick a working copy destination on `hg rollback` |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2731 if self.currentwlock() is not None: |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2732 ds = self.dirstate |
50267
f92afdf3cff9
transaction: remove the `branch` backup for transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50265
diff
changeset
|
2733 if not self.vfs.exists(b'branch'): |
50195
11e6eee4b063
transaction: use the standard transaction mechanism to backup branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50194
diff
changeset
|
2734 # force a file to be written if None exist |
50265
240a04cedd24
branch: pass current transaction when writing branch for transaction backup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50195
diff
changeset
|
2735 ds.setbranch(b'default', None) |
50084
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2736 |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2737 def backup_dirstate(tr): |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2738 for f in ds.all_file_names(): |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2739 # hardlink backup is okay because `dirstate` is always |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2740 # atomically written and possible data file are append only |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2741 # and resistant to trailing data. |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2742 tr.addbackup(f, hardlink=True, location=b'plain') |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2743 |
5b9c3ae807c8
localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50082
diff
changeset
|
2744 tr.addvalidator(b'dirstate-backup', backup_dirstate) |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2745 return tr |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2746 |
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
2747 def _journalfiles(self): |
50085
ff12f42415f5
localrepo: stop doing special dirstate backup at transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2748 return ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2749 (self.svfs, b'journal'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2750 (self.vfs, b'journal.desc'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2751 ) |
16236
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
2752 |
97efd26eb957
localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents:
16208
diff
changeset
|
2753 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
|
2754 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
|
2755 |
32452
b647b923486f
transaction: run _writejournal unfiltered
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32381
diff
changeset
|
2756 @unfilteredmethod |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2757 def _writejournal(self, desc): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2758 self.vfs.write(b"journal.desc", b"%d\n%s\n" % (len(self), desc)) |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2759 |
210 | 2760 def recover(self): |
27846
63821023ea79
with: use context manager in localrepo recover
Bryan O'Sullivan <bryano@fb.com>
parents:
27698
diff
changeset
|
2761 with self.lock(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2762 if self.svfs.exists(b"journal"): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2763 self.ui.status(_(b"rolling back interrupted transaction\n")) |
50281
f34887316f1f
undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50267
diff
changeset
|
2764 vfsmap = self.vfs_map |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2765 transaction.rollback( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2766 self.svfs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2767 vfsmap, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2768 b"journal", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2769 self.ui.warn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2770 checkambigfiles=_cachedfiles, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2771 ) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
2772 self.invalidate() |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
2773 return True |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
2774 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2775 self.ui.warn(_(b"no interrupted transaction available\n")) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
2776 return False |
210 | 2777 |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
2778 def rollback(self, dryrun=False, force=False): |
50071
d91fc026071c
rollback: remove the dirstateguard usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50070
diff
changeset
|
2779 wlock = lock = None |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
2780 try: |
1712
21dcf38e5d7d
Allow callers to pass in the dirstate lock in most localrepo.py funcs.
mason@suse.com
parents:
1709
diff
changeset
|
2781 wlock = self.wlock() |
4438
3900f684a150
Fix hg import --exact bug that hangs hg on failure.
Eric Hopper <hopper@omnifarious.org>
parents:
4417
diff
changeset
|
2782 lock = self.lock() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2783 if self.svfs.exists(b"undo"): |
50071
d91fc026071c
rollback: remove the dirstateguard usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50070
diff
changeset
|
2784 return self._rollback(dryrun, force) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
2785 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2786 self.ui.warn(_(b"no rollback information available\n")) |
11177
6a64813276ed
commands: initial audit of exit codes
Matt Mackall <mpm@selenic.com>
parents:
11174
diff
changeset
|
2787 return 1 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
2788 finally: |
50071
d91fc026071c
rollback: remove the dirstateguard usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50070
diff
changeset
|
2789 release(lock, wlock) |
162 | 2790 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2791 @unfilteredmethod # Until we get smarter cache management |
50071
d91fc026071c
rollback: remove the dirstateguard usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50070
diff
changeset
|
2792 def _rollback(self, dryrun, force): |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
2793 ui = self.ui |
50069
81870c92c293
rollback: detect "parentgone" case earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50059
diff
changeset
|
2794 |
81870c92c293
rollback: detect "parentgone" case earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50059
diff
changeset
|
2795 parents = self.dirstate.parents() |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
2796 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2797 args = self.vfs.read(b'undo.desc').splitlines() |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
2798 (oldlen, desc, detail) = (int(args[0]), args[1], None) |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
2799 if len(args) >= 3: |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
2800 detail = args[2] |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
2801 oldtip = oldlen - 1 |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
2802 |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
2803 if detail and ui.verbose: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2804 msg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2805 b'repository tip rolled back to revision %d' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2806 b' (undo %s: %s)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2807 ) % (oldtip, desc, detail) |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
2808 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2809 msg = _( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
2810 b'repository tip rolled back to revision %d (undo %s)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2811 ) % (oldtip, desc) |
50069
81870c92c293
rollback: detect "parentgone" case earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50059
diff
changeset
|
2812 parentgone = any(self[p].rev() > oldtip for p in parents) |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
2813 except IOError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2814 msg = _(b'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
|
2815 desc = None |
50069
81870c92c293
rollback: detect "parentgone" case earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50059
diff
changeset
|
2816 parentgone = True |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
2817 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2818 if not force and self[b'.'] != self[b'tip'] and desc == b'commit': |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
2819 raise error.Abort( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2820 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2821 b'rollback of last commit while not checked out ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2822 b'may lose data' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2823 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2824 hint=_(b'use -f to force'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2825 ) |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
2826 |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
2827 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
|
2828 if dryrun: |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
2829 return 0 |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
2830 |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
2831 self.destroying() |
50281
f34887316f1f
undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50267
diff
changeset
|
2832 vfsmap = self.vfs_map |
50070
c8f32aa80dca
rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50069
diff
changeset
|
2833 skip_journal_pattern = None |
c8f32aa80dca
rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50069
diff
changeset
|
2834 if not parentgone: |
c8f32aa80dca
rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50069
diff
changeset
|
2835 skip_journal_pattern = RE_SKIP_DIRSTATE_ROLLBACK |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2836 transaction.rollback( |
50070
c8f32aa80dca
rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50069
diff
changeset
|
2837 self.svfs, |
c8f32aa80dca
rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50069
diff
changeset
|
2838 vfsmap, |
c8f32aa80dca
rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50069
diff
changeset
|
2839 b'undo', |
c8f32aa80dca
rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50069
diff
changeset
|
2840 ui.warn, |
c8f32aa80dca
rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50069
diff
changeset
|
2841 checkambigfiles=_cachedfiles, |
c8f32aa80dca
rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50069
diff
changeset
|
2842 skip_journal_pattern=skip_journal_pattern, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2843 ) |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
2844 self.invalidate() |
50085
ff12f42415f5
localrepo: stop doing special dirstate backup at transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2845 self.dirstate.invalidate() |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
2846 |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
2847 if parentgone: |
50085
ff12f42415f5
localrepo: stop doing special dirstate backup at transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2848 # replace this with some explicit parent update in the future. |
ff12f42415f5
localrepo: stop doing special dirstate backup at transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2849 has_node = self.changelog.index.has_node |
ff12f42415f5
localrepo: stop doing special dirstate backup at transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2850 if not all(has_node(p) for p in self.dirstate._pl): |
ff12f42415f5
localrepo: stop doing special dirstate backup at transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2851 # There was no dirstate to backup initially, we need to drop |
ff12f42415f5
localrepo: stop doing special dirstate backup at transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2852 # the existing one. |
ff12f42415f5
localrepo: stop doing special dirstate backup at transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2853 with self.dirstate.changing_parents(self): |
ff12f42415f5
localrepo: stop doing special dirstate backup at transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2854 self.dirstate.setparents(self.nullid) |
ff12f42415f5
localrepo: stop doing special dirstate backup at transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2855 self.dirstate.clear() |
ff12f42415f5
localrepo: stop doing special dirstate backup at transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50084
diff
changeset
|
2856 |
27167
3fe8cb40c9c5
commands: inline definition of localrepo.parents() and drop the method (API)
Augie Fackler <augie@google.com>
parents:
27166
diff
changeset
|
2857 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
|
2858 if len(parents) > 1: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2859 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2860 _( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2861 b'working directory now based on ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2862 b'revisions %d and %d\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2863 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2864 % parents |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2865 ) |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
2866 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2867 ui.status( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
2868 _(b'working directory now based on revision %d\n') % parents |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2869 ) |
45490
0ce6af73f481
mergestate: make some callers not pass pointless node argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
45485
diff
changeset
|
2870 mergestatemod.mergestate.clean(self) |
24784
59406b8b1303
rollback: clear resolve state (issue4593)
Matt Mackall <mpm@selenic.com>
parents:
24750
diff
changeset
|
2871 |
17013
c8eda7bbdcab
strip: incrementally update the branchheads cache after a strip
Joshua Redstone <joshua.redstone@fb.com>
parents:
17012
diff
changeset
|
2872 # 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
|
2873 # 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
|
2874 # invalidated. |
15604
b8d8599410da
rollback: always call destroyed() (regression from 1.9)
Greg Ward <greg-hg@gerg.ca>
parents:
15381
diff
changeset
|
2875 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
|
2876 return 0 |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
2877 |
32332
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
2878 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
|
2879 """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
|
2880 |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
2881 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
|
2882 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
|
2883 method. |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
2884 """ |
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
2885 # 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
|
2886 reporef = weakref.ref(self) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2887 |
32332
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
2888 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
|
2889 repo = reporef() |
46792
7e08fa9b3d13
typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46572
diff
changeset
|
2890 assert repo is not None # help pytype |
32332
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
2891 repo.updatecaches(tr) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
2892 |
32332
7aa4a4cf0dde
cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32314
diff
changeset
|
2893 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
|
2894 |
32263
604d65e2c0b2
caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32262
diff
changeset
|
2895 @unfilteredmethod |
47297
1337bfaa88ca
updatecaches: adds a `caches` parameters to `repo.updatecaches`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47296
diff
changeset
|
2896 def updatecaches(self, tr=None, full=False, caches=None): |
32264
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
2897 """warm appropriate caches |
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
2898 |
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
2899 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
|
2900 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
|
2901 update caches relevant to the changes in that transaction. |
36952
b24cde12061b
debugupdatecache: also warm rev branch cache
Boris Feld <boris.feld@octobus.net>
parents:
36819
diff
changeset
|
2902 |
b24cde12061b
debugupdatecache: also warm rev branch cache
Boris Feld <boris.feld@octobus.net>
parents:
36819
diff
changeset
|
2903 If 'full' is set, make sure all caches the function knows about have |
b24cde12061b
debugupdatecache: also warm rev branch cache
Boris Feld <boris.feld@octobus.net>
parents:
36819
diff
changeset
|
2904 up-to-date data. Even the ones usually loaded more lazily. |
47183
8be95673eb8a
cache: avoid warming the fnodetags cache after clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
2905 |
8be95673eb8a
cache: avoid warming the fnodetags cache after clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
2906 The `full` argument can take a special "post-clone" value. In this case |
8be95673eb8a
cache: avoid warming the fnodetags cache after clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
2907 the cache warming is made after a clone and of the slower cache might |
8be95673eb8a
cache: avoid warming the fnodetags cache after clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
2908 be skipped, namely the `.fnodetags` one. This argument is 5.8 specific |
8be95673eb8a
cache: avoid warming the fnodetags cache after clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
2909 as we plan for a cleaner way to deal with this for 5.9. |
32264
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
2910 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2911 if tr is not None and tr.hookargs.get(b'source') == b'strip': |
32263
604d65e2c0b2
caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32262
diff
changeset
|
2912 # 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
|
2913 # 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
|
2914 return |
604d65e2c0b2
caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32262
diff
changeset
|
2915 |
47296
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2916 unfi = self.unfiltered() |
32263
604d65e2c0b2
caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32262
diff
changeset
|
2917 |
51134
498017baa34b
cleanup: remove some code scheduled to be removed after 5.9
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51108
diff
changeset
|
2918 if caches is None: |
47300
8b2d09c7e5cd
updatecaches: deprecate the `full` argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47299
diff
changeset
|
2919 caches = repository.CACHES_DEFAULT |
47296
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2920 |
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2921 if repository.CACHE_BRANCHMAP_SERVED in caches: |
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2922 if tr is None or tr.changes[b'origrepolen'] < len(self): |
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2923 self.ui.debug(b'updating the branch cache\n') |
51537
4a8bb136ee77
branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51508
diff
changeset
|
2924 dpt = repository.CACHE_BRANCHMAP_DETECT_PURE_TOPO in caches |
4a8bb136ee77
branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51508
diff
changeset
|
2925 served = self.filtered(b'served') |
4a8bb136ee77
branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51508
diff
changeset
|
2926 self._branchcaches.update_disk(served, detect_pure_topo=dpt) |
4a8bb136ee77
branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51508
diff
changeset
|
2927 served_hidden = self.filtered(b'served.hidden') |
4a8bb136ee77
branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51508
diff
changeset
|
2928 self._branchcaches.update_disk( |
4a8bb136ee77
branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51508
diff
changeset
|
2929 served_hidden, detect_pure_topo=dpt |
4a8bb136ee77
branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51508
diff
changeset
|
2930 ) |
47296
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2931 |
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2932 if repository.CACHE_CHANGELOG_CACHE in caches: |
44445
336ec75ed1ac
nodemap: warm the persistent nodemap on disk with debugupdatecache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44442
diff
changeset
|
2933 self.changelog.update_caches(transaction=tr) |
47296
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2934 |
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2935 if repository.CACHE_MANIFESTLOG_CACHE in caches: |
44787
97ebdb192b00
nodemap: also warm manifest nodemap with other caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44733
diff
changeset
|
2936 self.manifestlog.update_caches(transaction=tr) |
50673
5d84b1385f7f
treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50666
diff
changeset
|
2937 for entry in self.store.walk(): |
5d84b1385f7f
treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50666
diff
changeset
|
2938 if not entry.is_revlog: |
5d84b1385f7f
treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50666
diff
changeset
|
2939 continue |
5d84b1385f7f
treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50666
diff
changeset
|
2940 if not entry.is_manifestlog: |
5d84b1385f7f
treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50666
diff
changeset
|
2941 continue |
5d84b1385f7f
treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50666
diff
changeset
|
2942 manifestrevlog = entry.get_revlog_instance(self).get_revlog() |
5d84b1385f7f
treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50666
diff
changeset
|
2943 if manifestrevlog is not None: |
5d84b1385f7f
treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
50666
diff
changeset
|
2944 manifestrevlog.update_caches(transaction=tr) |
44445
336ec75ed1ac
nodemap: warm the persistent nodemap on disk with debugupdatecache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44442
diff
changeset
|
2945 |
47296
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2946 if repository.CACHE_REV_BRANCH in caches: |
41933
2eee280a1354
updatecaches: also warm revbranchcache for filtered revisions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41896
diff
changeset
|
2947 rbc = unfi.revbranchcache() |
2eee280a1354
updatecaches: also warm revbranchcache for filtered revisions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41896
diff
changeset
|
2948 for r in unfi.changelog: |
36952
b24cde12061b
debugupdatecache: also warm rev branch cache
Boris Feld <boris.feld@octobus.net>
parents:
36819
diff
changeset
|
2949 rbc.branchinfo(r) |
b24cde12061b
debugupdatecache: also warm rev branch cache
Boris Feld <boris.feld@octobus.net>
parents:
36819
diff
changeset
|
2950 rbc.write() |
b24cde12061b
debugupdatecache: also warm rev branch cache
Boris Feld <boris.feld@octobus.net>
parents:
36819
diff
changeset
|
2951 |
47296
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2952 if repository.CACHE_FULL_MANIFEST in caches: |
38781
0a57945aaf7f
manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents:
38760
diff
changeset
|
2953 # ensure the working copy parents are in the manifestfulltextcache |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2954 for ctx in self[b'.'].parents(): |
38781
0a57945aaf7f
manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents:
38760
diff
changeset
|
2955 ctx.manifest() # accessing the manifest is enough |
0a57945aaf7f
manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents:
38760
diff
changeset
|
2956 |
47296
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2957 if repository.CACHE_FILE_NODE_TAGS in caches: |
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2958 # accessing fnode cache warms the cache |
51596
6378d57562af
tags-cache: add a dedicated warm cache function to hgtagsfnodescache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51537
diff
changeset
|
2959 tagsmod.warm_cache(self) |
47296
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2960 |
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2961 if repository.CACHE_TAGS_DEFAULT in caches: |
41934
481259af4bdf
updatecaches: also warm the tags caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41933
diff
changeset
|
2962 # accessing tags warm the cache |
481259af4bdf
updatecaches: also warm the tags caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41933
diff
changeset
|
2963 self.tags() |
47296
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2964 if repository.CACHE_TAGS_SERVED in caches: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2965 self.filtered(b'served').tags() |
41934
481259af4bdf
updatecaches: also warm the tags caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41933
diff
changeset
|
2966 |
47296
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2967 if repository.CACHE_BRANCHMAP_ALL in caches: |
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2968 # The CACHE_BRANCHMAP_ALL updates lazily-loaded caches immediately, |
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2969 # so we're forcing a write to cause these caches to be warmed up |
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2970 # even if they haven't explicitly been requested yet (if they've |
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2971 # never been used by hg, they won't ever have been written, even if |
d1589957fdcb
updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47280
diff
changeset
|
2972 # they're a subset of another kind of cache that *has* been used). |
51537
4a8bb136ee77
branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51508
diff
changeset
|
2973 dpt = repository.CACHE_BRANCHMAP_DETECT_PURE_TOPO in caches |
4a8bb136ee77
branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51508
diff
changeset
|
2974 |
42712
cdf0e9523de1
branchmap: explicitly warm+write all subsets of the branchmap caches
Kyle Lippincott <spectral@google.com>
parents:
42685
diff
changeset
|
2975 for filt in repoview.filtertable.keys(): |
cdf0e9523de1
branchmap: explicitly warm+write all subsets of the branchmap caches
Kyle Lippincott <spectral@google.com>
parents:
42685
diff
changeset
|
2976 filtered = self.filtered(filt) |
51537
4a8bb136ee77
branchcache: allow to detect "pure topological case" for branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51508
diff
changeset
|
2977 self._branchcaches.update_disk(filtered, detect_pure_topo=dpt) |
42712
cdf0e9523de1
branchmap: explicitly warm+write all subsets of the branchmap caches
Kyle Lippincott <spectral@google.com>
parents:
42685
diff
changeset
|
2978 |
51457
c0d51565b501
branchcache: unconditionally write delayed branchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51449
diff
changeset
|
2979 # flush all possibly delayed write. |
51488
94f821490645
branchcache: change the _delayed flag to an explicit `_dirty` flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51457
diff
changeset
|
2980 self._branchcaches.write_dirty(self) |
42712
cdf0e9523de1
branchmap: explicitly warm+write all subsets of the branchmap caches
Kyle Lippincott <spectral@google.com>
parents:
42685
diff
changeset
|
2981 |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
2982 def invalidatecaches(self): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43421
diff
changeset
|
2983 if '_tagscache' in vars(self): |
18013
98c867ac1330
clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18009
diff
changeset
|
2984 # can't use delattr on proxy |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43421
diff
changeset
|
2985 del self.__dict__['_tagscache'] |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
2986 |
41615
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41529
diff
changeset
|
2987 self._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
|
2988 self.invalidatevolatilesets() |
33302
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33278
diff
changeset
|
2989 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
|
2990 |
312262ebc223
cache: group obscache and revsfiltercache invalidation in a single function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18101
diff
changeset
|
2991 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
|
2992 self.filteredrevcache.clear() |
17469
fb72eec7efd8
obsolete: introduce caches for all meaningful sets
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17434
diff
changeset
|
2993 obsolete.clearobscaches(self) |
44104
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
2994 self._quick_access_changeid_invalidate() |
1784
2e0a288ca93e
revalidate revlog data after locking the repo (issue132)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1782
diff
changeset
|
2995 |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
2996 def invalidatedirstate(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
2997 """Invalidates the dirstate, causing the next call to dirstate |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
2998 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
|
2999 rereading it if it has. |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
3000 |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
3001 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
|
3002 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
|
3003 explicitly read the dirstate again (i.e. restoring it to a previous |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3004 known good state).""" |
50127
ec769cbc1fa2
dirstate: directly manage the dirstate property on localrepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50085
diff
changeset
|
3005 unfi = self.unfiltered() |
ec769cbc1fa2
dirstate: directly manage the dirstate property on localrepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50085
diff
changeset
|
3006 if 'dirstate' in unfi.__dict__: |
50301
9fc0d244a753
dirstate: fix a potential traceback when in `copy` and `rename`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50285
diff
changeset
|
3007 assert not self.dirstate.is_changing_any |
50127
ec769cbc1fa2
dirstate: directly manage the dirstate property on localrepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50085
diff
changeset
|
3008 del unfi.__dict__['dirstate'] |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
3009 |
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
3010 def invalidate(self, clearfilecache=False): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3011 """Invalidates both store and non-store parts other than dirstate |
29918
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
3012 |
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
3013 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
|
3014 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
|
3015 (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
|
3016 redundant one doesn't). |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3017 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3018 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
|
3019 for k in list(self._filecache.keys()): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3020 if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3021 k == b'changelog' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3022 and self.currenttransaction() |
51104
1c0f3994d733
changelog-delay: move "delayed" check to a more official API
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51044
diff
changeset
|
3023 and self.changelog.is_delaying |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3024 ): |
33706
01a1c4e66816
repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33703
diff
changeset
|
3025 # The changelog object may store unwritten revisions. We don't |
01a1c4e66816
repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33703
diff
changeset
|
3026 # want to lose them. |
01a1c4e66816
repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33703
diff
changeset
|
3027 # TODO: Solve the problem instead of working around it. |
01a1c4e66816
repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
33703
diff
changeset
|
3028 continue |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
3029 |
26831
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
3030 if clearfilecache: |
0a7610758c42
localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
3031 del self._filecache[k] |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
3032 try: |
50919
b3174be5e7f7
localrepo: purge filecache attribute using there unicode name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50759
diff
changeset
|
3033 # XXX ideally, the key would be a unicode string to match the |
b3174be5e7f7
localrepo: purge filecache attribute using there unicode name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50759
diff
changeset
|
3034 # fact it refers to an attribut name. However changing this was |
b3174be5e7f7
localrepo: purge filecache attribute using there unicode name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50759
diff
changeset
|
3035 # a bit a scope creep compared to the series cleaning up |
b3174be5e7f7
localrepo: purge filecache attribute using there unicode name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50759
diff
changeset
|
3036 # del/set/getattr so we kept thing simple here. |
b3174be5e7f7
localrepo: purge filecache attribute using there unicode name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50759
diff
changeset
|
3037 delattr(unfiltered, pycompat.sysstr(k)) |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
3038 except AttributeError: |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
3039 pass |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
3040 self.invalidatecaches() |
29918
d9c49138ab93
localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29883
diff
changeset
|
3041 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
|
3042 # 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
|
3043 # 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
|
3044 # 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
|
3045 self.store.invalidatecaches() |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
3046 |
20627
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
3047 def invalidateall(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3048 """Fully invalidates both store and non-store parts, causing the |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3049 subsequent operation to reread any outside changes.""" |
20627
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
3050 # 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
|
3051 self.invalidate() |
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
3052 self.invalidatedirstate() |
a42ea6d209e6
localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents:
20567
diff
changeset
|
3053 |
29920
e35a83cedde1
localrepo: make _refreshfilecachestats unfiltered method to refresh correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29918
diff
changeset
|
3054 @unfilteredmethod |
26251
5c0f5db65c6b
localrepo: refresh filecache stats only if transaction finished successfully
Yuya Nishihara <yuya@tcha.org>
parents:
26250
diff
changeset
|
3055 def _refreshfilecachestats(self, tr): |
26250
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
3056 """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
|
3057 for k, ce in self._filecache.items(): |
35839
9dad46c23185
localrepo: consistently use native str when __dict__ is involved
Augie Fackler <augie@google.com>
parents:
35785
diff
changeset
|
3058 k = pycompat.sysstr(k) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43421
diff
changeset
|
3059 if k == 'dirstate' or k not in self.__dict__: |
26250
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
3060 continue |
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
3061 ce.refresh() |
bc1f8a79b4e4
localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents:
26155
diff
changeset
|
3062 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3063 def _lock( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3064 self, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3065 vfs, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3066 lockname, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3067 wait, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3068 releasefn, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3069 acquirefn, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3070 desc, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3071 ): |
35208
1b758105b5c7
lock: add a trylock method handling the timeout and messaging logic
Boris Feld <boris.feld@octobus.net>
parents:
35207
diff
changeset
|
3072 timeout = 0 |
35209
9153871d50e0
lock: allow to configure when the lock messages are displayed
Boris Feld <boris.feld@octobus.net>
parents:
35208
diff
changeset
|
3073 warntimeout = 0 |
35208
1b758105b5c7
lock: add a trylock method handling the timeout and messaging logic
Boris Feld <boris.feld@octobus.net>
parents:
35207
diff
changeset
|
3074 if wait: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3075 timeout = self.ui.configint(b"ui", b"timeout") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3076 warntimeout = self.ui.configint(b"ui", b"timeout.warn") |
38038
8c828beb7543
lock: add internal config to not replace signal handlers while locking
Yuya Nishihara <yuya@tcha.org>
parents:
37810
diff
changeset
|
3077 # internal config: ui.signal-safe-lock |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3078 signalsafe = self.ui.configbool(b'ui', b'signal-safe-lock') |
51497
9da3fcc5f70f
test-lock: use synchronisation file instead of sleep
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51404
diff
changeset
|
3079 sync_file = self.ui.config(b'devel', b'lock-wait-sync-file') |
9da3fcc5f70f
test-lock: use synchronisation file instead of sleep
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51404
diff
changeset
|
3080 if not sync_file: |
9da3fcc5f70f
test-lock: use synchronisation file instead of sleep
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51404
diff
changeset
|
3081 sync_file = None |
35208
1b758105b5c7
lock: add a trylock method handling the timeout and messaging logic
Boris Feld <boris.feld@octobus.net>
parents:
35207
diff
changeset
|
3082 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3083 l = lockmod.trylock( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3084 self.ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3085 vfs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3086 lockname, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3087 timeout, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3088 warntimeout, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3089 releasefn=releasefn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3090 acquirefn=acquirefn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3091 desc=desc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3092 signalsafe=signalsafe, |
51497
9da3fcc5f70f
test-lock: use synchronisation file instead of sleep
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51404
diff
changeset
|
3093 devel_wait_sync_file=sync_file, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3094 ) |
1751
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
3095 return l |
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
3096 |
15587
809d5d30e377
localrepo: rename _postrelease to _afterlock
Matt Mackall <mpm@selenic.com>
parents:
15586
diff
changeset
|
3097 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
|
3098 """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
|
3099 |
24821
57f1dbc99631
afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24799
diff
changeset
|
3100 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
|
3101 (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
|
3102 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
|
3103 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
|
3104 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
|
3105 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
|
3106 break |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3107 else: # no lock have been found. |
43778
888bd39ed555
lock: pass "success" boolean to _afterlock callbacks
Kyle Lippincott <spectral@google.com>
parents:
43765
diff
changeset
|
3108 callback(True) |
15583
926a06f7a353
lock: add mechanism to register post release callback
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15486
diff
changeset
|
3109 |
4914 | 3110 def lock(self, wait=True): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3111 """Lock the repository store (.hg/store) and return a weak reference |
9309
cfdcb7a465af
localrepo: document the locking scheme a little better
Greg Ward <greg-hg@gerg.ca>
parents:
9152
diff
changeset
|
3112 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
|
3113 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
|
3114 |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
3115 If both 'lock' and 'wlock' must be acquired, ensure you always acquires |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3116 '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
|
3117 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
|
3118 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
|
3119 l.lock() |
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
3120 return l |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
3121 |
51635
fcc149f3fdcb
hooks: add a prewlock and a prelock hooks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51497
diff
changeset
|
3122 self.hook(b'prelock', throw=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3123 l = self._lock( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3124 vfs=self.svfs, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3125 lockname=b"lock", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3126 wait=wait, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3127 releasefn=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3128 acquirefn=self.invalidate, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3129 desc=_(b'repository %s') % self.origroot, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3130 ) |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
3131 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
|
3132 return l |
1751
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
3133 |
4914 | 3134 def wlock(self, wait=True): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3135 """Lock the non-store parts of the repository (everything under |
9309
cfdcb7a465af
localrepo: document the locking scheme a little better
Greg Ward <greg-hg@gerg.ca>
parents:
9152
diff
changeset
|
3136 .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
|
3137 |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
3138 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
|
3139 |
e0c810d0ab69
lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24745
diff
changeset
|
3140 If both 'lock' and 'wlock' must be acquired, ensure you always acquires |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3141 'wlock' first to avoid a dead-lock hazard.""" |
46793
86b47ec1960a
typing: rewrite a conditional assignment to unconfuse pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46792
diff
changeset
|
3142 l = self._wlockref() if self._wlockref else None |
24744
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24740
diff
changeset
|
3143 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
|
3144 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
|
3145 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
|
3146 |
51635
fcc149f3fdcb
hooks: add a prewlock and a prelock hooks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51497
diff
changeset
|
3147 self.hook(b'prewlock', throw=True) |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26767
diff
changeset
|
3148 # 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
|
3149 # acquisition would not cause dead-lock as they would just fail. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3150 if wait and ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3151 self.ui.configbool(b'devel', b'all-warnings') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3152 or self.ui.configbool(b'devel', b'check-locks') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3153 ): |
29705
41689e293994
develwarn: use the lock helper in local repo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29417
diff
changeset
|
3154 if self._currentlock(self._lockref) is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3155 self.ui.develwarn(b'"wlock" acquired after "lock"') |
1531
2ba8bf7defda
add localrepo.wlock for protecting the dirstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1516
diff
changeset
|
3156 |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
3157 def unlock(): |
50023
e1cff85484e2
dirstate: introduce a `is_changing_any` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50022
diff
changeset
|
3158 if self.dirstate.is_changing_any: |
49959
376395868b7b
dirstate: warn about non-explicitly rolledback parent-change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49753
diff
changeset
|
3159 msg = b"wlock release in the middle of a changing parents" |
376395868b7b
dirstate: warn about non-explicitly rolledback parent-change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49753
diff
changeset
|
3160 self.ui.develwarn(msg) |
22404
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
3161 self.dirstate.invalidate() |
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
3162 else: |
50057
cf8b9c80d67c
dirstate: issue a developer warning on implicit write on wlock release
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
3163 if self.dirstate._dirty: |
cf8b9c80d67c
dirstate: issue a developer warning on implicit write on wlock release
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
3164 msg = b"dirty dirstate on wlock release" |
cf8b9c80d67c
dirstate: issue a developer warning on implicit write on wlock release
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50023
diff
changeset
|
3165 self.ui.develwarn(msg) |
26748
5ba0a99ff27f
dirstate: make dirstate.write() callers pass transaction object to it
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26741
diff
changeset
|
3166 self.dirstate.write(None) |
22404
12bc7f06fc41
dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents:
22362
diff
changeset
|
3167 |
50127
ec769cbc1fa2
dirstate: directly manage the dirstate property on localrepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50085
diff
changeset
|
3168 unfi = self.unfiltered() |
ec769cbc1fa2
dirstate: directly manage the dirstate property on localrepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50085
diff
changeset
|
3169 if 'dirstate' in unfi.__dict__: |
ec769cbc1fa2
dirstate: directly manage the dirstate property on localrepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50085
diff
changeset
|
3170 del unfi.__dict__['dirstate'] |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
3171 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3172 l = self._lock( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3173 self.vfs, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3174 b"wlock", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3175 wait, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3176 unlock, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3177 self.invalidatedirstate, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3178 _(b'working directory of %s') % self.origroot, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3179 ) |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
3180 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
|
3181 return l |
1531
2ba8bf7defda
add localrepo.wlock for protecting the dirstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1516
diff
changeset
|
3182 |
26488
df2dc5141721
localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26475
diff
changeset
|
3183 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
|
3184 """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
|
3185 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
|
3186 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
|
3187 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
|
3188 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
|
3189 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
|
3190 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
|
3191 |
26489
2a3fc0272e3f
localrepo: add a way to get the current wlock if it's held
Siddharth Agarwal <sid0@fb.com>
parents:
26488
diff
changeset
|
3192 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
|
3193 """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
|
3194 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
|
3195 |
50323
6901916458bd
localrepo: add a `currentlock` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50316
diff
changeset
|
3196 def currentlock(self): |
6901916458bd
localrepo: add a `currentlock` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50316
diff
changeset
|
3197 """Returns the lock if it's held, or None if it's not.""" |
6901916458bd
localrepo: add a `currentlock` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50316
diff
changeset
|
3198 return self._currentlock(self._lockref) |
6901916458bd
localrepo: add a `currentlock` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50316
diff
changeset
|
3199 |
43712
f965b1027fb0
commit: drop unused "vdirs" argument from repo.checkcommitpatterns()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43711
diff
changeset
|
3200 def checkcommitpatterns(self, wctx, match, status, fail): |
30332
318a24b52eeb
spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents:
30272
diff
changeset
|
3201 """check for commit arguments that aren't committable""" |
28814
1f65f291a5b7
localrepo: drop force check from checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28813
diff
changeset
|
3202 if match.isexact() or match.prefix(): |
28813
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3203 matched = set(status.modified + status.added + status.removed) |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3204 |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3205 for f in match.files(): |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3206 f = self.dirstate.normalize(f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3207 if f == b'.' or f in matched or f in wctx.substate: |
28813
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3208 continue |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3209 if f in status.deleted: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3210 fail(f, _(b'file not found!')) |
43711
7f443cce2972
commit: rewrite check for `hg ci <path>` being a directory
Martin von Zweigbergk <martinvonz@google.com>
parents:
43661
diff
changeset
|
3211 # Is it a directory that exists or used to exist? |
7f443cce2972
commit: rewrite check for `hg ci <path>` being a directory
Martin von Zweigbergk <martinvonz@google.com>
parents:
43661
diff
changeset
|
3212 if self.wvfs.isdir(f) or wctx.p1().hasdir(f): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3213 d = f + b'/' |
28813
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3214 for mf in matched: |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3215 if mf.startswith(d): |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3216 break |
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3217 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3218 fail(f, _(b"no match under directory!")) |
28813
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3219 elif f not in self.dirstate: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3220 fail(f, _(b"file not tracked!")) |
28813
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3221 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
3222 @unfilteredmethod |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3223 def commit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3224 self, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3225 text=b"", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3226 user=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3227 date=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3228 match=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3229 force=False, |
44023
3216cabffd4a
commit: change default `editor` parameter to None
Matt Harbison <matt_harbison@yahoo.com>
parents:
44014
diff
changeset
|
3230 editor=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3231 extra=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3232 ): |
8515
865e08a7d6b0
localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8503
diff
changeset
|
3233 """Add a new revision to current repository. |
865e08a7d6b0
localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8503
diff
changeset
|
3234 |
8706
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
3235 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
|
3236 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
|
3237 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
|
3238 """ |
26322
2cd19782d2d4
commit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26321
diff
changeset
|
3239 if extra is None: |
2cd19782d2d4
commit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26321
diff
changeset
|
3240 extra = {} |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
3241 |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
3242 def fail(f, msg): |
45846
96ca817ec192
errors: raise InputError when given non-existent paths etc
Martin von Zweigbergk <martinvonz@google.com>
parents:
45785
diff
changeset
|
3243 raise error.InputError(b'%s: %s' % (f, msg)) |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
3244 |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
3245 if not match: |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41675
diff
changeset
|
3246 match = matchmod.always() |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
3247 |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
3248 if not force: |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
3249 match.bad = fail |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
3250 |
41363
b87a009d1b3b
localrepo: use context manager for locks in commit()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41362
diff
changeset
|
3251 # lock() for recent changelog (see issue4368) |
b87a009d1b3b
localrepo: use context manager for locks in commit()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41362
diff
changeset
|
3252 with self.wlock(), self.lock(): |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
3253 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
|
3254 merge = len(wctx.parents()) > 1 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
3255 |
32312
0d6b3572ad92
match: remove ispartial()
Martin von Zweigbergk <martinvonz@google.com>
parents:
32292
diff
changeset
|
3256 if not force and merge and not match.always(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3257 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3258 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3259 b'cannot partially commit a merge ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3260 b'(do not specify files or patterns)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3261 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3262 ) |
6706
716a1296e182
localrepo: replace dirstate by workingfilectx in filecommit()
Patrick Mezard <pmezard@gmail.com>
parents:
6705
diff
changeset
|
3263 |
22928
5e5d297ccbd0
localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22910
diff
changeset
|
3264 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
|
3265 if force: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3266 status.modified.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3267 status.clean |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3268 ) # mq may commit clean files |
3621
7d3d603e7df9
localrepo: factor commit and rawcommit
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3620
diff
changeset
|
3269 |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
3270 # check subrepos |
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35896
diff
changeset
|
3271 subs, commitsubs, newstate = subrepoutil.precommit( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3272 self.ui, wctx, status, match, force=force |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3273 ) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
3274 |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
3275 # make sure all explicit patterns are matched |
28813
d77b790bd8d6
localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents:
28198
diff
changeset
|
3276 if not force: |
43712
f965b1027fb0
commit: drop unused "vdirs" argument from repo.checkcommitpatterns()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43711
diff
changeset
|
3277 self.checkcommitpatterns(wctx, match, status, fail) |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
3278 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3279 cctx = context.workingcommitctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3280 self, status, text, user, date, extra |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3281 ) |
18659
b946470efed9
localrepo: create context used for actual commit earlier
David Schleimer <dschleimer@fb.com>
parents:
18644
diff
changeset
|
3282 |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44852
diff
changeset
|
3283 ms = mergestatemod.mergestate.read(self) |
44409
f935b680860d
commit: error out on unresolved files even if commit would be empty
Martin von Zweigbergk <martinvonz@google.com>
parents:
44382
diff
changeset
|
3284 mergeutil.checkunresolved(ms) |
f935b680860d
commit: error out on unresolved files even if commit would be empty
Martin von Zweigbergk <martinvonz@google.com>
parents:
44382
diff
changeset
|
3285 |
25840
25897d778738
commit: mark internal-only option
Matt Mackall <mpm@selenic.com>
parents:
25839
diff
changeset
|
3286 # internal config: ui.allowemptycommit |
45088
3e40abe0a170
commit: factor out empty commit check to `basectx.isempty()`
Manuel Jacob <me@manueljacob.de>
parents:
45084
diff
changeset
|
3287 if cctx.isempty() and not self.ui.configbool( |
3e40abe0a170
commit: factor out empty commit check to `basectx.isempty()`
Manuel Jacob <me@manueljacob.de>
parents:
45084
diff
changeset
|
3288 b'ui', b'allowemptycommit' |
3e40abe0a170
commit: factor out empty commit check to `basectx.isempty()`
Manuel Jacob <me@manueljacob.de>
parents:
45084
diff
changeset
|
3289 ): |
44442
6306baa7d19a
commit: print debug message when clearing dirstate and wdir clean
Martin von Zweigbergk <martinvonz@google.com>
parents:
44437
diff
changeset
|
3290 self.ui.debug(b'nothing to commit, clearing merge state\n') |
44437
6a34e438461b
commit: clear resolved mergestate even if working copy is clean
Martin von Zweigbergk <martinvonz@google.com>
parents:
44409
diff
changeset
|
3291 ms.reset() |
8404
a2bc39ade36b
commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents:
8403
diff
changeset
|
3292 return None |
a2bc39ade36b
commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents:
8403
diff
changeset
|
3293 |
18660
7e6946ed5756
localrepo: use workingctx for validation in commit
David Schleimer <dschleimer@fb.com>
parents:
18659
diff
changeset
|
3294 if merge and cctx.deleted(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3295 raise error.Abort(_(b"cannot commit merge with missing files")) |
16536
63c817ea4a70
commit: abort on merge with missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16456
diff
changeset
|
3296 |
8496
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
3297 if editor: |
8994
4a1187d3cb00
commit: report modified subrepos in commit editor
Matt Mackall <mpm@selenic.com>
parents:
8954
diff
changeset
|
3298 cctx._text = editor(self, cctx, subs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3299 edited = text != cctx._text |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
3300 |
20765
f042d4b263f4
localrepo: save manually edited commit message as soon as possible
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20332
diff
changeset
|
3301 # 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
|
3302 # (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
|
3303 # the assumption that the user will use the same editor again. |
49148
db3f8e5cc965
commit: don't use hard-coded `.hg/last-message.txt` path in error message
Martin von Zweigbergk <martinvonz@google.com>
parents:
48793
diff
changeset
|
3304 msg_path = self.savecommitmessage(cctx._text) |
20765
f042d4b263f4
localrepo: save manually edited commit message as soon as possible
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20332
diff
changeset
|
3305 |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
3306 # 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
|
3307 if subs: |
41688
ec7bba81ebf4
commit: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41676
diff
changeset
|
3308 uipathfn = scmutil.getuipathfn(self) |
16073
b254f827b7a6
subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents:
16030
diff
changeset
|
3309 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
|
3310 sub = wctx.sub(s) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3311 self.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3312 _(b'committing subrepository %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3313 % uipathfn(subrepoutil.subrelpath(sub)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3314 ) |
11112
4a9bee613737
subrepo: print paths relative to upper repo root for push/pull/commit
Edouard Gomez <ed.gomez@free.fr>
parents:
11063
diff
changeset
|
3315 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
|
3316 newstate[s] = (newstate[s][0], sr) |
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35896
diff
changeset
|
3317 subrepoutil.writestate(self, newstate) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
3318 |
10970
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
3319 p1, p2 = self.dirstate.parents() |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
3320 hookp1, hookp2 = hex(p1), (p2 != self.nullid and hex(p2) or b'') |
9935
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
3321 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3322 self.hook( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3323 b"precommit", throw=True, parent1=hookp1, parent2=hookp2 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3324 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3325 with self.transaction(b'commit'): |
41362
57c462db87fd
localrepo: use context manager for transaction in commit()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41361
diff
changeset
|
3326 ret = self.commitctx(cctx, True) |
57c462db87fd
localrepo: use context manager for transaction in commit()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41361
diff
changeset
|
3327 # update bookmarks, dirstate and mergestate |
57c462db87fd
localrepo: use context manager for transaction in commit()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41361
diff
changeset
|
3328 bookmarks.update(self, [p1, p2], ret) |
57c462db87fd
localrepo: use context manager for transaction in commit()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41361
diff
changeset
|
3329 cctx.markcommitted(ret) |
57c462db87fd
localrepo: use context manager for transaction in commit()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41361
diff
changeset
|
3330 ms.reset() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3331 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
|
3332 if edited: |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
3333 self.ui.write( |
49148
db3f8e5cc965
commit: don't use hard-coded `.hg/last-message.txt` path in error message
Martin von Zweigbergk <martinvonz@google.com>
parents:
48793
diff
changeset
|
3334 _(b'note: commit message saved in %s\n') % msg_path |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3335 ) |
44733
c6d31e659a28
commit: tell user what to do with .hg/last-message.txt
Martin von Zweigbergk <martinvonz@google.com>
parents:
44687
diff
changeset
|
3336 self.ui.write( |
c6d31e659a28
commit: tell user what to do with .hg/last-message.txt
Martin von Zweigbergk <martinvonz@google.com>
parents:
44687
diff
changeset
|
3337 _( |
c6d31e659a28
commit: tell user what to do with .hg/last-message.txt
Martin von Zweigbergk <martinvonz@google.com>
parents:
44687
diff
changeset
|
3338 b"note: use 'hg commit --logfile " |
49148
db3f8e5cc965
commit: don't use hard-coded `.hg/last-message.txt` path in error message
Martin von Zweigbergk <martinvonz@google.com>
parents:
48793
diff
changeset
|
3339 b"%s --edit' to reuse it\n" |
44733
c6d31e659a28
commit: tell user what to do with .hg/last-message.txt
Martin von Zweigbergk <martinvonz@google.com>
parents:
44687
diff
changeset
|
3340 ) |
49148
db3f8e5cc965
commit: don't use hard-coded `.hg/last-message.txt` path in error message
Martin von Zweigbergk <martinvonz@google.com>
parents:
48793
diff
changeset
|
3341 % msg_path |
44733
c6d31e659a28
commit: tell user what to do with .hg/last-message.txt
Martin von Zweigbergk <martinvonz@google.com>
parents:
44687
diff
changeset
|
3342 ) |
9935
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
3343 raise |
6710
0aa91f69a4c4
localrepo: extract _commitctx() from commit()
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
3344 |
43778
888bd39ed555
lock: pass "success" boolean to _afterlock callbacks
Kyle Lippincott <spectral@google.com>
parents:
43765
diff
changeset
|
3345 def commithook(unused_success): |
23129
eb315418224c
hook: protect commit hooks against stripping of temporary commit (issue4422)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23126
diff
changeset
|
3346 # 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
|
3347 # 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
|
3348 if self.changelog.hasnode(ret): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3349 self.hook( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3350 b"commit", node=hex(ret), parent1=hookp1, parent2=hookp2 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3351 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3352 |
16680
d0e419b0f7de
tag: run commit hook when lock is released (issue3344)
Mads Kiilerich <mads@kiilerich.com>
parents:
16679
diff
changeset
|
3353 self._afterlock(commithook) |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
3354 return ret |
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
3355 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
3356 @unfilteredmethod |
42620
d98ec36be808
convert: add a config option to help doing identity hg->hg conversion
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42546
diff
changeset
|
3357 def commitctx(self, ctx, error=False, origctx=None): |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45202
diff
changeset
|
3358 return commit.commitctx(self, ctx, error=error, origctx=origctx) |
660
2c83350784c3
Move commit hook after commit completes
Matt Mackall <mpm@selenic.com>
parents:
659
diff
changeset
|
3359 |
18016
2a393df0f5cc
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18014
diff
changeset
|
3360 @unfilteredmethod |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
3361 def destroying(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3362 """Inform the repository that nodes are about to be destroyed. |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
3363 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
|
3364 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
|
3365 |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
3366 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
|
3367 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
|
3368 destroyed is imminent, the repo will be invalidated causing those |
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
3369 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
|
3370 completely. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3371 """ |
18312
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
3372 # 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
|
3373 # 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
|
3374 # causing those changes to disappear. |
43421
be384a2052aa
py3: don't use bytes with vars() or __dict__
Martin von Zweigbergk <martinvonz@google.com>
parents:
43414
diff
changeset
|
3375 if '_phasecache' in vars(self): |
51404
04111ef08fb0
phases: always write with a repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51401
diff
changeset
|
3376 self._phasecache.write(self) |
18312
7331ee72f99c
localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents:
18311
diff
changeset
|
3377 |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18309
diff
changeset
|
3378 @unfilteredmethod |
18395
904b7109938e
destroyed: drop complex branchcache rebuilt logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18394
diff
changeset
|
3379 def destroyed(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3380 """Inform the repository that nodes have been destroyed. |
9150
09a1ee498756
localrepo: add destroyed() method for strip/rollback to use (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9149
diff
changeset
|
3381 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
|
3382 place for anything that has to be done after destroying history. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3383 """ |
32264
a72caf0af38e
caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32263
diff
changeset
|
3384 # 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
|
3385 self.updatecaches() |
18223
6d6d0248530b
destroyed: filter unknown before computing branchcache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18222
diff
changeset
|
3386 |
9151
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
3387 # 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
|
3388 # 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
|
3389 # 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
|
3390 # guarantees that "cachetip == currenttip" (comparing both rev |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
3391 # 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
|
3392 |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
3393 # 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
|
3394 # 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
|
3395 # 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
|
3396 # 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
|
3397 self.invalidate() |
17324
9f94358f9f93
localrepo: clear the filecache on _rollback() and destroyed()
Idan Kamara <idankk86@gmail.com>
parents:
17306
diff
changeset
|
3398 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3399 def status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3400 self, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3401 node1=b'.', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3402 node2=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3403 match=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3404 ignored=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3405 clean=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3406 unknown=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3407 listsubrepos=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3408 ): |
21596
83bbfb23cb24
localrepo: replace status method with a shim
Sean Farley <sean.michael.farley@gmail.com>
parents:
21591
diff
changeset
|
3409 '''a convenience method that calls node1.status(node2)''' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3410 return self[node1].status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3411 node2, match, ignored, clean, unknown, listsubrepos |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3412 ) |
2661
5c10b7ed3411
status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2621
diff
changeset
|
3413 |
32814
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
3414 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
|
3415 """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
|
3416 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
|
3417 |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
3418 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
|
3419 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
|
3420 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
|
3421 |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
3422 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
|
3423 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
|
3424 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
|
3425 |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
3426 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
|
3427 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
|
3428 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
|
3429 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
|
3430 """ |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
3431 |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
3432 # 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
|
3433 # 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
|
3434 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
|
3435 |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
3436 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
|
3437 """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
|
3438 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
|
3439 |
2083d1643d69
workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents:
32730
diff
changeset
|
3440 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
|
3441 """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
|
3442 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
|
3443 |
8796
2bcef677a6c3
localrepo: remove 'closed' argument to heads(...) function
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
8731
diff
changeset
|
3444 def heads(self, start=None): |
30875
1791be8a95c5
localrepo: avoid unnecessary conversion from node to rev
Stanislau Hlebik <stash@fb.com>
parents:
30818
diff
changeset
|
3445 if start is None: |
30905
6037caa6a2f3
localrepo: cache self.changelog in local variable
Stanislau Hlebik <stash@fb.com>
parents:
30875
diff
changeset
|
3446 cl = self.changelog |
30906
72f25e17af9d
localrepo: avoid unnecessary sorting
Stanislau Hlebik <stash@fb.com>
parents:
30905
diff
changeset
|
3447 headrevs = reversed(cl.headrevs()) |
30905
6037caa6a2f3
localrepo: cache self.changelog in local variable
Stanislau Hlebik <stash@fb.com>
parents:
30875
diff
changeset
|
3448 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
|
3449 |
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
|
3450 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
|
3451 # 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
|
3452 return sorted(heads, key=self.changelog.rev, reverse=True) |
222 | 3453 |
8694
ca8d05e1f1d1
localrepo: set heads and branchheads to be closed=False by default
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
8680
diff
changeset
|
3454 def branchheads(self, branch=None, start=None, closed=False): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3455 """return a (possibly filtered) list of heads for the given branch |
9475
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
3456 |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
3457 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
|
3458 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
|
3459 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
|
3460 If closed is True, return heads that are marked as closed as well. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3461 """ |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
3462 if branch is None: |
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
3463 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
|
3464 branches = self.branchmap() |
42004
0bd730fbcc2b
branchcache: introduce hasbranch()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42001
diff
changeset
|
3465 if not branches.hasbranch(branch): |
4648
8e503fa54d2d
Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents:
4635
diff
changeset
|
3466 return [] |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
3467 # 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
|
3468 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
|
3469 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
|
3470 # 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
|
3471 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
|
3472 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
|
3473 return bheads |
4648
8e503fa54d2d
Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents:
4635
diff
changeset
|
3474 |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3475 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
|
3476 if not nodes: |
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
3477 nodes = [self.changelog.tip()] |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3478 b = [] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3479 for n in nodes: |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3480 t = n |
14494
1ffeeb91c55d
check-code: flag 0/1 used as constant Boolean expression
Martin Geisler <mg@lazybytes.net>
parents:
14482
diff
changeset
|
3481 while True: |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3482 p = self.changelog.parents(n) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
3483 if p[1] != self.nullid or p[0] == self.nullid: |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3484 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
|
3485 break |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3486 n = p[0] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3487 return b |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3488 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3489 def between(self, pairs): |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3490 r = [] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3491 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3492 for top, bottom in pairs: |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3493 n, l, i = top, [], 0 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3494 f = 1 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3495 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46907
diff
changeset
|
3496 while n != bottom and n != self.nullid: |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3497 p = self.changelog.parents(n)[0] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3498 if i == f: |
575 | 3499 l.append(n) |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3500 f = f * 2 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3501 n = p |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3502 i += 1 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3503 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3504 r.append(l) |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3505 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3506 return r |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
3507 |
20924
e10000369b47
push: pass a `pushoperation` object to localrepo.checkpush
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20884
diff
changeset
|
3508 def checkpush(self, pushop): |
13327
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
3509 """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
|
3510 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
|
3511 command. |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
3512 """ |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
3513 |
21043
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
3514 @unfilteredpropertycache |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
3515 def prepushoutgoinghooks(self): |
28876
79b8f052ee51
localrepo: refactor prepushoutgoinghook to take a pushop
Mads Kiilerich <madski@unity3d.com>
parents:
28814
diff
changeset
|
3516 """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
|
3517 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
|
3518 """ |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
3519 return util.hooks() |
6c383c871fdb
localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20987
diff
changeset
|
3520 |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
3521 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
|
3522 try: |
24824
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
3523 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
|
3524 hookargs = {} |
0325c0da05df
pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24821
diff
changeset
|
3525 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
|
3526 hookargs.update(tr.hookargs) |
36400
7b86aa31b004
py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36373
diff
changeset
|
3527 hookargs = pycompat.strkwargs(hookargs) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43421
diff
changeset
|
3528 hookargs['namespace'] = namespace |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43421
diff
changeset
|
3529 hookargs['key'] = key |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43421
diff
changeset
|
3530 hookargs['old'] = old |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43421
diff
changeset
|
3531 hookargs['new'] = new |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3532 self.hook(b'prepushkey', throw=True, **hookargs) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25629
diff
changeset
|
3533 except error.HookAbort as exc: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3534 self.ui.write_err(_(b"pushkey-abort: %s\n") % exc) |
23416
53a65929ef1f
pushkey: gracefully handle prepushkey hook failure (issue4455)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23129
diff
changeset
|
3535 if exc.hint: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3536 self.ui.write_err(_(b"(%s)\n") % exc.hint) |
23416
53a65929ef1f
pushkey: gracefully handle prepushkey hook failure (issue4455)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23129
diff
changeset
|
3537 return False |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3538 self.ui.debug(b'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
|
3539 ret = pushkey.push(self, namespace, key, old, new) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3540 |
43778
888bd39ed555
lock: pass "success" boolean to _afterlock callbacks
Kyle Lippincott <spectral@google.com>
parents:
43765
diff
changeset
|
3541 def runhook(unused_success): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3542 self.hook( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3543 b'pushkey', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3544 namespace=namespace, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3545 key=key, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3546 old=old, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3547 new=new, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3548 ret=ret, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3549 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3550 |
23648
915ac9403e13
pushkey: run hook after the lock release
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23630
diff
changeset
|
3551 self._afterlock(runhook) |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
3552 return ret |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
3553 |
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
3554 def listkeys(self, namespace): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3555 self.hook(b'prelistkeys', throw=True, namespace=namespace) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3556 self.ui.debug(b'listing keys for "%s"\n' % namespace) |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
3557 values = pushkey.list(self, namespace) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3558 self.hook(b'listkeys', namespace=namespace, values=values) |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
3559 return values |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
3560 |
14048
58e58406ed19
wireproto: add test for new optional arg missing on server
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14036
diff
changeset
|
3561 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
|
3562 '''used to test argument passing over the wire''' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3563 return b"%s %s %s %s %s" % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3564 one, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3565 two, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3566 pycompat.bytestr(three), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3567 pycompat.bytestr(four), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3568 pycompat.bytestr(five), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3569 ) |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
3570 |
14529
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
3571 def savecommitmessage(self, text): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3572 fp = self.vfs(b'last-message.txt', b'wb') |
14529
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
3573 try: |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
3574 fp.write(text) |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
3575 finally: |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
3576 fp.close() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3577 return self.pathto(fp.name[len(self.root) + 1 :]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3578 |
46713
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
3579 def register_wanted_sidedata(self, category): |
47260
ccdd280d1d0d
sidedata: use the "feature" to detect that sidedata are enabled
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47238
diff
changeset
|
3580 if repository.REPO_FEATURE_SIDE_DATA not in self.features: |
47075
5554aacd783f
sidedata: gate sidedata functionality to revlogv2 in more places
Raphaël Gomès <rgomes@octobus.net>
parents:
47073
diff
changeset
|
3581 # Only revlogv2 repos can want sidedata. |
5554aacd783f
sidedata: gate sidedata functionality to revlogv2 in more places
Raphaël Gomès <rgomes@octobus.net>
parents:
47073
diff
changeset
|
3582 return |
46713
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
3583 self._wanted_sidedata.add(pycompat.bytestr(category)) |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
3584 |
47083
81eb7091c494
sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents:
47078
diff
changeset
|
3585 def register_sidedata_computer( |
81eb7091c494
sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents:
47078
diff
changeset
|
3586 self, kind, category, keys, computer, flags, replace=False |
81eb7091c494
sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents:
47078
diff
changeset
|
3587 ): |
47073
64cd1496bb70
revlog: replace the old `revlog_kind` approach with the new `target` one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47042
diff
changeset
|
3588 if kind not in revlogconst.ALL_KINDS: |
46713
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
3589 msg = _(b"unexpected revlog kind '%s'.") |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
3590 raise error.ProgrammingError(msg % kind) |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
3591 category = pycompat.bytestr(category) |
47083
81eb7091c494
sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents:
47078
diff
changeset
|
3592 already_registered = category in self._sidedata_computers.get(kind, []) |
81eb7091c494
sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents:
47078
diff
changeset
|
3593 if already_registered and not replace: |
46713
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
3594 msg = _( |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
3595 b"cannot register a sidedata computer twice for category '%s'." |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
3596 ) |
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
3597 raise error.ProgrammingError(msg % category) |
47083
81eb7091c494
sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents:
47078
diff
changeset
|
3598 if replace and not already_registered: |
81eb7091c494
sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents:
47078
diff
changeset
|
3599 msg = _( |
81eb7091c494
sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents:
47078
diff
changeset
|
3600 b"cannot replace a sidedata computer that isn't registered " |
81eb7091c494
sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents:
47078
diff
changeset
|
3601 b"for category '%s'." |
81eb7091c494
sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents:
47078
diff
changeset
|
3602 ) |
81eb7091c494
sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents:
47078
diff
changeset
|
3603 raise error.ProgrammingError(msg % category) |
46713
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
3604 self._sidedata_computers.setdefault(kind, {}) |
47078
223b47235d1c
sidedata: enable sidedata computers to optionally rewrite flags
Raphaël Gomès <rgomes@octobus.net>
parents:
47075
diff
changeset
|
3605 self._sidedata_computers[kind][category] = (keys, computer, flags) |
46713
bc2519513ae0
sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents:
46711
diff
changeset
|
3606 |
14529
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
3607 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
3608 def undoname(fn: bytes) -> bytes: |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
3609 base, name = os.path.split(fn) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3610 assert name.startswith(b'journal') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3611 return os.path.join(base, name.replace(b'journal', b'undo', 1)) |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
3612 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3613 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
3614 def instance(ui, path: bytes, create, intents=None, createopts=None): |
49192
2ab79873786e
auto-upgrade: introduce a way to auto-upgrade to/from share-safe
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49164
diff
changeset
|
3615 # prevent cyclic import localrepo -> upgrade -> localrepo |
2ab79873786e
auto-upgrade: introduce a way to auto-upgrade to/from share-safe
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49164
diff
changeset
|
3616 from . import upgrade |
2ab79873786e
auto-upgrade: introduce a way to auto-upgrade to/from share-safe
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49164
diff
changeset
|
3617 |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46902
diff
changeset
|
3618 localpath = urlutil.urllocalpath(path) |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3619 if create: |
39591
76b58f240821
localrepo: use urllocalpath() for path to create repo too
Martin von Zweigbergk <martinvonz@google.com>
parents:
39590
diff
changeset
|
3620 createrepository(ui, localpath, createopts=createopts) |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3621 |
49192
2ab79873786e
auto-upgrade: introduce a way to auto-upgrade to/from share-safe
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49164
diff
changeset
|
3622 def repo_maker(): |
2ab79873786e
auto-upgrade: introduce a way to auto-upgrade to/from share-safe
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49164
diff
changeset
|
3623 return makelocalrepository(ui, localpath, intents=intents) |
2ab79873786e
auto-upgrade: introduce a way to auto-upgrade to/from share-safe
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49164
diff
changeset
|
3624 |
2ab79873786e
auto-upgrade: introduce a way to auto-upgrade to/from share-safe
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49164
diff
changeset
|
3625 repo = repo_maker() |
2ab79873786e
auto-upgrade: introduce a way to auto-upgrade to/from share-safe
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49164
diff
changeset
|
3626 repo = upgrade.may_auto_upgrade(repo, repo_maker) |
2ab79873786e
auto-upgrade: introduce a way to auto-upgrade to/from share-safe
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49164
diff
changeset
|
3627 return repo |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3164
diff
changeset
|
3628 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3629 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
3630 def islocal(path: bytes) -> bool: |
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
3631 return True |
28164
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
3632 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3633 |
39996
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3634 def defaultcreateopts(ui, createopts=None): |
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3635 """Populate the default creation options for a repository. |
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3636 |
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3637 A dictionary of explicitly requested creation options can be passed |
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3638 in. Missing keys will be populated. |
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3639 """ |
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3640 createopts = dict(createopts or {}) |
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3641 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3642 if b'backend' not in createopts: |
39996
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3643 # experimental config: storage.new-repo-backend |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3644 createopts[b'backend'] = ui.config(b'storage', b'new-repo-backend') |
39996
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3645 |
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3646 return createopts |
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3647 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3648 |
47441
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3649 def clone_requirements(ui, createopts, srcrepo): |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3650 """clone the requirements of a local repo for a local clone |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3651 |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3652 The store requirements are unchanged while the working copy requirements |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3653 depends on the configuration |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3654 """ |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3655 target_requirements = set() |
48667
fc80752dbb24
legacy-revlog: fix requirement computation when cloning legacy repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48666
diff
changeset
|
3656 if not srcrepo.requirements: |
fc80752dbb24
legacy-revlog: fix requirement computation when cloning legacy repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48666
diff
changeset
|
3657 # this is a legacy revlog "v0" repository, we cannot do anything fancy |
fc80752dbb24
legacy-revlog: fix requirement computation when cloning legacy repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48666
diff
changeset
|
3658 # with it. |
fc80752dbb24
legacy-revlog: fix requirement computation when cloning legacy repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48666
diff
changeset
|
3659 return target_requirements |
47441
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3660 createopts = defaultcreateopts(ui, createopts=createopts) |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3661 for r in newreporequirements(ui, createopts): |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3662 if r in requirementsmod.WORKING_DIR_REQUIREMENTS: |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3663 target_requirements.add(r) |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3664 |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3665 for r in srcrepo.requirements: |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3666 if r not in requirementsmod.WORKING_DIR_REQUIREMENTS: |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3667 target_requirements.add(r) |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3668 return target_requirements |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3669 |
e33c6dd346e7
localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47440
diff
changeset
|
3670 |
39996
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3671 def newreporequirements(ui, createopts): |
28164
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
3672 """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
|
3673 |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
3674 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
|
3675 new repositories. |
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
3676 """ |
39848
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3677 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3678 if b'backend' not in createopts: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3679 raise error.ProgrammingError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3680 b'backend key not present in createopts; ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3681 b'was defaultcreateopts() called?' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3682 ) |
39996
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3683 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3684 if createopts[b'backend'] != b'revlogv1': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3685 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3686 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3687 b'unable to determine repository requirements for ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3688 b'storage backend: %s' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3689 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3690 % createopts[b'backend'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3691 ) |
39996
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3692 |
46626
ee91966aec0f
requirements: add constant for revlog v1 requirement
Raphaël Gomès <rgomes@octobus.net>
parents:
46607
diff
changeset
|
3693 requirements = {requirementsmod.REVLOGV1_REQUIREMENT} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3694 if ui.configbool(b'format', b'usestore'): |
46637
ab58098bebed
requirements: also add a store constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46636
diff
changeset
|
3695 requirements.add(requirementsmod.STORE_REQUIREMENT) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3696 if ui.configbool(b'format', b'usefncache'): |
46638
b4c2a2af25e2
requirements: also add a fncache constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46637
diff
changeset
|
3697 requirements.add(requirementsmod.FNCACHE_REQUIREMENT) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3698 if ui.configbool(b'format', b'dotencode'): |
46636
c3773636ddbb
requirements: also add a dotencode constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46627
diff
changeset
|
3699 requirements.add(requirementsmod.DOTENCODE_REQUIREMENT) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3700 |
44382
f0027a3dd7cb
revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44363
diff
changeset
|
3701 compengines = ui.configlist(b'format', b'revlog-compression') |
f0027a3dd7cb
revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44363
diff
changeset
|
3702 for compengine in compengines: |
f0027a3dd7cb
revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44363
diff
changeset
|
3703 if compengine in util.compengines: |
46851
3aa78f2aea48
revlog-compression: fix computation of engine availability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
3704 engine = util.compengines[compengine] |
3aa78f2aea48
revlog-compression: fix computation of engine availability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
3705 if engine.available() and engine.revlogheader(): |
3aa78f2aea48
revlog-compression: fix computation of engine availability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
3706 break |
44382
f0027a3dd7cb
revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44363
diff
changeset
|
3707 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3708 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3709 _( |
44382
f0027a3dd7cb
revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44363
diff
changeset
|
3710 b'compression engines %s defined by ' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3711 b'format.revlog-compression not available' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3712 ) |
44382
f0027a3dd7cb
revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44363
diff
changeset
|
3713 % b', '.join(b'"%s"' % e for e in compengines), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3714 hint=_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3715 b'run "hg debuginstall" to list available ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3716 b'compression engines' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3717 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3718 ) |
30818
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
3719 |
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
3720 # zlib is the historical default and doesn't need an explicit requirement. |
44382
f0027a3dd7cb
revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44363
diff
changeset
|
3721 if compengine == b'zstd': |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3722 requirements.add(b'revlog-compression-zstd') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3723 elif compengine != b'zlib': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3724 requirements.add(b'exp-compression-%s' % compengine) |
30818
4c0a5a256ae8
localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30634
diff
changeset
|
3725 |
28164
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
3726 if scmutil.gdinitconfig(ui): |
46627
f4c325bf80fc
requirements: also add a generaldelta constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46626
diff
changeset
|
3727 requirements.add(requirementsmod.GENERALDELTA_REQUIREMENT) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3728 if ui.configbool(b'format', b'sparse-revlog'): |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
3729 requirements.add(requirementsmod.SPARSEREVLOG_REQUIREMENT) |
43030
827cb4fe62a3
sidedata: introduce a new requirement to protect the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43026
diff
changeset
|
3730 |
48674
f7086f6173f8
dirstate-v2: rename the configuration to enable the format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48295
diff
changeset
|
3731 # experimental config: format.use-dirstate-v2 |
47279
40b51c28b242
dirstate-v2: Update the expected output of some tests for new requirement
Simon Sapin <simon.sapin@octobus.net>
parents:
47277
diff
changeset
|
3732 # Keep this logic in sync with `has_dirstate_v2()` in `tests/hghave.py` |
48674
f7086f6173f8
dirstate-v2: rename the configuration to enable the format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48295
diff
changeset
|
3733 if ui.configbool(b'format', b'use-dirstate-v2'): |
48223
b4f83c9e7905
dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net>
parents:
48040
diff
changeset
|
3734 requirements.add(requirementsmod.DIRSTATE_V2_REQUIREMENT) |
47277
ed0d54b20c5b
dirstate-v2: Add a new experimental `exp-dirstate-v2` repository requirement
Simon Sapin <simon.sapin@octobus.net>
parents:
47265
diff
changeset
|
3735 |
43137
81efc4a295e7
sidedatacopies: add a new requirement for storing copies into sidedata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
3736 # experimental config: format.exp-use-copies-side-data-changeset |
81efc4a295e7
sidedatacopies: add a new requirement for storing copies into sidedata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
3737 if ui.configbool(b'format', b'exp-use-copies-side-data-changeset'): |
47265
a07381751dc9
changelogv2: `copies-side-data` now implies `changelogv2`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47263
diff
changeset
|
3738 requirements.add(requirementsmod.CHANGELOGV2_REQUIREMENT) |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
3739 requirements.add(requirementsmod.COPIESSDC_REQUIREMENT) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3740 if ui.configbool(b'experimental', b'treemanifest'): |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
3741 requirements.add(requirementsmod.TREEMANIFEST_REQUIREMENT) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3742 |
47263
6c84fc9c9a90
changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47260
diff
changeset
|
3743 changelogv2 = ui.config(b'format', b'exp-use-changelog-v2') |
6c84fc9c9a90
changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47260
diff
changeset
|
3744 if changelogv2 == b'enable-unstable-format-and-corrupt-my-data': |
6c84fc9c9a90
changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47260
diff
changeset
|
3745 requirements.add(requirementsmod.CHANGELOGV2_REQUIREMENT) |
6c84fc9c9a90
changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47260
diff
changeset
|
3746 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3747 revlogv2 = ui.config(b'experimental', b'revlogv2') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3748 if revlogv2 == b'enable-unstable-format-and-corrupt-my-data': |
46705
fd55a9eb1507
revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents:
46675
diff
changeset
|
3749 requirements.discard(requirementsmod.REVLOGV1_REQUIREMENT) |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
3750 requirements.add(requirementsmod.REVLOGV2_REQUIREMENT) |
39298
7a9f15ed3b96
phases: add a repository requirement about internal phase
Boris Feld <boris.feld@octobus.net>
parents:
39111
diff
changeset
|
3751 # experimental config: format.internal-phase |
49452
74fb1842f8b9
phase: rename the requirement for internal-phase (BC)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49451
diff
changeset
|
3752 if ui.configbool(b'format', b'use-internal-phase'): |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
3753 requirements.add(requirementsmod.INTERNAL_PHASE_REQUIREMENT) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3754 |
49451
0c70d888a484
phase: introduce a dedicated requirement for the `archived` phase
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49355
diff
changeset
|
3755 # experimental config: format.exp-archived-phase |
0c70d888a484
phase: introduce a dedicated requirement for the `archived` phase
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49355
diff
changeset
|
3756 if ui.configbool(b'format', b'exp-archived-phase'): |
0c70d888a484
phase: introduce a dedicated requirement for the `archived` phase
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49355
diff
changeset
|
3757 requirements.add(requirementsmod.ARCHIVED_PHASE_REQUIREMENT) |
0c70d888a484
phase: introduce a dedicated requirement for the `archived` phase
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49355
diff
changeset
|
3758 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3759 if createopts.get(b'narrowfiles'): |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
3760 requirements.add(requirementsmod.NARROW_REQUIREMENT) |
39551
261f1e8dc300
localrepo: add requirement when narrow files creation option present
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
3761 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3762 if createopts.get(b'lfs'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3763 requirements.add(b'lfs') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3764 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3765 if ui.configbool(b'format', b'bookmarks-in-store'): |
48599
dfbfa802876b
requirements: move "bookmark in store" requirements in the right module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48466
diff
changeset
|
3766 requirements.add(requirementsmod.BOOKMARKS_IN_STORE_REQUIREMENT) |
42325
526750cdd02d
bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents:
42300
diff
changeset
|
3767 |
50759
f0ae403bf704
configitems: use standard "dynamicdefault" approach in edge case
Raphaël Gomès <rgomes@octobus.net>
parents:
50699
diff
changeset
|
3768 # The feature is disabled unless a fast implementation is available. |
f0ae403bf704
configitems: use standard "dynamicdefault" approach in edge case
Raphaël Gomès <rgomes@octobus.net>
parents:
50699
diff
changeset
|
3769 persistent_nodemap_default = policy.importrust('revlog') is not None |
f0ae403bf704
configitems: use standard "dynamicdefault" approach in edge case
Raphaël Gomès <rgomes@octobus.net>
parents:
50699
diff
changeset
|
3770 if ui.configbool( |
f0ae403bf704
configitems: use standard "dynamicdefault" approach in edge case
Raphaël Gomès <rgomes@octobus.net>
parents:
50699
diff
changeset
|
3771 b'format', b'use-persistent-nodemap', persistent_nodemap_default |
f0ae403bf704
configitems: use standard "dynamicdefault" approach in edge case
Raphaël Gomès <rgomes@octobus.net>
parents:
50699
diff
changeset
|
3772 ): |
45373
d7dcc75a3eae
localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45372
diff
changeset
|
3773 requirements.add(requirementsmod.NODEMAP_REQUIREMENT) |
44791
b81486b609a3
nodemap: gate the feature behind a new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44788
diff
changeset
|
3774 |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
3775 # if share-safe is enabled, let's create the new repository with the new |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
3776 # requirement |
46334
4b0192f592cf
share: move share safe functionality out of experimental
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46333
diff
changeset
|
3777 if ui.configbool(b'format', b'use-share-safe'): |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
3778 requirements.add(requirementsmod.SHARESAFE_REQUIREMENT) |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
3779 |
48466
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3780 # if we are creating a share-repo¹ we have to handle requirement |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3781 # differently. |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3782 # |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3783 # [1] (i.e. reusing the store from another repository, just having a |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3784 # working copy) |
48465
7964a2dbde12
share: move the requirement initialisation code around
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48295
diff
changeset
|
3785 if b'sharedrepo' in createopts: |
48466
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3786 source_requirements = set(createopts[b'sharedrepo'].requirements) |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3787 |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3788 if requirementsmod.SHARESAFE_REQUIREMENT not in source_requirements: |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3789 # share to an old school repository, we have to copy the |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3790 # requirements and hope for the best. |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3791 requirements = source_requirements |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3792 else: |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3793 # We have control on the working copy only, so "copy" the non |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3794 # working copy part over, ignoring previous logic. |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3795 to_drop = set() |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3796 for req in requirements: |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3797 if req in requirementsmod.WORKING_DIR_REQUIREMENTS: |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3798 continue |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3799 if req in source_requirements: |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3800 continue |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3801 to_drop.add(req) |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3802 requirements -= to_drop |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3803 requirements |= source_requirements |
bf2738e03e96
share: make it possible to control the working copy format variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48465
diff
changeset
|
3804 |
48465
7964a2dbde12
share: move the requirement initialisation code around
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48295
diff
changeset
|
3805 if createopts.get(b'sharedrelative'): |
7964a2dbde12
share: move the requirement initialisation code around
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48295
diff
changeset
|
3806 requirements.add(requirementsmod.RELATIVE_SHARED_REQUIREMENT) |
7964a2dbde12
share: move the requirement initialisation code around
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48295
diff
changeset
|
3807 else: |
7964a2dbde12
share: move the requirement initialisation code around
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48295
diff
changeset
|
3808 requirements.add(requirementsmod.SHARED_REQUIREMENT) |
7964a2dbde12
share: move the requirement initialisation code around
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48295
diff
changeset
|
3809 |
48793
6e559391f96e
tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48792
diff
changeset
|
3810 if ui.configbool(b'format', b'use-dirstate-tracked-hint'): |
6e559391f96e
tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48792
diff
changeset
|
3811 version = ui.configint(b'format', b'use-dirstate-tracked-hint.version') |
49540
bc2ecf08ae04
localrepo: byteify the requirements.DIRSTATE_TRACKED_HINT_Vx warning message
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
3812 msg = _(b"ignoring unknown tracked key version: %d\n") |
bc2ecf08ae04
localrepo: byteify the requirements.DIRSTATE_TRACKED_HINT_Vx warning message
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
3813 hint = _( |
bc2ecf08ae04
localrepo: byteify the requirements.DIRSTATE_TRACKED_HINT_Vx warning message
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
3814 b"see `hg help config.format.use-dirstate-tracked-hint-version" |
bc2ecf08ae04
localrepo: byteify the requirements.DIRSTATE_TRACKED_HINT_Vx warning message
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
3815 ) |
48771
79a967128055
dirstate-tracked-key: update the config value to match latest discussion
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48684
diff
changeset
|
3816 if version != 1: |
79a967128055
dirstate-tracked-key: update the config value to match latest discussion
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48684
diff
changeset
|
3817 ui.warn(msg % version, hint=hint) |
48684
568f63b5a30f
dirstate: introduce a "tracked-key" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48681
diff
changeset
|
3818 else: |
48793
6e559391f96e
tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48792
diff
changeset
|
3819 requirements.add(requirementsmod.DIRSTATE_TRACKED_HINT_V1) |
48684
568f63b5a30f
dirstate: introduce a "tracked-key" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48681
diff
changeset
|
3820 |
28164
ad11edefa7c4
localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28163
diff
changeset
|
3821 return requirements |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3822 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3823 |
45300
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3824 def checkrequirementscompat(ui, requirements): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3825 """Checks compatibility of repository requirements enabled and disabled. |
45300
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3826 |
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3827 Returns a set of requirements which needs to be dropped because dependend |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45846
diff
changeset
|
3828 requirements are not enabled. Also warns users about it""" |
45300
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3829 |
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3830 dropped = set() |
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3831 |
46637
ab58098bebed
requirements: also add a store constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46636
diff
changeset
|
3832 if requirementsmod.STORE_REQUIREMENT not in requirements: |
48599
dfbfa802876b
requirements: move "bookmark in store" requirements in the right module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48466
diff
changeset
|
3833 if requirementsmod.BOOKMARKS_IN_STORE_REQUIREMENT in requirements: |
45300
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3834 ui.warn( |
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3835 _( |
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3836 b'ignoring enabled \'format.bookmarks-in-store\' config ' |
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3837 b'beacuse it is incompatible with disabled ' |
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3838 b'\'format.usestore\' config\n' |
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3839 ) |
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3840 ) |
48599
dfbfa802876b
requirements: move "bookmark in store" requirements in the right module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48466
diff
changeset
|
3841 dropped.add(requirementsmod.BOOKMARKS_IN_STORE_REQUIREMENT) |
45300
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3842 |
45386
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45373
diff
changeset
|
3843 if ( |
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45373
diff
changeset
|
3844 requirementsmod.SHARED_REQUIREMENT in requirements |
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45373
diff
changeset
|
3845 or requirementsmod.RELATIVE_SHARED_REQUIREMENT in requirements |
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45373
diff
changeset
|
3846 ): |
45301
dc283bc7e033
localrepo: abort creating a shared repo if the source does not have store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45300
diff
changeset
|
3847 raise error.Abort( |
dc283bc7e033
localrepo: abort creating a shared repo if the source does not have store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45300
diff
changeset
|
3848 _( |
dc283bc7e033
localrepo: abort creating a shared repo if the source does not have store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45300
diff
changeset
|
3849 b"cannot create shared repository as source was created" |
dc283bc7e033
localrepo: abort creating a shared repo if the source does not have store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45300
diff
changeset
|
3850 b" with 'format.usestore' config disabled" |
dc283bc7e033
localrepo: abort creating a shared repo if the source does not have store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45300
diff
changeset
|
3851 ) |
dc283bc7e033
localrepo: abort creating a shared repo if the source does not have store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45300
diff
changeset
|
3852 ) |
dc283bc7e033
localrepo: abort creating a shared repo if the source does not have store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45300
diff
changeset
|
3853 |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
3854 if requirementsmod.SHARESAFE_REQUIREMENT in requirements: |
48666
4c1135d15700
requirements: do not warn about dropping share-safe, unless explicitly set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48652
diff
changeset
|
3855 if ui.hasconfig(b'format', b'use-share-safe'): |
4c1135d15700
requirements: do not warn about dropping share-safe, unless explicitly set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48652
diff
changeset
|
3856 msg = _( |
46334
4b0192f592cf
share: move share safe functionality out of experimental
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46333
diff
changeset
|
3857 b"ignoring enabled 'format.use-share-safe' config because " |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
3858 b"it is incompatible with disabled 'format.usestore'" |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
3859 b" config\n" |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
3860 ) |
48666
4c1135d15700
requirements: do not warn about dropping share-safe, unless explicitly set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48652
diff
changeset
|
3861 ui.warn(msg) |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
3862 dropped.add(requirementsmod.SHARESAFE_REQUIREMENT) |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
3863 |
45300
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3864 return dropped |
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3865 |
dc457177dbc1
localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45204
diff
changeset
|
3866 |
39549
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3867 def filterknowncreateopts(ui, createopts): |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3868 """Filters a dict of repo creation options against options that are known. |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3869 |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3870 Receives a dict of repo creation options and returns a dict of those |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3871 options that we don't know how to handle. |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3872 |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3873 This function is called as part of repository creation. If the |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3874 returned dict contains any items, repository creation will not |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3875 be allowed, as it means there was a request to create a repository |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3876 with options not recognized by loaded code. |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3877 |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3878 Extensions can wrap this function to filter out creation options |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3879 they know how to handle. |
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3880 """ |
39848
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3881 known = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3882 b'backend', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3883 b'lfs', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3884 b'narrowfiles', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3885 b'sharedrepo', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3886 b'sharedrelative', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3887 b'shareditems', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3888 b'shallowfilestore', |
39848
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3889 } |
39551
261f1e8dc300
localrepo: add requirement when narrow files creation option present
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
3890 |
261f1e8dc300
localrepo: add requirement when narrow files creation option present
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39549
diff
changeset
|
3891 return {k: v for k, v in createopts.items() if k not in known} |
39549
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39548
diff
changeset
|
3892 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3893 |
49571
8fa3f7c3a9ad
typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
49493
diff
changeset
|
3894 def createrepository(ui, path: bytes, createopts=None, requirements=None): |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3895 """Create a new repository in a vfs. |
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3896 |
39590
e471cb2852ea
localrepo: move check for existing repo into createrepository()
Martin von Zweigbergk <martinvonz@google.com>
parents:
39580
diff
changeset
|
3897 ``path`` path to the new repo's working directory. |
39580
a64a965b3610
localrepo: fix a mixmatched arg name in createrepository() docstring
Martin von Zweigbergk <martinvonz@google.com>
parents:
39557
diff
changeset
|
3898 ``createopts`` options for the new repository. |
47440
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3899 ``requirement`` predefined set of requirements. |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3900 (incompatible with ``createopts``) |
39848
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3901 |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3902 The following keys for ``createopts`` are recognized: |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3903 |
39996
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3904 backend |
dbcb466d0065
localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39994
diff
changeset
|
3905 The storage backend to use. |
40324
6637b079ae45
lfs: autoload the extension when cloning from repo with lfs enabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
40296
diff
changeset
|
3906 lfs |
6637b079ae45
lfs: autoload the extension when cloning from repo with lfs enabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
40296
diff
changeset
|
3907 Repository will be created with ``lfs`` requirement. The lfs extension |
6637b079ae45
lfs: autoload the extension when cloning from repo with lfs enabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
40296
diff
changeset
|
3908 will automatically be loaded when the repository is accessed. |
39848
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3909 narrowfiles |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3910 Set up repository to support narrow file storage. |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3911 sharedrepo |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3912 Repository object from which storage should be shared. |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3913 sharedrelative |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3914 Boolean indicating if the path to the shared repo should be |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3915 stored as relative. By default, the pointer to the "parent" repo |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3916 is stored as an absolute path. |
39849
d3d4b4b5f725
localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39848
diff
changeset
|
3917 shareditems |
d3d4b4b5f725
localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39848
diff
changeset
|
3918 Set of items to share to the new repository (in addition to storage). |
40390
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40360
diff
changeset
|
3919 shallowfilestore |
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40360
diff
changeset
|
3920 Indicates that storage for files should be shallow (not all ancestor |
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40360
diff
changeset
|
3921 revisions are known). |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3922 """ |
47440
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3923 |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3924 if requirements is not None: |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3925 if createopts is not None: |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3926 msg = b'cannot specify both createopts and requirements' |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3927 raise error.ProgrammingError(msg) |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3928 createopts = {} |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3929 else: |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3930 createopts = defaultcreateopts(ui, createopts=createopts) |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3931 |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3932 unknownopts = filterknowncreateopts(ui, createopts) |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3933 |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3934 if not isinstance(unknownopts, dict): |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3935 raise error.ProgrammingError( |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3936 b'filterknowncreateopts() did not return a dict' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3937 ) |
47440
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3938 |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3939 if unknownopts: |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3940 raise error.Abort( |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3941 _( |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3942 b'unable to create repository because of unknown ' |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3943 b'creation option: %s' |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3944 ) |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3945 % b', '.join(sorted(unknownopts)), |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3946 hint=_(b'is a required extension not loaded?'), |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3947 ) |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3948 |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3949 requirements = newreporequirements(ui, createopts=createopts) |
e43e68624dfb
createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47421
diff
changeset
|
3950 requirements -= checkrequirementscompat(ui, requirements) |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3951 |
39590
e471cb2852ea
localrepo: move check for existing repo into createrepository()
Martin von Zweigbergk <martinvonz@google.com>
parents:
39580
diff
changeset
|
3952 wdirvfs = vfsmod.vfs(path, expandpath=True, realpath=True) |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3953 |
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3954 hgvfs = vfsmod.vfs(wdirvfs.join(b'.hg')) |
39590
e471cb2852ea
localrepo: move check for existing repo into createrepository()
Martin von Zweigbergk <martinvonz@google.com>
parents:
39580
diff
changeset
|
3955 if hgvfs.exists(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3956 raise error.RepoError(_(b'repository %s already exists') % path) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3957 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3958 if b'sharedrepo' in createopts: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3959 sharedpath = createopts[b'sharedrepo'].sharedpath |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3960 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3961 if createopts.get(b'sharedrelative'): |
39848
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3962 try: |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3963 sharedpath = os.path.relpath(sharedpath, hgvfs.base) |
46888
218a26df7813
share: store relative share paths with '/' separators
Matt Harbison <matt_harbison@yahoo.com>
parents:
46851
diff
changeset
|
3964 sharedpath = util.pconvert(sharedpath) |
39848
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3965 except (IOError, ValueError) as e: |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3966 # ValueError is raised on Windows if the drive letters differ |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3967 # on each path. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3968 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3969 _(b'cannot calculate relative path'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3970 hint=stringutil.forcebytestr(e), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3971 ) |
39848
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
3972 |
39847
b504ff813c4f
localrepo: validate directories before creating any
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39846
diff
changeset
|
3973 if not wdirvfs.exists(): |
b504ff813c4f
localrepo: validate directories before creating any
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39846
diff
changeset
|
3974 wdirvfs.makedirs() |
b504ff813c4f
localrepo: validate directories before creating any
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39846
diff
changeset
|
3975 |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3976 hgvfs.makedir(notindexed=True) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3977 if b'sharedrepo' not in createopts: |
40793
64cdfcc73706
cache: create `cache` directory at init time
Boris Feld <boris.feld@octobus.net>
parents:
40785
diff
changeset
|
3978 hgvfs.mkdir(b'cache') |
40794
d5622dfe4ba3
cache: create `wcache` directory at init time
Boris Feld <boris.feld@octobus.net>
parents:
40793
diff
changeset
|
3979 hgvfs.mkdir(b'wcache') |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3980 |
46637
ab58098bebed
requirements: also add a store constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46636
diff
changeset
|
3981 has_store = requirementsmod.STORE_REQUIREMENT in requirements |
ab58098bebed
requirements: also add a store constant
Raphaël Gomès <rgomes@octobus.net>
parents:
46636
diff
changeset
|
3982 if has_store and b'sharedrepo' not in createopts: |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3983 hgvfs.mkdir(b'store') |
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3984 |
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3985 # We create an invalid changelog outside the store so very old |
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3986 # Mercurial versions (which didn't know about the requirements |
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3987 # file) encounter an error on reading the changelog. This |
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3988 # effectively locks out old clients and prevents them from |
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3989 # mucking with a repo in an unknown format. |
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3990 # |
46406
95054317e172
revlog: use a less probable revlog version for backwards compatibility
Raphaël Gomès <rgomes@octobus.net>
parents:
46372
diff
changeset
|
3991 # The revlog header has version 65535, which won't be recognized by |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3992 # such old clients. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3993 hgvfs.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3994 b'00changelog.i', |
46406
95054317e172
revlog: use a less probable revlog version for backwards compatibility
Raphaël Gomès <rgomes@octobus.net>
parents:
46372
diff
changeset
|
3995 b'\0\0\xFF\xFF dummy changelog to prevent using the old repo ' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3996 b'layout', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
3997 ) |
39548
7ce9dea3a14a
localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
3998 |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
3999 # Filter the requirements into working copy and store ones |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
4000 wcreq, storereq = scmutil.filterrequirements(requirements) |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
4001 # write working copy ones |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
4002 scmutil.writerequires(hgvfs, wcreq) |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
4003 # If there are store requirements and the current repository |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
4004 # is not a shared one, write stored requirements |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
4005 # For new shared repository, we don't need to write the store |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
4006 # requirements as they are already present in store requires |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
4007 if storereq and b'sharedrepo' not in createopts: |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
4008 storevfs = vfsmod.vfs(hgvfs.join(b'store'), cacheaudited=True) |
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45464
diff
changeset
|
4009 scmutil.writerequires(storevfs, storereq) |
39606
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4010 |
39848
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
4011 # Write out file telling readers where to find the shared store. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4012 if b'sharedrepo' in createopts: |
39848
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
4013 hgvfs.write(b'sharedpath', sharedpath) |
4ece3cdfd907
localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39847
diff
changeset
|
4014 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4015 if createopts.get(b'shareditems'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
4016 shared = b'\n'.join(sorted(createopts[b'shareditems'])) + b'\n' |
39849
d3d4b4b5f725
localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39848
diff
changeset
|
4017 hgvfs.write(b'shared', shared) |
d3d4b4b5f725
localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39848
diff
changeset
|
4018 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
4019 |
39606
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4020 def poisonrepository(repo): |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4021 """Poison a repository instance so it can no longer be used.""" |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4022 # Perform any cleanup on the instance. |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4023 repo.close() |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4024 |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4025 # Our strategy is to replace the type of the object with one that |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4026 # has all attribute lookups result in error. |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4027 # |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4028 # But we have to allow the close() method because some constructors |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4029 # of repos call close() on repo references. |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48935
diff
changeset
|
4030 class poisonedrepository: |
39606
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4031 def __getattribute__(self, item): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43421
diff
changeset
|
4032 if item == 'close': |
39606
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4033 return object.__getattribute__(self, item) |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4034 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
4035 raise error.ProgrammingError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
4036 b'repo instances should not be used after unshare' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43030
diff
changeset
|
4037 ) |
39606
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4038 |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4039 def close(self): |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4040 pass |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4041 |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4042 # We may have a repoview, which intercepts __setattr__. So be sure |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39591
diff
changeset
|
4043 # we operate at the lowest level possible. |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43421
diff
changeset
|
4044 object.__setattr__(repo, '__class__', poisonedrepository) |