annotate mercurial/localrepo.py @ 51031:133f5a54ed9d

revlog: create the revlog object at the repository level There is currently no value set in it, but we will be able to start centralise config parsing at the repository level.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 10 Oct 2023 10:02:21 +0200
parents 18c8c18993f0
children 774c00348f9f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1089
142b5d5ec9cc Break apart hg.py
mpm@selenic.com
parents: 1072
diff changeset
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
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9954
diff changeset
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
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
9
45418
4111954cf86d localrepo: use functools.wraps() in unfilteredmethod decorator
Augie Fackler <raf@durin42.com>
parents: 45386
diff changeset
10 import functools
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
11 import os
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
12 import random
50070
c8f32aa80dca rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50069
diff changeset
13 import re
37630
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
14 import sys
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
15 import time
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
16 import weakref
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
17
48835
a0da5075bca3 cleanup: directly use concurrent.futures instead of via pycompat
Augie Fackler <augie@google.com>
parents: 48793
diff changeset
18 from concurrent import futures
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
19 from typing import (
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
20 Optional,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
21 )
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
22
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
23 from .i18n import _
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
24 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
25 bin,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
26 hex,
39958
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39957
diff changeset
27 nullrev,
46780
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46713
diff changeset
28 sha1nodeconstants,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
29 short,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
30 )
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
31 from . import (
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
32 bookmarks,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
33 branchmap,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
34 bundle2,
45785
80f32ec8653a clonebundle: move the manifest filename to a constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45783
diff changeset
35 bundlecaches,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
36 changegroup,
31111
95ec3ad62f62 color: initialize color for the localrepo ui
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31054
diff changeset
37 color,
45203
ae5c1a3bc339 commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45202
diff changeset
38 commit,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
39 context,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
40 dirstate,
34097
f7d41b85bbf6 changegroup: replace changegroupsubset with makechangegroup
Durham Goode <durham@fb.com>
parents: 33803
diff changeset
41 discovery,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
42 encoding,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
43 error,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
44 exchange,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
45 extensions,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
46 filelog,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
47 hook,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
48 lock as lockmod,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
49 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
50 mergestate as mergestatemod,
30496
a90867a22daf localrepo: refer to checkunresolved by its new name
Augie Fackler <augie@google.com>
parents: 30492
diff changeset
51 mergeutil,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
52 namespaces,
36471
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
53 narrowspec,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
54 obsolete,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
55 pathutil,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
56 phases,
50759
f0ae403bf704 configitems: use standard "dynamicdefault" approach in edge case
Raphaël Gomès <rgomes@octobus.net>
parents: 50699
diff changeset
57 policy,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
58 pushkey,
31508
590319c07259 localrepo: ensure transaction id is fully bytes on py3
Augie Fackler <augie@google.com>
parents: 31476
diff changeset
59 pycompat,
44243
238790674d69 config: add a function in `rcutil` to abstract HGRCSKIPREPO
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44124
diff changeset
60 rcutil,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
61 repoview,
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
62 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
63 revlog,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
64 revset,
31024
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30989
diff changeset
65 revsetlang,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
66 scmutil,
33373
fb320398a21c dirstate: expose a sparse matcher on dirstate (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33336
diff changeset
67 sparse,
39697
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
68 store as storemod,
36009
55e8efa2451a subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents: 35896
diff changeset
69 subrepoutil,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
70 tags as tagsmod,
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
71 transaction,
31054
59e69ed81776 localrepo: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31025
diff changeset
72 txnutil,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
73 util,
31231
0a38a313033e vfs: use 'vfs' module directly in 'mercurial.localrepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31209
diff changeset
74 vfs as vfsmod,
46902
631001150e13 narrow: add capabilities for local repos, not just remote peers
Charles Chamberlain <cchamberlain@janestreet.com>
parents: 46888
diff changeset
75 wireprototypes,
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
76 )
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
77
268662aac075 interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 42712
diff changeset
78 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
79 repository,
42814
2c4f656c8e9f interfaceutil: move to interfaces/
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 42813
diff changeset
80 util as interfaceutil,
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
81 )
268662aac075 interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 42712
diff changeset
82
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36952
diff changeset
83 from .utils import (
44060
a61287a95dc3 core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents: 44052
diff changeset
84 hashutil,
37120
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
85 procutil,
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36952
diff changeset
86 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
87 urlutil,
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36952
diff changeset
88 )
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
89
46607
e9901d01d135 revlog: add a mechanism to verify expected file position before appending
Kyle Lippincott <spectral@google.com>
parents: 46414
diff changeset
90 from .revlogutils import (
e9901d01d135 revlog: add a mechanism to verify expected file position before appending
Kyle Lippincott <spectral@google.com>
parents: 46414
diff changeset
91 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
92 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
93 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
94 )
39506
b66ea3fc3a86 sparse-revlog: set max delta chain length to on thousand
Boris Feld <boris.feld@octobus.net>
parents: 39312
diff changeset
95
27522
798535853345 localrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27319
diff changeset
96 release = lockmod.release
28883
032c4c2f802a pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents: 28876
diff changeset
97 urlerr = util.urlerr
032c4c2f802a pycompat: switch to util.urlreq/util.urlerr for py3 compat
timeless <timeless@mozdev.org>
parents: 28876
diff changeset
98 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
99
50195
11e6eee4b063 transaction: use the standard transaction mechanism to backup branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50194
diff changeset
100 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
101 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
102 )
50070
c8f32aa80dca rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50069
diff changeset
103
33277
4470508eb6f2 localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33260
diff changeset
104 # 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
105 # - '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
106 # - '' 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
107 _cachedfiles = set()
4470508eb6f2 localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33260
diff changeset
108
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
109
33176
edb7f628ef8b localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32895
diff changeset
110 class _basefilecache(scmutil.filecache):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
111 """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
112
18014
a39fe76c4c65 clfilter: ensure that filecache on localrepo is unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18013
diff changeset
113 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
114 if repo is None:
36fbd72c2f39 scmutil: allow access to filecache descriptor on class
Martijn Pieters <mjpieters@fb.com>
parents: 29352
diff changeset
115 return self
40424
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40423
diff changeset
116 # 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
117 unfi = repo.unfiltered()
597bb5a6867f filecache: use try-except for faster __dict__ lookup
Yuya Nishihara <yuya@tcha.org>
parents: 40390
diff changeset
118 try:
597bb5a6867f filecache: use try-except for faster __dict__ lookup
Yuya Nishihara <yuya@tcha.org>
parents: 40390
diff changeset
119 return unfi.__dict__[self.sname]
597bb5a6867f filecache: use try-except for faster __dict__ lookup
Yuya Nishihara <yuya@tcha.org>
parents: 40390
diff changeset
120 except KeyError:
597bb5a6867f filecache: use try-except for faster __dict__ lookup
Yuya Nishihara <yuya@tcha.org>
parents: 40390
diff changeset
121 pass
597bb5a6867f filecache: use try-except for faster __dict__ lookup
Yuya Nishihara <yuya@tcha.org>
parents: 40390
diff changeset
122 return super(_basefilecache, self).__get__(unfi, type)
40424
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40423
diff changeset
123
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40423
diff changeset
124 def set(self, repo, value):
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40423
diff changeset
125 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
126
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
127
33176
edb7f628ef8b localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32895
diff changeset
128 class repofilecache(_basefilecache):
edb7f628ef8b localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32895
diff changeset
129 """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
130
33277
4470508eb6f2 localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33260
diff changeset
131 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
132 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
133 for path in paths:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
134 _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
135
33176
edb7f628ef8b localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32895
diff changeset
136 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
137 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
138
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
139
33176
edb7f628ef8b localrepo: factor out base of filecache annotation class
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32895
diff changeset
140 class storecache(_basefilecache):
16198
fa8488565afd filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents: 16144
diff changeset
141 """filecache for files in the store"""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
142
33277
4470508eb6f2 localrepo: store path and vfs location of cached properties
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33260
diff changeset
143 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
144 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
145 for path in paths:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
146 _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
147
16198
fa8488565afd filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents: 16144
diff changeset
148 def join(self, obj, fname):
fa8488565afd filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents: 16144
diff changeset
149 return obj.sjoin(fname)
fa8488565afd filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents: 16144
diff changeset
150
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
151
48039
c094e829e848 changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47822
diff changeset
152 class changelogcache(storecache):
c094e829e848 changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47822
diff changeset
153 """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
154
c094e829e848 changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47822
diff changeset
155 def __init__(self):
c094e829e848 changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47822
diff changeset
156 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
157 _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
158 _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
159
c094e829e848 changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47822
diff changeset
160 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
161 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
162 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
163 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
164 return paths
c094e829e848 changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47822
diff changeset
165
c094e829e848 changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47822
diff changeset
166
48040
7970895a21cb manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48039
diff changeset
167 class manifestlogcache(storecache):
7970895a21cb manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48039
diff changeset
168 """filecache for the manifestlog"""
7970895a21cb manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48039
diff changeset
169
7970895a21cb manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48039
diff changeset
170 def __init__(self):
7970895a21cb manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48039
diff changeset
171 super(manifestlogcache, self).__init__()
7970895a21cb manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48039
diff changeset
172 _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
173 _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
174
7970895a21cb manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48039
diff changeset
175 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
176 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
177 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
178 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
179 return paths
7970895a21cb manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48039
diff changeset
180
7970895a21cb manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48039
diff changeset
181
42323
c2b83c957621 localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42141
diff changeset
182 class mixedrepostorecache(_basefilecache):
c2b83c957621 localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42141
diff changeset
183 """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
184
42323
c2b83c957621 localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42141
diff changeset
185 def __init__(self, *pathsandlocations):
c2b83c957621 localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42141
diff changeset
186 # 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
187 # 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
188 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
189 _cachedfiles.update(pathsandlocations)
42323
c2b83c957621 localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42141
diff changeset
190
c2b83c957621 localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42141
diff changeset
191 def join(self, obj, fnameandlocation):
c2b83c957621 localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42141
diff changeset
192 fname, location = fnameandlocation
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
193 if location == b'plain':
42323
c2b83c957621 localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42141
diff changeset
194 return obj.vfs.join(fname)
c2b83c957621 localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42141
diff changeset
195 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
196 if location != b'':
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
197 raise error.ProgrammingError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
198 b'unexpected location: %s' % location
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
199 )
42323
c2b83c957621 localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42141
diff changeset
200 return obj.sjoin(fname)
c2b83c957621 localrepo: grab mixedrepostorecache class from 526750cdd02d
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42141
diff changeset
201
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
202
33382
b107a7660f4e localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33373
diff changeset
203 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
204 """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
205
b107a7660f4e localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33373
diff changeset
206 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
207 """
b107a7660f4e localrepo: add isfilecached to check filecache-ed property is already cached
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33373
diff changeset
208 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
209 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
210 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
211 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
212
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
213
29104
b207653ada10 localrepo: remove a couple of local type aliases
Augie Fackler <augie@google.com>
parents: 29075
diff changeset
214 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
215 """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
216
98c867ac1330 clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18009
diff changeset
217 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
218 unfi = repo.unfiltered()
9789670992d6 repoview: have unfilteredpropertycache using the underlying cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 19515
diff changeset
219 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
220 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
221 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
222
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
223
29104
b207653ada10 localrepo: remove a couple of local type aliases
Augie Fackler <augie@google.com>
parents: 29075
diff changeset
224 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
225 """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
226
98c867ac1330 clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18009
diff changeset
227 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
228 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
229
98c867ac1330 clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18009
diff changeset
230
98c867ac1330 clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18009
diff changeset
231 def hasunfilteredcache(repo, name):
18644
3e92772d5383 spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents: 18520
diff changeset
232 """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
233 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
234
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
235
18016
2a393df0f5cc clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18014
diff changeset
236 def unfilteredmethod(orig):
17994
8899bf48116a clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17993
diff changeset
237 """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
238
45418
4111954cf86d localrepo: use functools.wraps() in unfilteredmethod decorator
Augie Fackler <raf@durin42.com>
parents: 45386
diff changeset
239 @functools.wraps(orig)
17994
8899bf48116a clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17993
diff changeset
240 def wrapper(repo, *args, **kwargs):
8899bf48116a clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17993
diff changeset
241 return orig(repo.unfiltered(), *args, **kwargs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
242
17994
8899bf48116a clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17993
diff changeset
243 return wrapper
8899bf48116a clfilter: introduce an `unfilteredmethod` decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17993
diff changeset
244
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
245
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
246 moderncaps = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
247 b'lookup',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
248 b'branchmap',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
249 b'pushkey',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
250 b'known',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
251 b'getbundle',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
252 b'unbundle',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
253 }
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
254 legacycaps = moderncaps.union({b'changegroupsubset'})
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
255
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
256
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37797
diff changeset
257 @interfaceutil.implementer(repository.ipeercommandexecutor)
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48935
diff changeset
258 class localcommandexecutor:
37630
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
259 def __init__(self, peer):
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
260 self._peer = peer
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
261 self._sent = False
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
262 self._closed = False
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
263
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
264 def __enter__(self):
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
265 return self
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
266
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
267 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
268 self.close()
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
269
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
270 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
271 if self._sent:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
272 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
273 b'callcommand() cannot be used after sendcommands()'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
274 )
37630
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
275
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
276 if self._closed:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
277 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
278 b'callcommand() cannot be used after close()'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
279 )
37630
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
280
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
281 # 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
282 # 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
283 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
284
48835
a0da5075bca3 cleanup: directly use concurrent.futures instead of via pycompat
Augie Fackler <augie@google.com>
parents: 48793
diff changeset
285 f = futures.Future()
37630
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
286
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
287 try:
37670
719b8cb22936 localrepo: add some overlooked strkwargs love for py3
Augie Fackler <augie@google.com>
parents: 37669
diff changeset
288 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
289 except Exception:
37669
1cb54e6193a6 py3: paper over differences in future exception handling
Augie Fackler <augie@google.com>
parents: 37650
diff changeset
290 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
291 else:
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
292 f.set_result(result)
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
293
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
294 return f
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
295
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
296 def sendcommands(self):
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
297 self._sent = True
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
298
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
299 def close(self):
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
300 self._closed = True
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
301
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
302
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37797
diff changeset
303 @interfaceutil.implementer(repository.ipeercommands)
33803
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
304 class localpeer(repository.peer):
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
305 '''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
306
50440
3a2df812e1c7 pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents: 50324
diff changeset
307 def __init__(self, repo, caps=None, 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
308 super(localpeer, self).__init__(
3a2df812e1c7 pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents: 50324
diff changeset
309 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
310 )
3a2df812e1c7 pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents: 50324
diff changeset
311
31412
ecc87acb4d10 localrepo: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31373
diff changeset
312 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
313 caps = moderncaps.copy()
50441
b15b6e2c3309 hidden: add support for --remote-hidden to localpeer
Manuel Jacob <me@manueljacob.de>
parents: 50440
diff changeset
314 if remotehidden:
b15b6e2c3309 hidden: add support for --remote-hidden to localpeer
Manuel Jacob <me@manueljacob.de>
parents: 50440
diff changeset
315 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
316 else:
b15b6e2c3309 hidden: add support for --remote-hidden to localpeer
Manuel Jacob <me@manueljacob.de>
parents: 50440
diff changeset
317 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
318 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
319 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
320 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
321
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
322 self._caps = repo._restrictcapabilities(caps)
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
323
33803
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
324 # Begin of _basepeer interface.
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
325
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
326 def url(self):
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
327 return self._repo.url()
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 local(self):
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
330 return self._repo
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 canpush(self):
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
333 return True
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
334
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
335 def close(self):
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
336 self._repo.close()
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
337
33803
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
338 # End of _basepeer interface.
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
339
33803
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
340 # Begin of _basewirecommands interface.
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
341
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
342 def branchmap(self):
18279
679767c38cb5 clfilter: drop extra filtering in localpeer
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18278
diff changeset
343 return self._repo.branchmap()
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
344
33803
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
345 def capabilities(self):
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
346 return self._caps
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
347
50699
2aaabd8f4471 clone-bundle: rename the methods and wireprotole command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50673
diff changeset
348 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
349 # 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
350 raise NotImplementedError
60f9602b413e clonebundles: add support for inline (streaming) clonebundles
Mathias De Mare <mathias.de_mare@nokia.com>
parents: 50586
diff changeset
351
37649
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37646
diff changeset
352 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
353 return bundlecaches.get_manifest(self._repo)
37649
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37646
diff changeset
354
33803
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
355 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
356 """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
357 return b"%s %s %s %s %s" % (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
358 one,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
359 two,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
360 pycompat.bytestr(three),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
361 pycompat.bytestr(four),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
362 pycompat.bytestr(five),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
363 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
364
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
365 def getbundle(
46711
a41565bef69f changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents: 46705
diff changeset
366 self,
a41565bef69f changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents: 46705
diff changeset
367 source,
a41565bef69f changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents: 46705
diff changeset
368 heads=None,
a41565bef69f changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents: 46705
diff changeset
369 common=None,
a41565bef69f changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents: 46705
diff changeset
370 bundlecaps=None,
a41565bef69f changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents: 46705
diff changeset
371 remote_sidedata=None,
a41565bef69f changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents: 46705
diff changeset
372 **kwargs
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
373 ):
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
374 chunks = exchange.getbundlechunks(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
375 self._repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
376 source,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
377 heads=heads,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
378 common=common,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
379 bundlecaps=bundlecaps,
46711
a41565bef69f changegroup: add v4 changegroup for revlog v2 exchange
Raphaël Gomès <rgomes@octobus.net>
parents: 46705
diff changeset
380 remote_sidedata=remote_sidedata,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
381 **kwargs
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
382 )[1]
30187
3e86261bf110 exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29975
diff changeset
383 cb = util.chunkbuffer(chunks)
3e86261bf110 exchange: refactor APIs to obtain bundle data (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29975
diff changeset
384
32149
9a9d54ae9963 localrepo: reuse exchange.bundle2requested()
Martin von Zweigbergk <martinvonz@google.com>
parents: 32121
diff changeset
385 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
386 # 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
387 # 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
388 # 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
389 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
390 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
391 return changegroup.getunbundler(b'01', cb, None)
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
392
33803
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
393 def heads(self):
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
394 return self._repo.heads()
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
395
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
396 def known(self, nodes):
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
397 return self._repo.known(nodes)
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 listkeys(self, namespace):
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
400 return self._repo.listkeys(namespace)
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 lookup(self, key):
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
403 return self._repo.lookup(key)
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 pushkey(self, namespace, key, old, new):
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
406 return self._repo.pushkey(namespace, key, old, new)
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 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
409 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
410
37646
72e26319f3b8 wireproto: use command executor for unbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
411 def unbundle(self, bundle, heads, url):
20969
7a679918ee2b localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20963
diff changeset
412 """apply a bundle on a repo
7a679918ee2b localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20963
diff changeset
413
7a679918ee2b localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20963
diff changeset
414 This function handles the repo locking itself."""
7a679918ee2b localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20963
diff changeset
415 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
416 try:
37646
72e26319f3b8 wireproto: use command executor for unbundle
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
417 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
418 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
419 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
420 # 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
421 # 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
422 # 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
423 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
424 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
425 return ret
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25629
diff changeset
426 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
427 # 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
428 # 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
429 # 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
430 # 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
431 #
d99d7e3f5cda bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24798
diff changeset
432 # 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
433 # issue4594
d99d7e3f5cda bundle2-localpeer: properly propagate the server output on error (issue4594)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24798
diff changeset
434 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
435 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
436 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
437 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
438 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
439 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
440 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
441 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
442 raise
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25629
diff changeset
443 except error.PushRaced as exc:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
444 raise error.ResponseError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
445 _(b'push failed:'), stringutil.forcebytestr(exc)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
446 )
20969
7a679918ee2b localrepo: add unbundle support
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20963
diff changeset
447
33803
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
448 # End of _basewirecommands interface.
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
449
33803
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
450 # Begin of peer interface.
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
451
37630
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
452 def commandexecutor(self):
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
453 return localcommandexecutor(self)
e1b32dc4646c wireproto: implement command executor interface for version 1 peers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37615
diff changeset
454
33803
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
455 # End of peer interface.
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
456
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
457
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37797
diff changeset
458 @interfaceutil.implementer(repository.ipeerlegacycommands)
37635
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37633
diff changeset
459 class locallegacypeer(localpeer):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
460 """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
461 restricted capabilities"""
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
462
50440
3a2df812e1c7 pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents: 50324
diff changeset
463 def __init__(self, repo, 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
464 super(locallegacypeer, self).__init__(
3a2df812e1c7 pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents: 50324
diff changeset
465 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
466 )
33803
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
467
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
468 # Begin of baselegacywirecommands interface.
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 def between(self, pairs):
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
471 return self._repo.between(pairs)
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
472
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
473 def branches(self, nodes):
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
474 return self._repo.branches(nodes)
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
475
37635
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37633
diff changeset
476 def changegroup(self, nodes, source):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
477 outgoing = discovery.outgoing(
45144
c93dd9d9f1e6 discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents: 45106
diff changeset
478 self._repo, missingroots=nodes, ancestorsof=self._repo.heads()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
479 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
480 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
481
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
482 def changegroupsubset(self, bases, heads, source):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
483 outgoing = discovery.outgoing(
45144
c93dd9d9f1e6 discovery: change users of `outgoing.missingheads` to `outgoing.ancestorsof`
Manuel Jacob <me@manueljacob.de>
parents: 45106
diff changeset
484 self._repo, missingroots=bases, ancestorsof=heads
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
485 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
486 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
487
33803
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
488 # End of baselegacywirecommands interface.
707750e5310b localrepo: use peer interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33737
diff changeset
489
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
490
37135
ecac0006b90e localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37120
diff changeset
491 # 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
492 # 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
493 # 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
494 #
ecac0006b90e localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37120
diff changeset
495 # 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
496 # 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
497 # 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
498 featuresetupfuncs = set()
ecac0006b90e localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37120
diff changeset
499
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
500
45353
665e911563da localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45301
diff changeset
501 def _getsharedvfs(hgvfs, requirements):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
502 """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
503 repo for a shared repository
665e911563da localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45301
diff changeset
504
665e911563da localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45301
diff changeset
505 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
506 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
507 """
665e911563da localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45301
diff changeset
508 # 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
509 # 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
510 # 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
511 # ``.hg/`` for ``relshared``.
665e911563da localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45301
diff changeset
512 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
513 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
514 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
515
665e911563da localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45301
diff changeset
516 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
517
665e911563da localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45301
diff changeset
518 if not sharedvfs.exists():
665e911563da localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45301
diff changeset
519 raise error.RepoError(
665e911563da localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45301
diff changeset
520 _(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
521 % sharedvfs.base
665e911563da localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45301
diff changeset
522 )
665e911563da localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45301
diff changeset
523 return sharedvfs
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
45354
c4fe2262435e localrepo: refactor `.hg/requires` reading logic in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45353
diff changeset
526 def _readrequires(vfs, allowmissing):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
527 """reads the require file present at root of this vfs
45354
c4fe2262435e localrepo: refactor `.hg/requires` reading logic in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45353
diff changeset
528 and return a set of requirements
c4fe2262435e localrepo: refactor `.hg/requires` reading logic in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45353
diff changeset
529
49306
2e726c934fcd py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents: 49284
diff changeset
530 If allowmissing is True, we suppress FileNotFoundError if raised"""
45354
c4fe2262435e localrepo: refactor `.hg/requires` reading logic in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45353
diff changeset
531 # requires file contains a newline-delimited list of
c4fe2262435e localrepo: refactor `.hg/requires` reading logic in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45353
diff changeset
532 # features/capabilities the opener (us) must have in order to use
c4fe2262435e localrepo: refactor `.hg/requires` reading logic in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45353
diff changeset
533 # the repository. This file was introduced in Mercurial 0.9.2,
c4fe2262435e localrepo: refactor `.hg/requires` reading logic in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45353
diff changeset
534 # which means very old repositories may not have one. We assume
c4fe2262435e localrepo: refactor `.hg/requires` reading logic in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45353
diff changeset
535 # a missing file translates to no requirements.
49493
4367c46a89ee requires: re-use vfs.tryread for simplicity
Jason R. Coombs <jaraco@jaraco.com>
parents: 49473
diff changeset
536 read = vfs.tryread if allowmissing else vfs.read
4367c46a89ee requires: re-use vfs.tryread for simplicity
Jason R. Coombs <jaraco@jaraco.com>
parents: 49473
diff changeset
537 return set(read(b'requires').splitlines())
45354
c4fe2262435e localrepo: refactor `.hg/requires` reading logic in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45353
diff changeset
538
c4fe2262435e localrepo: refactor `.hg/requires` reading logic in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45353
diff changeset
539
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
540 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
541 """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
542
bfeab472e3c0 localrepo: create new function for instantiating a local repo object
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39668
diff changeset
543 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
544 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
545 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
546 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
547 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
548
bfeab472e3c0 localrepo: create new function for instantiating a local repo object
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39668
diff changeset
549 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
550 interface.
39764
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 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
553 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
554 ``REPO_INTERFACES``.
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
555
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
556 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
557 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
558 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
559 repository.
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
560
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
561 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
562 as part of deriving a type.
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
563
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
564 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
565 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
566 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
567 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
568 ``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
569 not.
39687
bfeab472e3c0 localrepo: create new function for instantiating a local repo object
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39668
diff changeset
570 """
39689
f19bba3f4d3f localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39688
diff changeset
571 ui = baseui.copy()
f19bba3f4d3f localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39688
diff changeset
572 # Prevent copying repo configuration.
f19bba3f4d3f localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39688
diff changeset
573 ui.copy = baseui.copy
f19bba3f4d3f localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39688
diff changeset
574
39688
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
575 # 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
576 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
577
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
578 # Main VFS for .hg/ directory.
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
579 hgpath = wdirvfs.join(b'.hg')
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
580 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
581 # 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
582 shared = False
665e911563da localrepo: refactor logic to calculate sharedvfs in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45301
diff changeset
583 # 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
584 sharedvfs = None
39688
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
585
39691
2f067e365532 localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39690
diff changeset
586 # 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
587 # cases are errors.
2f067e365532 localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39690
diff changeset
588 if not hgvfs.isdir():
2f067e365532 localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39690
diff changeset
589 try:
2f067e365532 localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39690
diff changeset
590 hgvfs.stat()
49306
2e726c934fcd py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents: 49284
diff changeset
591 except FileNotFoundError:
2e726c934fcd py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents: 49284
diff changeset
592 pass
44943
9e5b4dbe8ff2 localrepo: handle ValueError during repository opening
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44941
diff changeset
593 except ValueError as e:
9e5b4dbe8ff2 localrepo: handle ValueError during repository opening
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44941
diff changeset
594 # 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
595 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
596 _(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
597 )
39691
2f067e365532 localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39690
diff changeset
598
2f067e365532 localrepo: check for .hg/ directory in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39690
diff changeset
599 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
600
45354
c4fe2262435e localrepo: refactor `.hg/requires` reading logic in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45353
diff changeset
601 requirements = _readrequires(hgvfs, True)
45483
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45464
diff changeset
602 shared = (
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45464
diff changeset
603 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
604 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
605 )
46234
9804162a4053 localrepo: move storevfs calculation out of if statement
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46114
diff changeset
606 storevfs = None
45483
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45464
diff changeset
607 if shared:
46234
9804162a4053 localrepo: move storevfs calculation out of if statement
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46114
diff changeset
608 # 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
609 sharedvfs = _getsharedvfs(hgvfs, requirements)
46234
9804162a4053 localrepo: move storevfs calculation out of if statement
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46114
diff changeset
610 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
611 else:
9804162a4053 localrepo: move storevfs calculation out of if statement
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46114
diff changeset
612 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
613
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45464
diff changeset
614 # 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
615 # 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
616 # 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
617 # 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
618 # 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
619 #
49b4ab1d9f5e share: show warning if share is outdated while source supports share-safe
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 46003
diff changeset
620 # 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
621 # 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
622 # 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
623 # to be reshared
46571
25392c48da8a localrepo: fix a UI string to be bytes
Matt Harbison <matt_harbison@yahoo.com>
parents: 46549
diff changeset
624 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
625 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
626 if (
c6a1fa42e325 upgrade: add support to downgrade share safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45942
diff changeset
627 shared
c6a1fa42e325 upgrade: add support to downgrade share safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45942
diff changeset
628 and requirementsmod.SHARESAFE_REQUIREMENT
c6a1fa42e325 upgrade: add support to downgrade share safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45942
diff changeset
629 not in _readrequires(sharedvfs, True)
c6a1fa42e325 upgrade: add support to downgrade share safe mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45942
diff changeset
630 ):
46333
2eb5fe13461b share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
631 mismatch_warn = ui.configbool(
2eb5fe13461b share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
632 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
633 )
46332
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
634 mismatch_config = ui.config(
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
635 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
636 )
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
637 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
638 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
639 )
46332
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
640 if mismatch_config in (
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
641 b'downgrade-allow',
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
642 b'allow',
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
643 b'downgrade-abort',
46236
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
644 ):
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
645 # prevent cyclic import localrepo -> upgrade -> localrepo
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
646 from . import upgrade
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
647
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
648 upgrade.downgrade_share_to_non_safe(
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
649 ui,
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
650 hgvfs,
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
651 sharedvfs,
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
652 requirements,
46332
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
653 mismatch_config,
46333
2eb5fe13461b share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
654 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
655 mismatch_verbose_upgrade,
46236
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
656 )
46332
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
657 elif mismatch_config == b'abort':
46236
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
658 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
659 _(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
660 hint=hint,
46236
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
661 )
46332
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
662 else:
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
663 raise error.Abort(
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
664 _(
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
665 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
666 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
667 b" set."
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
668 )
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
669 % mismatch_config,
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
670 hint=hint,
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
671 )
46236
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
672 else:
eec47efe219d sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46235
diff changeset
673 requirements |= _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
674 elif shared:
49b4ab1d9f5e share: show warning if share is outdated while source supports share-safe
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 46003
diff changeset
675 sourcerequires = _readrequires(sharedvfs, False)
49b4ab1d9f5e share: show warning if share is outdated while source supports share-safe
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 46003
diff changeset
676 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
677 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
678 mismatch_warn = ui.configbool(
2eb5fe13461b share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
679 b'share', b'safe-mismatch.source-safe.warn'
2eb5fe13461b share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
680 )
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
681 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
682 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
683 )
46332
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
684 if mismatch_config in (
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
685 b'upgrade-allow',
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
686 b'allow',
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
687 b'upgrade-abort',
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
688 ):
46235
0babe12ef35d sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46234
diff changeset
689 # prevent cyclic import localrepo -> upgrade -> localrepo
0babe12ef35d sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46234
diff changeset
690 from . import upgrade
0babe12ef35d sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46234
diff changeset
691
0babe12ef35d sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46234
diff changeset
692 upgrade.upgrade_share_to_safe(
0babe12ef35d sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46234
diff changeset
693 ui,
0babe12ef35d sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46234
diff changeset
694 hgvfs,
0babe12ef35d sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46234
diff changeset
695 storevfs,
0babe12ef35d sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46234
diff changeset
696 requirements,
46332
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
697 mismatch_config,
46333
2eb5fe13461b share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
698 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
699 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
700 )
46332
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
701 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
702 raise error.Abort(
46235
0babe12ef35d sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46234
diff changeset
703 _(
46331
8788981c95f8 localrepo: disallow share if there is a version mismatch by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46312
diff changeset
704 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
705 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
706 ),
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
707 hint=hint,
46235
0babe12ef35d sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46234
diff changeset
708 )
46332
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
709 else:
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
710 raise error.Abort(
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
711 _(
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
712 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
713 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
714 )
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
715 % mismatch_config,
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
716 hint=hint,
cc3452d2dfa4 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46331
diff changeset
717 )
39692
6a3162ed881d localrepo: read requirements file in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39691
diff changeset
718
39690
e0c5017124b3 localrepo: load extensions in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39689
diff changeset
719 # 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
720 # 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
721 # 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
722 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
723 afterhgrcload(ui, wdirvfs, hgvfs, requirements)
39690
e0c5017124b3 localrepo: load extensions in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39689
diff changeset
724 extensions.loadall(ui)
40729
c93d046d4300 extensions: add "uipopulate" hook, called per instance, not per process
Yuya Nishihara <yuya@tcha.org>
parents: 40718
diff changeset
725 extensions.populateui(ui)
39690
e0c5017124b3 localrepo: load extensions in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39689
diff changeset
726
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
727 # 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
728 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
729
39693
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
730 supportedrequirements = gathersupportedrequirements(ui)
39695
cb2dcfa5cade localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39693
diff changeset
731
cb2dcfa5cade localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39693
diff changeset
732 # 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
733 ensurerequirementsrecognized(requirements, supportedrequirements)
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
734
39695
cb2dcfa5cade localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39693
diff changeset
735 # 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
736 ensurerequirementscompatible(ui, requirements)
cb2dcfa5cade localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39693
diff changeset
737
39696
9de1a1c83cd7 localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39695
diff changeset
738 # 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
739 # 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
740 # 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
741 # 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
742 # 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
743 # in this hgrc.
9de1a1c83cd7 localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39695
diff changeset
744 #
9de1a1c83cd7 localrepo: document and test bug around opening shared repos
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39695
diff changeset
745 # 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
746 # 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
747 # 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
748 # 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
749 # 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
750
39693
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
751 # 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
752 # Now get on with doing that.
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
753
39850
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
754 features = set()
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
755
39697
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
756 # 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
757 # 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
758 # `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
759 # 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
760 if shared:
39697
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
761 storebasepath = sharedvfs.base
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
762 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
763 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
764 else:
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
765 storebasepath = hgvfs.base
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
766 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
767 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
768
39697
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
769 # 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
770 # 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
771 # of them.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
772 store = makestore(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
773 requirements,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
774 storebasepath,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
775 lambda base: vfsmod.vfs(base, cacheaudited=True),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
776 )
39697
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
777 hgvfs.createmode = store.createmode
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
778
39700
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
779 storevfs = store.vfs
39850
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
780 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
781
47263
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47260
diff changeset
782 if (
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47260
diff changeset
783 requirementsmod.REVLOGV2_REQUIREMENT in requirements
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47260
diff changeset
784 or requirementsmod.CHANGELOGV2_REQUIREMENT in requirements
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47260
diff changeset
785 ):
47226
19d4802cb304 sidedata: add a 'side-data' repository feature and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47221
diff changeset
786 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
787 # 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
788 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
789
39697
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
790 # 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
791 cachevfs = vfsmod.vfs(cachepath, cacheaudited=True)
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
792 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
793 # 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
794 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
795 wcachevfs.createmode = store.createmode
39697
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
796
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
797 # 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
798 # 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
799 # 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
800 # 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
801
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
802 bases = []
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
803 extrastate = {}
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
804
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
805 for iface, fn in REPO_INTERFACES:
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
806 # 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
807 # flexibility.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
808 typ = fn()(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
809 ui=ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
810 intents=intents,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
811 requirements=requirements,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
812 features=features,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
813 wdirvfs=wdirvfs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
814 hgvfs=hgvfs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
815 store=store,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
816 storevfs=storevfs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
817 storeoptions=storevfs.options,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
818 cachevfs=cachevfs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
819 wcachevfs=wcachevfs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
820 extensionmodulenames=extensionmodulenames,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
821 extrastate=extrastate,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
822 baseclasses=bases,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
823 )
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
824
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
825 if not isinstance(typ, type):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
826 raise error.ProgrammingError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
827 b'unable to construct type for %s' % iface
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
828 )
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
829
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
830 bases.append(typ)
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
831
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
832 # 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
833 # 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
834 # rich information about our constructed repo.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
835 name = pycompat.sysstr(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
836 b'derivedrepo:%s<%s>' % (wdirvfs.base, b','.join(sorted(requirements)))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
837 )
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
838
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
839 cls = type(name, tuple(bases), {})
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
840
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
841 return cls(
39689
f19bba3f4d3f localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39688
diff changeset
842 baseui=baseui,
f19bba3f4d3f localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39688
diff changeset
843 ui=ui,
f19bba3f4d3f localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39688
diff changeset
844 origroot=path,
39688
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
845 wdirvfs=wdirvfs,
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
846 hgvfs=hgvfs,
39692
6a3162ed881d localrepo: read requirements file in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39691
diff changeset
847 requirements=requirements,
39693
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
848 supportedrequirements=supportedrequirements,
39697
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
849 sharedpath=storebasepath,
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
850 store=store,
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
851 cachevfs=cachevfs,
40795
e1c3a2e9df59 repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents: 40794
diff changeset
852 wcachevfs=wcachevfs,
39850
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
853 features=features,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
854 intents=intents,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
855 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
856
39687
bfeab472e3c0 localrepo: create new function for instantiating a local repo object
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39668
diff changeset
857
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
858 def loadhgrc(
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
859 ui,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
860 wdirvfs: vfsmod.vfs,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
861 hgvfs: vfsmod.vfs,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
862 requirements,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
863 sharedvfs: Optional[vfsmod.vfs] = None,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
864 ):
40535
473510bf0575 localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40424
diff changeset
865 """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
866
473510bf0575 localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40424
diff changeset
867 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
868 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
869
473510bf0575 localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40424
diff changeset
870 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
871
473510bf0575 localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40424
diff changeset
872 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
873 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
874 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
875
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45483
diff changeset
876 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
877 shared one
40535
473510bf0575 localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40424
diff changeset
878 """
44243
238790674d69 config: add a function in `rcutil` to abstract HGRCSKIPREPO
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44124
diff changeset
879 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
880 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
881
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
882 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
883 # 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
884 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
885 try:
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45483
diff changeset
886 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
887 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
888 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
889 pass
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45483
diff changeset
890
40535
473510bf0575 localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40424
diff changeset
891 try:
473510bf0575 localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40424
diff changeset
892 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
893 ret = True
40535
473510bf0575 localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40424
diff changeset
894 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
895 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
896
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
897 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
898 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
899 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
900 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
901 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
902
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
903 return ret
40535
473510bf0575 localrepo: extract loading of hgrc files to standalone function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40424
diff changeset
904
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
905
39852
2c2fadbc9851 localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39850
diff changeset
906 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
907 """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
908
2c2fadbc9851 localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39850
diff changeset
909 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
910 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
911
2c2fadbc9851 localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39850
diff changeset
912 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
913 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
914 """
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 # 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
917 # requirement is present.
2c2fadbc9851 localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39850
diff changeset
918 autoextensions = {
44482
21893ff382cd localrepo: add git extension to autoextensions list
Augie Fackler <raf@durin42.com>
parents: 44452
diff changeset
919 b'git': [b'git'],
39854
823a580448d7 largefiles: automatically load largefiles extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39852
diff changeset
920 b'largefiles': [b'largefiles'],
39852
2c2fadbc9851 localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39850
diff changeset
921 b'lfs': [b'lfs'],
2c2fadbc9851 localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39850
diff changeset
922 }
2c2fadbc9851 localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39850
diff changeset
923
2c2fadbc9851 localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39850
diff changeset
924 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
925 if requirement not in requirements:
2c2fadbc9851 localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39850
diff changeset
926 continue
2c2fadbc9851 localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39850
diff changeset
927
2c2fadbc9851 localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39850
diff changeset
928 for name in names:
2c2fadbc9851 localrepo: automatically load lfs extension when required (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39850
diff changeset
929 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
930 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
931
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
932
39693
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
933 def gathersupportedrequirements(ui):
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
934 """Determine the complete set of recognized requirements."""
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
935 # 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
936 supported = set(localrepository._basesupported)
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
937
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
938 # 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
939 # relevant to this ui instance.
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
940 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
941
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
942 for fn in featuresetupfuncs:
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
943 if fn.__module__ in modules:
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
944 fn(ui, supported)
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
945
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
946 # Add derived requirements from registered compression engines.
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
947 for name in util.compengines:
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
948 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
949 if engine.available() and engine.revlogheader():
39693
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
950 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
951 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
952 supported.add(requirementsmod.REVLOG_COMPRESSION_ZSTD)
39693
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 return supported
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
955
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
956
39693
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
957 def ensurerequirementsrecognized(requirements, supported):
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
958 """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
959
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
960 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
961 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
962 recognize.
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
963
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
964 Returns a set of supported requirements.
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
965 """
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
966 missing = set()
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
967
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
968 for requirement in requirements:
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
969 if requirement in supported:
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
970 continue
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
971
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
972 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
973 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
974
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
975 missing.add(requirement)
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
976
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
977 if missing:
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
978 raise error.RequirementError(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
979 _(b'repository requires features unknown to this Mercurial: %s')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
980 % b' '.join(sorted(missing)),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
981 hint=_(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
982 b'see https://mercurial-scm.org/wiki/MissingRequirement '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
983 b'for more information'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
984 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
985 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
986
39693
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
987
39695
cb2dcfa5cade localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39693
diff changeset
988 def ensurerequirementscompatible(ui, requirements):
cb2dcfa5cade localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39693
diff changeset
989 """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
990
cb2dcfa5cade localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39693
diff changeset
991 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
992 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
993 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
994 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
995
cb2dcfa5cade localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39693
diff changeset
996 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
997 checking.
cb2dcfa5cade localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39693
diff changeset
998
cb2dcfa5cade localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39693
diff changeset
999 ``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
1000 """
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
1001 if (
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
1002 requirementsmod.SPARSE_REQUIREMENT in requirements
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
1003 and not sparse.enabled
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
1004 ):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1005 raise error.RepoError(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1006 _(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1007 b'repository is using sparse feature but '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1008 b'sparse is not enabled; enable the '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1009 b'"sparse" extensions to access'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1010 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1011 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1012
39695
cb2dcfa5cade localrepo: move requirements reasonability testing to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39693
diff changeset
1013
39698
f44187605315 localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39697
diff changeset
1014 def makestore(requirements, path, vfstype):
f44187605315 localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39697
diff changeset
1015 """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
1016 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
1017 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
1018 dotencode = requirementsmod.DOTENCODE_REQUIREMENT in requirements
c3773636ddbb requirements: also add a dotencode constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46627
diff changeset
1019 return storemod.fncachestore(path, vfstype, dotencode)
39698
f44187605315 localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39697
diff changeset
1020
f44187605315 localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39697
diff changeset
1021 return storemod.encodedstore(path, vfstype)
f44187605315 localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39697
diff changeset
1022
f44187605315 localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39697
diff changeset
1023 return storemod.basicstore(path, vfstype)
f44187605315 localrepo: move store() from store module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39697
diff changeset
1024
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1025
39850
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1026 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
1027 """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
1028
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1029 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
1030 """
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1031 options = {}
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1032
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
1033 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
1034 options[b'treemanifest'] = True
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1035
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1036 # experimental config: format.manifestcachesize
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1037 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
1038 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
1039 options[b'manifestcachesize'] = manifestcachesize
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1040
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1041 # 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
1042 # 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
1043 # 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
1044 # 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
1045 # meaningful on such old repos.
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
1046 if (
46626
ee91966aec0f requirements: add constant for revlog v1 requirement
Raphaël Gomès <rgomes@octobus.net>
parents: 46607
diff changeset
1047 requirementsmod.REVLOGV1_REQUIREMENT in requirements
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
1048 or requirementsmod.REVLOGV2_REQUIREMENT in requirements
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
1049 ):
39850
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1050 options.update(resolverevlogstorevfsoptions(ui, requirements, features))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1051 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
1052 options[b'revlogv0'] = True
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1053
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
1054 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
1055 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
1056 else:
beed7ce61681 sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43137
diff changeset
1057 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
1058 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
1059 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
1060 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
1061
39700
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1062 return options
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1063
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1064
39850
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1065 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
1066 """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
1067
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1068 options = {}
40267
9d5ddf55415b revlog: allow flag processors to be applied via store options
Matt Harbison <matt_harbison@yahoo.com>
parents: 40086
diff changeset
1069 options[b'flagprocessors'] = {}
39700
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1070
51031
133f5a54ed9d revlog: create the revlog object at the repository level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50929
diff changeset
1071 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
1072 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
1073 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
1074
46626
ee91966aec0f requirements: add constant for revlog v1 requirement
Raphaël Gomès <rgomes@octobus.net>
parents: 46607
diff changeset
1075 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
1076 options[b'revlogv1'] = True
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
1077 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
1078 options[b'revlogv2'] = True
47263
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47260
diff changeset
1079 if requirementsmod.CHANGELOGV2_REQUIREMENT in requirements:
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47260
diff changeset
1080 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
1081 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
1082 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
1083
46627
f4c325bf80fc requirements: also add a generaldelta constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46626
diff changeset
1084 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
1085 options[b'generaldelta'] = True
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1086
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1087 # experimental config: format.chunkcachesize
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1088 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
1089 if chunkcachesize is not None:
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1090 options[b'chunkcachesize'] = chunkcachesize
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1091
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1092 deltabothparents = ui.configbool(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1093 b'storage', b'revlog.optimize-delta-parent-choice'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1094 )
39700
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1095 options[b'deltabothparents'] = deltabothparents
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
1096 dps_cgds = ui.configint(
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
1097 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
1098 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
1099 )
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
1100 options[b'delta-parent-search.candidate-group-chunk-size'] = dps_cgds
49227
2bcf5e14bb7e deltas: add a `debug.revlog.debug-delta` config option enable output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49192
diff changeset
1101 options[b'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
1102
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
1103 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
1104 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
1105
41819
688fc33e105d storage: introduce a `revlog.reuse-external-delta` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41818
diff changeset
1106 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
1107 lazydeltabase = False
688fc33e105d storage: introduce a `revlog.reuse-external-delta` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41818
diff changeset
1108 if lazydelta:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1109 lazydeltabase = ui.configbool(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1110 b'storage', b'revlog.reuse-external-delta-parent'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1111 )
41818
f6eff9e4de80 storage: introduce a `revlog.reuse-external-delta-parent` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41774
diff changeset
1112 if lazydeltabase is None:
f6eff9e4de80 storage: introduce a `revlog.reuse-external-delta-parent` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41774
diff changeset
1113 lazydeltabase = not scmutil.gddeltaconfig(ui)
41819
688fc33e105d storage: introduce a `revlog.reuse-external-delta` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41818
diff changeset
1114 options[b'lazydelta'] = lazydelta
41818
f6eff9e4de80 storage: introduce a `revlog.reuse-external-delta-parent` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41774
diff changeset
1115 options[b'lazydeltabase'] = lazydeltabase
39700
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1116
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1117 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
1118 if 0 <= chainspan:
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1119 options[b'maxdeltachainspan'] = chainspan
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1120
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1121 mmapindexthreshold = ui.configbytes(b'experimental', b'mmapindexthreshold')
39700
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1122 if mmapindexthreshold is not None:
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1123 options[b'mmapindexthreshold'] = mmapindexthreshold
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1124
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1125 withsparseread = ui.configbool(b'experimental', b'sparse-read')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1126 srdensitythres = float(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1127 ui.config(b'experimental', b'sparse-read.density-threshold')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1128 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1129 srmingapsize = ui.configbytes(b'experimental', b'sparse-read.min-gap-size')
39700
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1130 options[b'with-sparse-read'] = withsparseread
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1131 options[b'sparse-read-density-threshold'] = srdensitythres
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1132 options[b'sparse-read-min-gap-size'] = srmingapsize
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1133
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
1134 sparserevlog = requirementsmod.SPARSEREVLOG_REQUIREMENT in requirements
39700
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1135 options[b'sparse-revlog'] = sparserevlog
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1136 if sparserevlog:
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1137 options[b'generaldelta'] = True
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1138
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1139 maxchainlen = None
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1140 if sparserevlog:
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1141 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
1142 # experimental config: format.maxchainlen
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1143 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
1144 if maxchainlen is not None:
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1145 options[b'maxchainlen'] = maxchainlen
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1146
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1147 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
1148 # 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
1149 # 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
1150 #
10a6725dca6e compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42135
diff changeset
1151 # 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
1152 prefix = r.startswith
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1153 if prefix(b'revlog-compression-') or prefix(b'exp-compression-'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1154 options[b'compengine'] = 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
1155
42043
1fac9b931d46 compression: introduce a `storage.revlog.zlib.level` configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42004
diff changeset
1156 options[b'zlib.level'] = ui.configint(b'storage', b'revlog.zlib.level')
1fac9b931d46 compression: introduce a `storage.revlog.zlib.level` configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42004
diff changeset
1157 if options[b'zlib.level'] is not None:
1fac9b931d46 compression: introduce a `storage.revlog.zlib.level` configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42004
diff changeset
1158 if not (0 <= options[b'zlib.level'] <= 9):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1159 msg = _(b'invalid value for `storage.revlog.zlib.level` config: %d')
42043
1fac9b931d46 compression: introduce a `storage.revlog.zlib.level` configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42004
diff changeset
1160 raise error.Abort(msg % options[b'zlib.level'])
42044
bb271ec2fbfb compression: introduce a `storage.revlog.zstd.level` configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42043
diff changeset
1161 options[b'zstd.level'] = ui.configint(b'storage', b'revlog.zstd.level')
bb271ec2fbfb compression: introduce a `storage.revlog.zstd.level` configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42043
diff changeset
1162 if options[b'zstd.level'] is not None:
bb271ec2fbfb compression: introduce a `storage.revlog.zstd.level` configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42043
diff changeset
1163 if not (0 <= options[b'zstd.level'] <= 22):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1164 msg = _(b'invalid value for `storage.revlog.zstd.level` config: %d')
42044
bb271ec2fbfb compression: introduce a `storage.revlog.zstd.level` configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42043
diff changeset
1165 raise error.Abort(msg % options[b'zstd.level'])
42043
1fac9b931d46 compression: introduce a `storage.revlog.zlib.level` configuration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42004
diff changeset
1166
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
1167 if requirementsmod.NARROW_REQUIREMENT in requirements:
39770
7aa440222323 localrepo: enable ellipsis flag on revlogs when repo is narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39765
diff changeset
1168 options[b'enableellipsis'] = True
7aa440222323 localrepo: enable ellipsis flag on revlogs when repo is narrow
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39765
diff changeset
1169
44043
b958419b6c53 py3: byteify some `ui.configbool()` parameters
Matt Harbison <matt_harbison@yahoo.com>
parents: 44023
diff changeset
1170 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
1171 options[b'rust.index'] = True
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
1172 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
1173 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
1174 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
1175 )
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
1176 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
1177 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
1178 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
1179 )
2c9c88879ab7 persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46306
diff changeset
1180 msg = _(
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'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
1182 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
1183 )
2c9c88879ab7 persistent-node: check the value of the slow-path config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46306
diff changeset
1184 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
1185 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
1186 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
1187 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
1188
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 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
1190 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
1191 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
1192 )
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 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
1194 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
1195 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
1196 )
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
1197 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
1198 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
1199 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
1200 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
1201 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
1202 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
1203 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
1204 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
1205 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
1206 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
1207 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
1208 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
1209 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
1210 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
1211 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
1212 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
1213 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
1214 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
1215 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
1216
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 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
1218 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
1219 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
1220 )
5c567aca080d dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48223
diff changeset
1221 hint = _(
48674
f7086f6173f8 dirstate-v2: rename the configuration to enable the format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48295
diff changeset
1222 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
1223 )
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 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
1225 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
1226 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
1227 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
1228 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
1229 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
1230 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
1231 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
1232 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
1233 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
1234 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
1235 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
1236 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
1237
39700
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1238 return options
b10d145837bc localrepo: extract resolving of opener options to standalone functions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39699
diff changeset
1239
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1240
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1241 def makemain(**kwargs):
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1242 """Produce a type conforming to ``ilocalrepositorymain``."""
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1243 return localrepository
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1244
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1245
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1246 @interfaceutil.implementer(repository.ilocalrepositoryfilestorage)
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48935
diff changeset
1247 class revlogfilestorage:
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1248 """File storage when using revlogs."""
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1249
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1250 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
1251 if path.startswith(b'/'):
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1252 path = path[1:]
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1253
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50301
diff changeset
1254 try_split = (
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50301
diff changeset
1255 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
1256 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
1257 )
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50301
diff changeset
1258
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50301
diff changeset
1259 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
1260
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1261
39765
3e801ffd7269 filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39764
diff changeset
1262 @interfaceutil.implementer(repository.ilocalrepositoryfilestorage)
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48935
diff changeset
1263 class revlognarrowfilestorage:
39765
3e801ffd7269 filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39764
diff changeset
1264 """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
1265
3e801ffd7269 filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39764
diff changeset
1266 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
1267 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
1268 path = path[1:]
3e801ffd7269 filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39764
diff changeset
1269
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50301
diff changeset
1270 try_split = (
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50301
diff changeset
1271 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
1272 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
1273 )
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50301
diff changeset
1274 return filelog.narrowfilelog(
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50301
diff changeset
1275 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
1276 )
39765
3e801ffd7269 filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39764
diff changeset
1277
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1278
39850
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1279 def makefilestorage(requirements, features, **kwargs):
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1280 """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
1281 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
1282 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
1283
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
1284 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
1285 return revlognarrowfilestorage
3e801ffd7269 filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39764
diff changeset
1286 else:
3e801ffd7269 filelog: custom filelog to be used with narrow repos
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39764
diff changeset
1287 return revlogfilestorage
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1288
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1289
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1290 # 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
1291 # 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
1292 # 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
1293 # 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
1294 # functions can be wrapped.
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1295 REPO_INTERFACES = [
39994
6962ebc8f817 localrepo: capture repo interface factory functions as lambas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39959
diff changeset
1296 (repository.ilocalrepositorymain, lambda: makemain),
6962ebc8f817 localrepo: capture repo interface factory functions as lambas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39959
diff changeset
1297 (repository.ilocalrepositoryfilestorage, lambda: makefilestorage),
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1298 ]
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1299
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1300
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1301 @interfaceutil.implementer(repository.ilocalrepositorymain)
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48935
diff changeset
1302 class localrepository:
39764
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1303 """Main class for representing local repositories.
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1304
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1305 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
1306
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1307 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
1308 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
1309 ``hg.repository()``, ``localrepo.instance()``, or
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1310 ``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
1311 ``instance()`` adds support for creating new repositories.
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1312 ``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
1313 ``reposetup()``. Generally speaking, ``hg.repository()`` should be
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1314 used.
e4e881572382 localrepo: iteratively derive local repository type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39763
diff changeset
1315 """
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
1316
48604
348d2c6b5048 requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48603
diff changeset
1317 _basesupported = {
49451
0c70d888a484 phase: introduce a dedicated requirement for the `archived` phase
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49355
diff changeset
1318 requirementsmod.ARCHIVED_PHASE_REQUIREMENT,
48604
348d2c6b5048 requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48603
diff changeset
1319 requirementsmod.BOOKMARKS_IN_STORE_REQUIREMENT,
47263
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47260
diff changeset
1320 requirementsmod.CHANGELOGV2_REQUIREMENT,
48604
348d2c6b5048 requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48603
diff changeset
1321 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
1322 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
1323 requirementsmod.DIRSTATE_V2_REQUIREMENT,
48603
3a8bc0b48e51 requirements: sort _basesupported
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48602
diff changeset
1324 requirementsmod.DOTENCODE_REQUIREMENT,
46638
b4c2a2af25e2 requirements: also add a fncache constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46637
diff changeset
1325 requirementsmod.FNCACHE_REQUIREMENT,
48604
348d2c6b5048 requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48603
diff changeset
1326 requirementsmod.GENERALDELTA_REQUIREMENT,
48603
3a8bc0b48e51 requirements: sort _basesupported
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48602
diff changeset
1327 requirementsmod.INTERNAL_PHASE_REQUIREMENT,
48604
348d2c6b5048 requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48603
diff changeset
1328 requirementsmod.NODEMAP_REQUIREMENT,
45386
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45373
diff changeset
1329 requirementsmod.RELATIVE_SHARED_REQUIREMENT,
46626
ee91966aec0f requirements: add constant for revlog v1 requirement
Raphaël Gomès <rgomes@octobus.net>
parents: 46607
diff changeset
1330 requirementsmod.REVLOGV1_REQUIREMENT,
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
1331 requirementsmod.REVLOGV2_REQUIREMENT,
48603
3a8bc0b48e51 requirements: sort _basesupported
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48602
diff changeset
1332 requirementsmod.SHARED_REQUIREMENT,
48604
348d2c6b5048 requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48603
diff changeset
1333 requirementsmod.SHARESAFE_REQUIREMENT,
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
1334 requirementsmod.SPARSE_REQUIREMENT,
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
1335 requirementsmod.SPARSEREVLOG_REQUIREMENT,
46637
ab58098bebed requirements: also add a store constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46636
diff changeset
1336 requirementsmod.STORE_REQUIREMENT,
48604
348d2c6b5048 requirements: remove the `localrepo.supportedformat` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48603
diff changeset
1337 requirementsmod.TREEMANIFEST_REQUIREMENT,
32314
9f35c7836f60 localrepo: reformat set literals
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32312
diff changeset
1338 }
17137
b090601a80d1 localrepo: make requirements and openerreqs mutable by subclasses
Bryan O'Sullivan <bryano@fb.com>
parents: 17075
diff changeset
1339
33436
9bb4decd43b0 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33403
diff changeset
1340 # 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
1341 # 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
1342 _wlockfreeprefix = {
9bb4decd43b0 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33403
diff changeset
1343 # 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
1344 # 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
1345 # 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
1346 # now.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1347 b'hgrc',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1348 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
1349 # 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
1350 # 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
1351 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
1352 # 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
1353 # 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
1354 # 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
1355 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
1356 }
9bb4decd43b0 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33403
diff changeset
1357
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1358 def __init__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1359 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1360 baseui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1361 ui,
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
1362 origroot: bytes,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
1363 wdirvfs: vfsmod.vfs,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
1364 hgvfs: vfsmod.vfs,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1365 requirements,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1366 supportedrequirements,
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
1367 sharedpath: bytes,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1368 store,
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
1369 cachevfs: vfsmod.vfs,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
1370 wcachevfs: vfsmod.vfs,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1371 features,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1372 intents=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1373 ):
39548
7ce9dea3a14a localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39546
diff changeset
1374 """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
1375
39688
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1376 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
1377 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
1378 object.
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1379
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1380 Arguments:
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1381
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1382 baseui
39689
f19bba3f4d3f localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39688
diff changeset
1383 ``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
1384
f19bba3f4d3f localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39688
diff changeset
1385 ui
f19bba3f4d3f localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39688
diff changeset
1386 ``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
1387
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1388 origroot
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1389 ``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
1390
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1391 wdirvfs
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1392 ``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
1393
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1394 hgvfs
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1395 ``vfs.vfs`` rooted at .hg/
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1396
39692
6a3162ed881d localrepo: read requirements file in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39691
diff changeset
1397 requirements
6a3162ed881d localrepo: read requirements file in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39691
diff changeset
1398 ``set`` of bytestrings representing repository opening requirements.
6a3162ed881d localrepo: read requirements file in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39691
diff changeset
1399
39693
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
1400 supportedrequirements
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
1401 ``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
1402 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
1403
39697
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
1404 sharedpath
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
1405 ``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
1406 ``.hg/`` directory somewhere.
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
1407
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
1408 store
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
1409 ``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
1410 versioned storage.
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 cachevfs
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
1413 ``vfs.vfs`` used for cache files.
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
1414
40795
e1c3a2e9df59 repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents: 40794
diff changeset
1415 wcachevfs
e1c3a2e9df59 repo: add a `wcachevfs` to access the `.hg/wcache/` directory
Boris Feld <boris.feld@octobus.net>
parents: 40794
diff changeset
1416 ``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
1417
39850
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1418 features
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1419 ``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
1420 instance.
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1421
39688
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1422 intents
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1423 ``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
1424 for.
39548
7ce9dea3a14a localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39546
diff changeset
1425 """
39688
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1426 self.baseui = baseui
39689
f19bba3f4d3f localrepo: copy ui in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39688
diff changeset
1427 self.ui = ui
39688
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1428 self.origroot = origroot
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1429 # vfs rooted at working directory.
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1430 self.wvfs = wdirvfs
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1431 self.root = wdirvfs.base
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1432 # 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
1433 self.vfs = hgvfs
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1434 self.path = hgvfs.base
39693
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
1435 self.requirements = requirements
46780
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46713
diff changeset
1436 self.nodeconstants = sha1nodeconstants
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46713
diff changeset
1437 self.nullid = self.nodeconstants.nullid
39693
5b8e9b2060ef localrepo: validate supported requirements in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39692
diff changeset
1438 self.supported = supportedrequirements
39697
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
1439 self.sharedpath = sharedpath
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
1440 self.store = store
98ca9078807a localrepo: resolve store and cachevfs in makelocalrepository()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39696
diff changeset
1441 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
1442 self.wcachevfs = wcachevfs
39850
d89d5bc06eaa localrepo: define "features" on repository instances (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39849
diff changeset
1443 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
1444
32730
b8ff7d0ff361 localrepo: move filtername to __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32729
diff changeset
1445 self.filtername = None
39688
2f9cdb5b3644 localrepo: move some vfs initialization out of __init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39687
diff changeset
1446
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1447 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
1448 b'devel', b'check-locks'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1449 ):
33436
9bb4decd43b0 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33403
diff changeset
1450 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
1451 # 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
1452 # 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
1453 # 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
1454 self._phasedefaults = []
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
1455
31111
95ec3ad62f62 color: initialize color for the localrepo ui
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31054
diff changeset
1456 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
1457
6840
80e51429cb9a introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents: 6839
diff changeset
1458 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
1459 self.svfs = self.store.vfs
6840
80e51429cb9a introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents: 6839
diff changeset
1460 self.sjoin = self.store.join
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1461 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
1462 b'devel', b'check-locks'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1463 ):
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50919
diff changeset
1464 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
1465 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
1466 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
1467 self.svfs.audit = self._getsvfsward(self.svfs.audit)
3850
a4457828ca1a move code around
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3803
diff changeset
1468
26155
51a30cae2bff localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents: 26118
diff changeset
1469 self._dirstatevalidatewarned = False
9146
5614a628d173 localrepo: rename in-memory tag cache instance attributes (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9145
diff changeset
1470
41615
328ca3b9e545 branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents: 41529
diff changeset
1471 self._branchcaches = branchmap.BranchMapCache()
24373
59cc09240afb revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents: 24320
diff changeset
1472 self._revbranchcache = None
37137
db90a5793103 localrepo: make filterpats private (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37135
diff changeset
1473 self._filterpats = {}
5966
11af38a592ae Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents: 5915
diff changeset
1474 self._datafilters = {}
4916
5c5d23d93447 Use a weakref for recursive transactions
Matt Mackall <mpm@selenic.com>
parents: 4915
diff changeset
1475 self._transref = self._lockref = self._wlockref = None
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
1476
14929
4bf9493e7b07 localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents: 14905
diff changeset
1477 # 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
1478 # (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
1479 #
4bf9493e7b07 localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents: 14905
diff changeset
1480 # 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
1481 self._filecache = {}
4bf9493e7b07 localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents: 14905
diff changeset
1482
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
1483 # 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
1484 # 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
1485 # - 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
1486 # - 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
1487 # - 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
1488 # - 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
1489 # - 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
1490 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
1491
50128
2f60cd6442fd dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50127
diff changeset
1492 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
1493 # 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
1494 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
1495
50186
8bc14ac53a41 narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50128
diff changeset
1496 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
1497 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
1498
23558
3198aac7a95d namespaces: add bookmarks to the names data structure
Sean Farley <sean.michael.farley@gmail.com>
parents: 23546
diff changeset
1499 # generic mapping between names and nodes
23561
3c2419e07df5 namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents: 23558
diff changeset
1500 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
1501
33302
36a415b5a4b2 localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33278
diff changeset
1502 # Key to signature value.
36a415b5a4b2 localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33278
diff changeset
1503 self._sparsesignaturecache = {}
36a415b5a4b2 localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33278
diff changeset
1504 # Signature to cached matcher instance.
36a415b5a4b2 localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33278
diff changeset
1505 self._sparsematchercache = {}
36a415b5a4b2 localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33278
diff changeset
1506
42231
d345627d104b repoview: introduce a `experimental.extra-filter-revs` config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42141
diff changeset
1507 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
1508
43142
beed7ce61681 sidedatacopies: write copies information in sidedata when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43137
diff changeset
1509 self.filecopiesmode = None
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
1510 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
1511 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
1512
46713
bc2519513ae0 sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents: 46711
diff changeset
1513 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
1514 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
1515 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
1516
33436
9bb4decd43b0 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33403
diff changeset
1517 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
1518 """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
1519 rref = weakref.ref(self)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
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 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
1522 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
1523 repo = rref()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1524 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1525 repo is None
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50919
diff changeset
1526 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
1527 or not hasattr(repo, '_lockref')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1528 ):
33436
9bb4decd43b0 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33403
diff changeset
1529 return
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1530 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
1531 return
9bb4decd43b0 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33403
diff changeset
1532 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
1533 # truncate name relative to the repository (.hg)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1534 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
1535 if path.startswith(b'cache/'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1536 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
1537 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
1538 # 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
1539 vfs_path_prefixes = (
324ad3e7ef41 localrepo: warn if we are writing to cache without a lock
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45418
diff changeset
1540 b'journal.',
324ad3e7ef41 localrepo: warn if we are writing to cache without a lock
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45418
diff changeset
1541 b'undo.',
324ad3e7ef41 localrepo: warn if we are writing to cache without a lock
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45418
diff changeset
1542 b'strip-backup/',
324ad3e7ef41 localrepo: warn if we are writing to cache without a lock
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45418
diff changeset
1543 b'cache/',
324ad3e7ef41 localrepo: warn if we are writing to cache without a lock
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45418
diff changeset
1544 )
45015
5797dbb630df locks: expect repo lock, not wlock, when writing to .hg/strip-backup/
Martin von Zweigbergk <martinvonz@google.com>
parents: 44943
diff changeset
1545 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
1546 if repo._currentlock(repo._lockref) is None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1547 repo.ui.develwarn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1548 b'write with no lock: "%s"' % path,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1549 stacklevel=3,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1550 config=b'check-locks',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1551 )
33436
9bb4decd43b0 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33403
diff changeset
1552 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
1553 # 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
1554 #
9bb4decd43b0 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33403
diff changeset
1555 # 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
1556 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
1557 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
1558 return
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1559 repo.ui.develwarn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1560 b'write with no wlock: "%s"' % path,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1561 stacklevel=3,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1562 config=b'check-locks',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1563 )
33436
9bb4decd43b0 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33403
diff changeset
1564 return ret
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1565
33436
9bb4decd43b0 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33403
diff changeset
1566 return checkvfs
9bb4decd43b0 repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33403
diff changeset
1567
33437
0720e6265c8a reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33436
diff changeset
1568 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
1569 """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
1570 rref = weakref.ref(self)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
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 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
1573 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
1574 repo = rref()
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50919
diff changeset
1575 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
1576 return
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1577 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
1578 return
0720e6265c8a reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33436
diff changeset
1579 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
1580 # truncate name relative to the repository (.hg)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1581 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
1582 if repo._currentlock(repo._lockref) is None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1583 repo.ui.develwarn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1584 b'write with no lock: "%s"' % path, stacklevel=4
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1585 )
33437
0720e6265c8a reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33436
diff changeset
1586 return ret
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1587
33437
0720e6265c8a reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33436
diff changeset
1588 return checksvfs
0720e6265c8a reposvfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents: 33436
diff changeset
1589
50281
f34887316f1f undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50267
diff changeset
1590 @property
f34887316f1f undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50267
diff changeset
1591 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
1592 return {
f34887316f1f undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50267
diff changeset
1593 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
1594 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
1595 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
1596 }
f34887316f1f undo-files: factor the vfs map in a repository property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50267
diff changeset
1597
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
1598 def close(self):
24378
9347c15d8136 revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents: 24373
diff changeset
1599 self._writecaches()
9347c15d8136 revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents: 24373
diff changeset
1600
9347c15d8136 revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents: 24373
diff changeset
1601 def _writecaches(self):
9347c15d8136 revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents: 24373
diff changeset
1602 if self._revbranchcache:
9347c15d8136 revbranchcache: write cache even during read operations
Durham Goode <durham@fb.com>
parents: 24373
diff changeset
1603 self._revbranchcache.write()
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
1604
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
1605 def _restrictcapabilities(self, caps):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1606 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
1607 caps = set(caps)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1608 capsblob = bundle2.encodecaps(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1609 bundle2.getrepocaps(self, role=b'client')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1610 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1611 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
1612 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
1613 caps.add(wireprototypes.NARROWCAP)
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
1614 return caps
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
1615
39312
9198e41df6ef localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents: 39301
diff changeset
1616 # 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
1617 # 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
1618
9198e41df6ef localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents: 39301
diff changeset
1619 @property
9198e41df6ef localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents: 39301
diff changeset
1620 def auditor(self):
9198e41df6ef localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents: 39301
diff changeset
1621 # 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
1622 # 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
1623 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
1624
9198e41df6ef localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents: 39301
diff changeset
1625 @property
9198e41df6ef localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents: 39301
diff changeset
1626 def nofsauditor(self):
9198e41df6ef localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents: 39301
diff changeset
1627 # 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
1628 # files in subrepos.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1629 return pathutil.pathauditor(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1630 self.root, callback=self._checknested, realfs=False, cached=True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1631 )
39312
9198e41df6ef localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org>
parents: 39301
diff changeset
1632
12162
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1633 def _checknested(self, path):
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1634 """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
1635 if not path.startswith(self.root):
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1636 return False
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1637 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
1638 normsubpath = util.pconvert(subpath)
12162
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1639
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1640 # 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
1641 # 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
1642 #
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1643 # $ 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
1644 #
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1645 # 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
1646 # parent revision.
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1647 #
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1648 # 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
1649 # 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
1650 # 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
1651 # 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
1652 # panics when it sees sub/.hg/.
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1653 #
12174
7bccd04292a2 localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents: 12166
diff changeset
1654 # 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
1655 # 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
1656 # the filesystem *now*.
7bccd04292a2 localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents: 12166
diff changeset
1657 ctx = self[None]
12162
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1658 parts = util.splitpath(subpath)
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1659 while parts:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1660 prefix = b'/'.join(parts)
12162
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1661 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
1662 if prefix == normsubpath:
12162
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1663 return True
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1664 else:
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1665 sub = ctx.sub(prefix)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1666 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
1667 else:
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1668 parts.pop()
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1669 return False
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1670
50440
3a2df812e1c7 pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents: 50324
diff changeset
1671 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
1672 return localpeer(
3a2df812e1c7 pull: add --remote-hidden option and pass it through peer creation
Manuel Jacob <me@manueljacob.de>
parents: 50324
diff changeset
1673 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
1674 ) # not cached to avoid reference cycle
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
1675
17993
1a6f8820eb71 clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 17922
diff changeset
1676 def unfiltered(self):
1a6f8820eb71 clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 17922
diff changeset
1677 """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
1678
18644
3e92772d5383 spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents: 18520
diff changeset
1679 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
1680 return self
1a6f8820eb71 clfilter: introduce an "unfiltered" method on localrepo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 17922
diff changeset
1681
35492
3ad582b2895c repoview: add visibilityexceptions as an optional argument to repo.filtered()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35309
diff changeset
1682 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
1683 """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
1684
e0357a46c39d repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42079
diff changeset
1685 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
1686 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
1687
e0357a46c39d repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42079
diff changeset
1688 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
1689 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
1690 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
1691
e0357a46c39d repoview: improve documentation for `repo.filtered` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42079
diff changeset
1692 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
1693 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1694 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
1695 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
1696
35248
c752fbe228fb repoview: extract a factory function of proxy class
Yuya Nishihara <yuya@tcha.org>
parents: 35247
diff changeset
1697 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
1698 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
1699
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1700 @mixedrepostorecache(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1701 (b'bookmarks', b'plain'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1702 (b'bookmarks.current', b'plain'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1703 (b'bookmarks', b''),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1704 (b'00changelog.i', b''),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1705 )
13355
cce2e7b77e36 bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents: 13341
diff changeset
1706 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
1707 # 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
1708 # 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
1709 # condition here.
e0cf09bc35ef bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42621
diff changeset
1710 #
e0cf09bc35ef bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42621
diff changeset
1711 # 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
1712 # 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
1713 # 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
1714 # 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
1715 #
e0cf09bc35ef bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42621
diff changeset
1716 # 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
1717 #
e0cf09bc35ef bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42621
diff changeset
1718 # 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
1719 # 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
1720 # 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
1721 # 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
1722 # 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
1723 # "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
1724 # "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
1725 # 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
1726 # 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
1727 #
e0cf09bc35ef bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42621
diff changeset
1728 # 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
1729 # 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
1730 # 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
1731 # 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
1732 # 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
1733 # 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
1734 # 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
1735 # (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
1736 # 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
1737 #
e0cf09bc35ef bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42621
diff changeset
1738 # 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
1739 # 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
1740 # 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
1741 # 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
1742 #
e0cf09bc35ef bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42621
diff changeset
1743 # 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
1744 #
e0cf09bc35ef bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42621
diff changeset
1745 # 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
1746 # 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
1747 # 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
1748 # 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
1749 # 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
1750 #
e0cf09bc35ef bookmarks: actual fix for race condition deleting bookmark
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42621
diff changeset
1751 # 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
1752 # 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
1753 # * 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
1754 # * 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
1755 self._refreshchangelog()
17922
7f5dab94e48c bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents: 17857
diff changeset
1756 return bookmarks.bmstore(self)
13355
cce2e7b77e36 bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents: 13341
diff changeset
1757
42510
3472a3f9d785 localrepo: introduce a `_refreshchangelog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42421
diff changeset
1758 def _refreshchangelog(self):
3472a3f9d785 localrepo: introduce a `_refreshchangelog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42421
diff changeset
1759 """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
1760 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
1761 del self.changelog
3472a3f9d785 localrepo: introduce a `_refreshchangelog` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42421
diff changeset
1762
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27522
diff changeset
1763 @property
24947
a02d293a1079 bookmarks: rename bookmarkcurrent to activebookmark (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24946
diff changeset
1764 def _activebookmark(self):
27698
dad6404ccddb bmstore: add handling of the active bookmark
Augie Fackler <augie@google.com>
parents: 27522
diff changeset
1765 return self._bookmarks.active
12162
af8c4929931c localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents: 12127
diff changeset
1766
35309
d13526333835 phases: drop the list with phase of each rev, always comput phase sets
Joerg Sonnenberger <joerg@bec.de>
parents: 35308
diff changeset
1767 # _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
1768 # _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
1769 # 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
1770 @storecache(b'phaseroots', b'00changelog.i')
16657
b6081c2c4647 phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents: 16646
diff changeset
1771 def _phasecache(self):
b6081c2c4647 phases: introduce phasecache
Patrick Mezard <patrick@mezard.eu>
parents: 16646
diff changeset
1772 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
1773
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1774 @storecache(b'obsstore')
17070
ad0d6c2b3279 obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents: 17013
diff changeset
1775 def obsstore(self):
32729
c8177792fef6 obsolete: move obsstore creation logic from localrepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32697
diff changeset
1776 return obsolete.makestore(self.ui, self)
17070
ad0d6c2b3279 obsolete: introduction of obsolete markers
Pierre-Yves.David@ens-lyon.org
parents: 17013
diff changeset
1777
48039
c094e829e848 changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47822
diff changeset
1778 @changelogcache()
c094e829e848 changelog: also monitor `00changelog.n` when applicable (issue6554)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47822
diff changeset
1779 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
1780 # 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
1781 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
1782 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
1783 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
1784 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
1785 )
8260
54a4b520bd7d localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents: 8244
diff changeset
1786
48040
7970895a21cb manifestlog: also monitor `00manifest.n` when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48039
diff changeset
1787 @manifestlogcache()
29825
426d931e5db2 manifest: introduce manifestlog and manifestctx classes
Durham Goode <durham@fb.com>
parents: 29709
diff changeset
1788 def manifestlog(self):
42905
3df3b139a43d localrepo: push manifestlog and changelog construction code into store
Augie Fackler <augie@google.com>
parents: 42814
diff changeset
1789 return self.store.manifestlog(self, self._storenarrowmatch)
29825
426d931e5db2 manifest: introduce manifestlog and manifestctx classes
Durham Goode <durham@fb.com>
parents: 29709
diff changeset
1790
50127
ec769cbc1fa2 dirstate: directly manage the dirstate property on localrepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50085
diff changeset
1791 @unfilteredpropertycache
8260
54a4b520bd7d localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents: 8244
diff changeset
1792 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
1793 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
1794 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
1795 else:
2f60cd6442fd dirstate: only reload the dirstate when it may have changed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50127
diff changeset
1796 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
1797 return self._dirstate
38128
1cba497491be narrow: only wrap dirstate functions once, instead of per-reposetup
Kyle Lippincott <spectral@google.com>
parents: 37848
diff changeset
1798
1cba497491be narrow: only wrap dirstate functions once, instead of per-reposetup
Kyle Lippincott <spectral@google.com>
parents: 37848
diff changeset
1799 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
1800 """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
1801 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
1802 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
1803 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
1804 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
1805 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
1806 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
1807 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
1808
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1809 return dirstate.dirstate(
46780
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46713
diff changeset
1810 self.vfs,
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46713
diff changeset
1811 self.ui,
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46713
diff changeset
1812 self.root,
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46713
diff changeset
1813 self._dirstatevalidate,
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46713
diff changeset
1814 sparsematchfn,
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46713
diff changeset
1815 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
1816 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
1817 use_tracked_hint=use_tracked_hint,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1818 )
13032
e41e2b79883d dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents: 13001
diff changeset
1819
26155
51a30cae2bff localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents: 26118
diff changeset
1820 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
1821 okay = True
26155
51a30cae2bff localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents: 26118
diff changeset
1822 try:
51a30cae2bff localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents: 26118
diff changeset
1823 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
1824 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
1825 # 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
1826 # 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
1827 # 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
1828 #
e6532a7336d0 dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50323
diff changeset
1829 # 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
1830 # 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
1831 # 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
1832 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
1833 self.invalidate()
e6532a7336d0 dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50323
diff changeset
1834 try:
e6532a7336d0 dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50323
diff changeset
1835 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
1836 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
1837 okay = False
e6532a7336d0 dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50323
diff changeset
1838 else:
e6532a7336d0 dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50323
diff changeset
1839 # 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
1840 okay = False
e6532a7336d0 dirstate: try refreshing the changelog when parent are unknown
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50323
diff changeset
1841 if okay:
26155
51a30cae2bff localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents: 26118
diff changeset
1842 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
1843 else:
26155
51a30cae2bff localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents: 26118
diff changeset
1844 if not self._dirstatevalidatewarned:
51a30cae2bff localrepo: move dirstate validate function to class scope
Siddharth Agarwal <sid0@fb.com>
parents: 26118
diff changeset
1845 self._dirstatevalidatewarned = True
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1846 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
1847 _(b"warning: ignoring unknown working parent %s!\n")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1848 % short(node)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1849 )
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46907
diff changeset
1850 return self.nullid
2155
ff255b41b4aa support hooks written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2150
diff changeset
1851
38872
576eef1ab43d narrow: move .hg/narrowspec to .hg/store/narrowspec (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 38869
diff changeset
1852 @storecache(narrowspec.FILENAME)
36471
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
1853 def narrowpats(self):
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
1854 """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
1855
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
1856 A tuple of (includes, excludes).
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
1857 """
50186
8bc14ac53a41 narrow: delegate the narrow spec writing to the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50128
diff changeset
1858 # 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
1859 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
1860 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
1861 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
1862 return val
36471
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
1863
38872
576eef1ab43d narrow: move .hg/narrowspec to .hg/store/narrowspec (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 38869
diff changeset
1864 @storecache(narrowspec.FILENAME)
41230
d2d716cc0700 narrow: extract repo property for store narrowmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 41229
diff changeset
1865 def _storenarrowmatch(self):
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
1866 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
1867 return matchmod.always()
41230
d2d716cc0700 narrow: extract repo property for store narrowmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 41229
diff changeset
1868 include, exclude = self.narrowpats
d2d716cc0700 narrow: extract repo property for store narrowmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 41229
diff changeset
1869 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
1870
d2d716cc0700 narrow: extract repo property for store narrowmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 41229
diff changeset
1871 @storecache(narrowspec.FILENAME)
36471
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
1872 def _narrowmatch(self):
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
1873 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
1874 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
1875 narrowspec.checkworkingcopynarrowspec(self)
36471
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
1876 include, exclude = self.narrowpats
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
1877 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
1878
40086
41fcdfe3bfeb narrow: allow repo.narrowmatch(match) to include exact matches from "match"
Martin von Zweigbergk <martinvonz@google.com>
parents: 40082
diff changeset
1879 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
1880 """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
1881
4fd0fac48922 localrepo: allow narrowmatch() to accept matcher to intersect with
Martin von Zweigbergk <martinvonz@google.com>
parents: 40064
diff changeset
1882 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
1883 matcher.
40086
41fcdfe3bfeb narrow: allow repo.narrowmatch(match) to include exact matches from "match"
Martin von Zweigbergk <martinvonz@google.com>
parents: 40082
diff changeset
1884
41fcdfe3bfeb narrow: allow repo.narrowmatch(match) to include exact matches from "match"
Martin von Zweigbergk <martinvonz@google.com>
parents: 40082
diff changeset
1885 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
1886 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
1887 """
4fd0fac48922 localrepo: allow narrowmatch() to accept matcher to intersect with
Martin von Zweigbergk <martinvonz@google.com>
parents: 40064
diff changeset
1888 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
1889 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
1890 # 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
1891 # 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
1892 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
1893 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
1894 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
1895 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
1896 return self._narrowmatch
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
1897
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
1898 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
1899 narrowspec.save(self, newincludes, newexcludes)
36471
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
1900 self.invalidate(clearfilecache=True)
c28b6d609c47 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com>
parents: 36422
diff changeset
1901
44104
85c4cd73996b localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44075
diff changeset
1902 @unfilteredpropertycache
85c4cd73996b localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44075
diff changeset
1903 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
1904 return {
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46907
diff changeset
1905 b'null': (nullrev, self.nodeconstants.nullid),
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46907
diff changeset
1906 nullrev: (nullrev, self.nodeconstants.nullid),
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46907
diff changeset
1907 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
1908 }
85c4cd73996b localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44075
diff changeset
1909
85c4cd73996b localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44075
diff changeset
1910 @unfilteredpropertycache
85c4cd73996b localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44075
diff changeset
1911 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
1912 # 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
1913 # 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
1914 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
1915 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
1916 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
1917 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
1918 continue
85c4cd73996b localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44075
diff changeset
1919 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
1920 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
1921 # 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
1922 #
85c4cd73996b localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44075
diff changeset
1923 # 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
1924 continue
85c4cd73996b localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44075
diff changeset
1925 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
1926 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
1927 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
1928 # 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
1929 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
1930 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
1931 continue
5a012404503b localrepo: also fast past the parents of working copies parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44106
diff changeset
1932 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
1933 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
1934 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
1935 quick[n] = pair
44105
d86dede17392 localrepo: fastpath access to "."
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44104
diff changeset
1936 p1node = self.dirstate.p1()
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46907
diff changeset
1937 if p1node != self.nullid:
44105
d86dede17392 localrepo: fastpath access to "."
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44104
diff changeset
1938 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
1939 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
1940
85c4cd73996b localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44075
diff changeset
1941 @unfilteredmethod
85c4cd73996b localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44075
diff changeset
1942 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
1943 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
1944 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
1945
85c4cd73996b localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44075
diff changeset
1946 @property
43765
e89e3275f658 localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43763
diff changeset
1947 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
1948 """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
1949
e89e3275f658 localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43763
diff changeset
1950 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
1951 further processing.
e89e3275f658 localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43763
diff changeset
1952 """
44104
85c4cd73996b localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44075
diff changeset
1953 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
1954 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
1955 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
1956
6747
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6743
diff changeset
1957 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
1958 # dealing with special cases
32660
a722c8e17363 localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents: 32481
diff changeset
1959 if changeid is None:
6747
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6743
diff changeset
1960 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
1961 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
1962 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
1963
9c83d28776af localrepo: add some basic comment for block in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43735
diff changeset
1964 # dealing with multiple revisions
23630
b9af235810cc localrepo.__getitem__: add slicing support
Eric Sumner <ericsumner@fb.com>
parents: 23561
diff changeset
1965 if isinstance(changeid, slice):
32660
a722c8e17363 localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents: 32481
diff changeset
1966 # 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
1967 return [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1968 self[i]
49284
d44e3c45f0e4 py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents: 49227
diff changeset
1969 for i in range(*changeid.indices(len(self)))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1970 if i not in self.changelog.filteredrevs
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1971 ]
43750
9c83d28776af localrepo: add some basic comment for block in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43735
diff changeset
1972
43751
6237cb11753e localrepo: extract handling of some special value in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43750
diff changeset
1973 # 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
1974 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
1975 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
1976 rev, node = quick_access
e89e3275f658 localrepo: introduce a `_quick_access_changeid` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43763
diff changeset
1977 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
1978 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
1979 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
1980 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
1981 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
1982
43750
9c83d28776af localrepo: add some basic comment for block in __getitem__
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43735
diff changeset
1983 # dealing with arbitrary values
32660
a722c8e17363 localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents: 32481
diff changeset
1984 try:
39958
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39957
diff changeset
1985 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
1986 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
1987 rev = changeid
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1988 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
1989 # 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
1990 # 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
1991 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
1992 rev = self.unfiltered().changelog.rev(node)
47042
c5e1cc0b4c77 core: don't hard-code node length
Joerg Sonnenberger <joerg@bec.de>
parents: 47041
diff changeset
1993 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
1994 try:
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39957
diff changeset
1995 node = changeid
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39957
diff changeset
1996 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
1997 except error.FilteredLookupError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
1998 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
1999 raise
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39957
diff changeset
2000 except LookupError:
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39957
diff changeset
2001 # 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
2002 #
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39957
diff changeset
2003 # 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
2004 # exception for filtered changeset access
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2005 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2006 self.local()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2007 and changeid in self.unfiltered().dirstate.parents()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2008 ):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2009 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
2010 raise error.Abort(msg % short(changeid))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2011 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
2012 raise
39958
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39957
diff changeset
2013
47041
a407fe56d6e8 core: don't hard-code hex node lengths
Joerg Sonnenberger <joerg@bec.de>
parents: 47012
diff changeset
2014 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
2015 node = bin(changeid)
f84d7ed3bb35 repo: remove the last few "pass" statements in localrepo.__getitem__
Martin von Zweigbergk <martinvonz@google.com>
parents: 40056
diff changeset
2016 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
2017 else:
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39957
diff changeset
2018 raise error.ProgrammingError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2019 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
2020 % (changeid, pycompat.bytestr(type(changeid)))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2021 )
39958
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39957
diff changeset
2022
40064
5c3585a58845 repo: create changectx in a single place in localrepo.__getitem__
Martin von Zweigbergk <martinvonz@google.com>
parents: 40063
diff changeset
2023 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
2024
39958
3d35304bd09b context: move logic from changectx.__init__ to localrepo.__getitem__ (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 39957
diff changeset
2025 except (error.FilteredIndexError, error.FilteredLookupError):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2026 raise error.FilteredRepoLookupError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2027 _(b"filtered revision '%s'") % pycompat.bytestr(changeid)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2028 )
40063
f84d7ed3bb35 repo: remove the last few "pass" statements in localrepo.__getitem__
Martin von Zweigbergk <martinvonz@google.com>
parents: 40056
diff changeset
2029 except (IndexError, LookupError):
40353
a2ebdca4d10e localrepo: ensure we properly %-format int in exception throw
Augie Fackler <augie@google.com>
parents: 40324
diff changeset
2030 raise error.RepoLookupError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2031 _(b"unknown revision '%s'") % pycompat.bytestr(changeid)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2032 )
32660
a722c8e17363 localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents: 32481
diff changeset
2033 except error.WdirUnsupported:
a722c8e17363 localrepo: map integer and hex wdir identifiers to workingctx
Yuya Nishihara <yuya@tcha.org>
parents: 32481
diff changeset
2034 return context.workingctx(self)
6747
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6743
diff changeset
2035
9924
ea3acaae25bb localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9820
diff changeset
2036 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
2037 """True if the given changeid exists"""
9924
ea3acaae25bb localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9820
diff changeset
2038 try:
24320
b9f7f3eeb99c localrepo: extend "changeid in repo" to return True for workingctx revision
Yuya Nishihara <yuya@tcha.org>
parents: 24306
diff changeset
2039 self[changeid]
b9f7f3eeb99c localrepo: extend "changeid in repo" to return True for workingctx revision
Yuya Nishihara <yuya@tcha.org>
parents: 24306
diff changeset
2040 return True
37797
43221a57e22f context: translate FilteredIndex/LookupError at repo[changeid] (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37717
diff changeset
2041 except error.RepoLookupError:
9924
ea3acaae25bb localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9820
diff changeset
2042 return False
ea3acaae25bb localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9820
diff changeset
2043
6750
fb42030d79d6 add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents: 6747
diff changeset
2044 def __nonzero__(self):
fb42030d79d6 add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents: 6747
diff changeset
2045 return True
fb42030d79d6 add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents: 6747
diff changeset
2046
31476
413b44003462 py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31466
diff changeset
2047 __bool__ = __nonzero__
413b44003462 py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31466
diff changeset
2048
6750
fb42030d79d6 add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents: 6747
diff changeset
2049 def __len__(self):
35736
29f57ce416ed localrepo: micro-optimize __len__() to bypass repoview
Yuya Nishihara <yuya@tcha.org>
parents: 35726
diff changeset
2050 # 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
2051 unfi = self.unfiltered()
29f57ce416ed localrepo: micro-optimize __len__() to bypass repoview
Yuya Nishihara <yuya@tcha.org>
parents: 35726
diff changeset
2052 return len(unfi.changelog)
6750
fb42030d79d6 add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents: 6747
diff changeset
2053
fb42030d79d6 add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents: 6747
diff changeset
2054 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
2055 return iter(self.changelog)
2155
ff255b41b4aa support hooks written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2150
diff changeset
2056
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2057 def revs(self, expr: bytes, *args):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2058 """Find revisions matching a revset.
27071
dfb31eebd949 localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26998
diff changeset
2059
dfb31eebd949 localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26998
diff changeset
2060 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
2061 %-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
2062
29417
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29373
diff changeset
2063 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
2064 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
2065 ``repo.anyrevs([expr], user=True)``.
29417
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29373
diff changeset
2066
44075
2122ffa903ea doc: fix references to `revset.abstractsmartset`
Matt Harbison <matt_harbison@yahoo.com>
parents: 44060
diff changeset
2067 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
2068 that contains integer revisions.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2069 """
41222
8aca89a694d4 revset: introduce an API that avoids `formatspec` input serialization
Boris Feld <boris.feld@octobus.net>
parents: 41202
diff changeset
2070 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
2071 return revset.makematcher(tree)(self)
15403
e27561eb4a76 localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents: 15381
diff changeset
2072
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2073 def set(self, expr: bytes, *args):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2074 """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
2075
dfb31eebd949 localrepo: improve docstring for revset methods
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26998
diff changeset
2076 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
2077 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
2078
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29373
diff changeset
2079 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
2080 user aliases, consider calling ``scmutil.revrange()``.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2081 """
15403
e27561eb4a76 localrepo: add revs helper method
Matt Mackall <mpm@selenic.com>
parents: 15381
diff changeset
2082 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
2083 yield self[r]
96a72cbc6c29 localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents: 14870
diff changeset
2084
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2085 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
2086 """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
2087
6cf2857526c7 scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents: 31024
diff changeset
2088 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
2089 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
2090 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
2091 ``{name: definitionstring}``.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2092 """
43758
09409a3fc3cc localrepo: recognize trivial "null" queries in `anyrev`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43757
diff changeset
2093 if specs == [b'null']:
09409a3fc3cc localrepo: recognize trivial "null" queries in `anyrev`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43757
diff changeset
2094 return revset.baseset([nullrev])
44106
bfaf4c673bec localrepo: recognize trivial request for '.'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44105
diff changeset
2095 if specs == [b'.']:
bfaf4c673bec localrepo: recognize trivial request for '.'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44105
diff changeset
2096 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
2097 if quick_data is not None:
bfaf4c673bec localrepo: recognize trivial request for '.'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44105
diff changeset
2098 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
2099 if user:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2100 m = revset.matchany(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2101 self.ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2102 specs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2103 lookup=revset.lookupfn(self),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2104 localalias=localalias,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2105 )
31025
6cf2857526c7 scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents: 31024
diff changeset
2106 else:
33336
4672db164c98 revset: make repo.anyrevs accept customized alias override (API)
Jun Wu <quark@fb.com>
parents: 33302
diff changeset
2107 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
2108 return m(self)
6cf2857526c7 scmutil: proxy revrange() through repo to break import cycles
Yuya Nishihara <yuya@tcha.org>
parents: 31024
diff changeset
2109
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2110 def url(self) -> bytes:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2111 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
2112
1718
c1996b84d4f5 make hook code nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1717
diff changeset
2113 def hook(self, name, throw=False, **args):
21866
a2ca9dcb4b77 localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21702
diff changeset
2114 """Call a hook, passing this repo instance.
a2ca9dcb4b77 localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21702
diff changeset
2115
a2ca9dcb4b77 localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21702
diff changeset
2116 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
2117 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
2118 replacing code that is expected to call a hook.
a2ca9dcb4b77 localrepo: document localrepo.hook()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21702
diff changeset
2119 """
4622
fff50306e6dd hooks: separate hook code into a separate module
Matt Mackall <mpm@selenic.com>
parents: 4619
diff changeset
2120 return hook.hook(self.ui, self, name, throw, **args)
487
2ad41189bee5 Add initial hook support
mpm@selenic.com
parents: 484
diff changeset
2121
18013
98c867ac1330 clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18009
diff changeset
2122 @filteredpropertycache
14936
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2123 def _tagscache(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2124 """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
2125 caches."""
14936
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2126
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2127 # 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
2128 # 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
2129 class tagscache:
14936
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2130 def __init__(self):
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2131 # 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
2132 # 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
2133 # '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
2134 # 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
2135 # 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
2136 self.tags = self.tagtypes = None
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2137
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2138 self.nodetagscache = self.tagslist = None
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2139
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2140 cache = tagscache()
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2141 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
2142
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2143 return cache
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2144
343
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 337
diff changeset
2145 def tags(self):
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 337
diff changeset
2146 '''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
2147 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
2148 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
2149 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
2150 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
2151 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
2152 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
2153 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
2154 try:
4417eb761ba8 tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents: 16361
diff changeset
2155 # 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
2156 rev(v)
16371
4417eb761ba8 tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents: 16361
diff changeset
2157 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
2158 except (error.LookupError, ValueError):
16371
4417eb761ba8 tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents: 16361
diff changeset
2159 pass
4417eb761ba8 tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents: 16361
diff changeset
2160 return t
4210
caff92047e87 Refactor tags code to prepare for improving the algorithm
Matt Mackall <mpm@selenic.com>
parents: 4178
diff changeset
2161
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9134
diff changeset
2162 def _findtags(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2163 """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
2164 (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
2165 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
2166 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
2167 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
2168 duration of the localrepo object."""
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9134
diff changeset
2169
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9134
diff changeset
2170 # 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
2171 # 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
2172 # 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
2173 # 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
2174 # quo fine?
4210
caff92047e87 Refactor tags code to prepare for improving the algorithm
Matt Mackall <mpm@selenic.com>
parents: 4178
diff changeset
2175
31709
c34c170b25f3 tags: only return 'alltags' in 'findglobaltags'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31706
diff changeset
2176 # 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
2177 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
2178 # 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
2179 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
2180
10651
5f091fc1bab7 style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10547
diff changeset
2181 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
2182
9152
4017291c4c48 tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents: 9151
diff changeset
2183 # 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
2184 # 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
2185 # 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
2186 # local encoding.
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9134
diff changeset
2187 tags = {}
50022
e333cc169c45 dirstate: rename `pendingparentchange` to `is_changing_parents`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49959
diff changeset
2188 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
2189 if node != self.nullid:
16371
4417eb761ba8 tags: defer tag validation until repo.tags() is called
Matt Mackall <mpm@selenic.com>
parents: 16361
diff changeset
2190 tags[encoding.tolocal(name)] = node
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2191 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
2192 tagtypes = {
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
2193 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
2194 }
9145
6b03f93b8ff3 localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9134
diff changeset
2195 return (tags, tagtypes)
343
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 337
diff changeset
2196
5657
47915bf68c44 Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents: 5637
diff changeset
2197 def tagtype(self, tagname):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2198 """
5657
47915bf68c44 Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents: 5637
diff changeset
2199 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
2200
47915bf68c44 Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents: 5637
diff changeset
2201 '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
2202 '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
2203 None : tag does not exist
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2204 """
5657
47915bf68c44 Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents: 5637
diff changeset
2205
14936
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2206 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
2207
343
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 337
diff changeset
2208 def tagslist(self):
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 337
diff changeset
2209 '''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
2210 if not self._tagscache.tagslist:
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2211 l = []
48925
1414b65303d5 localrepo: remove pycompat.iteritems()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48913
diff changeset
2212 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
2213 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
2214 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
2215
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2216 return self._tagscache.tagslist
343
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 337
diff changeset
2217
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 337
diff changeset
2218 def nodetags(self, node):
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 337
diff changeset
2219 '''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
2220 if not self._tagscache.nodetagscache:
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2221 nodetagscache = {}
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
2222 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
2223 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
2224 for tags in nodetagscache.values():
11047
c7dbd6c4877a tags: return tags in sorted order
Eric Eisner <ede@mit.edu>
parents: 10970
diff changeset
2225 tags.sort()
14936
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2226 self._tagscache.nodetagscache = nodetagscache
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2227 return self._tagscache.nodetagscache.get(node, [])
343
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 337
diff changeset
2228
13384
caa561759538 context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents: 13365
diff changeset
2229 def nodebookmarks(self, node):
27166
263db31329a6 localrepo: document nodebookmarks
Augie Fackler <augie@google.com>
parents: 27165
diff changeset
2230 """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
2231 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
2232
12066
d01e28657429 localrepo: introduce method for explicit branch cache update
Georg Brandl <georg@python.org>
parents: 12035
diff changeset
2233 def branchmap(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2234 """returns a dictionary {branch: [branchheads]} with branchheads
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2235 ordered by increasing revision number"""
41615
328ca3b9e545 branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents: 41529
diff changeset
2236 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
2237
24373
59cc09240afb revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents: 24320
diff changeset
2238 @unfilteredmethod
59cc09240afb revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents: 24320
diff changeset
2239 def revbranchcache(self):
59cc09240afb revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents: 24320
diff changeset
2240 if not self._revbranchcache:
59cc09240afb revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents: 24320
diff changeset
2241 self._revbranchcache = branchmap.revbranchcache(self.unfiltered())
59cc09240afb revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents: 24320
diff changeset
2242 return self._revbranchcache
59cc09240afb revbranchcache: move out of branchmap onto localrepo
Durham Goode <durham@fb.com>
parents: 24320
diff changeset
2243
46371
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 46334
diff changeset
2244 def register_changeset(self, rev, changelogrevision):
46372
3e91d9978bec branchmap: update rev-branch-cache incrementally
Joerg Sonnenberger <joerg@bec.de>
parents: 46371
diff changeset
2245 self.revbranchcache().setdata(rev, changelogrevision)
46371
0903d6b9b1df repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents: 46334
diff changeset
2246
23775
885c0290f7d5 localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents: 23749
diff changeset
2247 def branchtip(self, branch, ignoremissing=False):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2248 """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
2249
885c0290f7d5 localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents: 23749
diff changeset
2250 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
2251 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
2252 (e.g. namespace).
885c0290f7d5 localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents: 23749
diff changeset
2253
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2254 """
20187
4d6d5ef88538 localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents: 20184
diff changeset
2255 try:
4d6d5ef88538 localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents: 20184
diff changeset
2256 return self.branchmap().branchtip(branch)
4d6d5ef88538 localrepo: refactor repo.branchtip() to use repo.branchmap().branchtip()
Brodie Rao <brodie@sf.io>
parents: 20184
diff changeset
2257 except KeyError:
23775
885c0290f7d5 localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents: 23749
diff changeset
2258 if not ignoremissing:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2259 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
2260 else:
885c0290f7d5 localrepo: add ignoremissing parameter to branchtip
Sean Farley <sean.michael.farley@gmail.com>
parents: 23749
diff changeset
2261 pass
16719
e7bf09acd410 localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents: 16716
diff changeset
2262
343
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 337
diff changeset
2263 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
2264 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
2265 if node is None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2266 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
2267 return node
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
2268
37351
fdd22bf6398f localrepo: drop "remote" argument from lookupbranch() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37321
diff changeset
2269 def lookupbranch(self, key):
42004
0bd730fbcc2b branchcache: introduce hasbranch()
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 42001
diff changeset
2270 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
2271 return key
ca739acf1a98 commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents: 10926
diff changeset
2272
37352
92171562c7f3 localrepo: use revsymbol in lookupbranch() too
Martin von Zweigbergk <martinvonz@google.com>
parents: 37351
diff changeset
2273 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
2274
13723
e615765fdcc7 wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 13720
diff changeset
2275 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
2276 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
2277 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
2278 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
2279 result = []
816209eaf963 phases: make secret changeset undiscoverable in all case
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15888
diff changeset
2280 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
2281 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
2282 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
2283 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
2284 return result
13723
e615765fdcc7 wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 13720
diff changeset
2285
926
b765e970c9ff Add a local() method to repository classes
mpm@selenic.com
parents: 923
diff changeset
2286 def local(self):
14603
68a43fdd7d80 localrepo: local() returns self
Matt Mackall <mpm@selenic.com>
parents: 14549
diff changeset
2287 return self
926
b765e970c9ff Add a local() method to repository classes
mpm@selenic.com
parents: 923
diff changeset
2288
25623
0bee97fa1fa8 publishing: add helper method to localrepo
Matt Mackall <mpm@selenic.com>
parents: 25290
diff changeset
2289 def publishing(self):
25625
ce9e231265c1 publishing: unconditionally trust publishing flag
Matt Mackall <mpm@selenic.com>
parents: 25624
diff changeset
2290 # 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
2291 # 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
2292 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
2293
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17183
diff changeset
2294 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
2295 # 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
2296 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
2297 return False
25624
f0745da75056 publishing: use new helper method
Matt Mackall <mpm@selenic.com>
parents: 25623
diff changeset
2298 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
2299 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
2300 # 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
2301 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
2302
23666
965788d9ae09 localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23648
diff changeset
2303 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
2304 '''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
2305 if self.sharedpath != self.path:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2306 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
2307 return None
965788d9ae09 localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23648
diff changeset
2308
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2309 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
2310 return self.vfs.reljoin(self.root, f, *insidef)
244
43105253cf5e root relative IO and valid commit states
mpm@selenic.com
parents: 241
diff changeset
2311
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46907
diff changeset
2312 def setparents(self, p1, p2=None):
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46907
diff changeset
2313 if p2 is None:
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46907
diff changeset
2314 p2 = self.nullid
44052
b74270da5eee workingctx: move setparents() logic from localrepo to mirror overlayworkingctx
Martin von Zweigbergk <martinvonz@google.com>
parents: 44043
diff changeset
2315 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
2316 self._quick_access_changeid_invalidate()
16551
ebf6d38c9063 localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents: 16536
diff changeset
2317
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2318 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
2319 """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
2320 fileid can be a file revision or node."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2321 return context.filectx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2322 self, path, changeid, fileid, changectx=changectx
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2323 )
2564
55e592041076 Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents: 2491
diff changeset
2324
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2325 def getcwd(self) -> bytes:
870
a82eae840447 Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents: 839
diff changeset
2326 return self.dirstate.getcwd()
627
b6c42714d900 Add locate command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 624
diff changeset
2327
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2328 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
2329 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
2330
11698
9df481f8036d localrepo: refactor filter computation
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11669
diff changeset
2331 def _loadfilter(self, filter):
37137
db90a5793103 localrepo: make filterpats private (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37135
diff changeset
2332 if filter not in self._filterpats:
1258
1945754e466b Add file encoding/decoding support
mpm@selenic.com
parents: 1236
diff changeset
2333 l = []
4004
c83c35f2f4e2 unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents: 4003
diff changeset
2334 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
2335 if cmd == b'!':
7226
b71a52f101dc Make it possible to disable filtering for a pattern.
Mads Kiilerich <mads@kiilerich.com>
parents: 7208
diff changeset
2336 continue
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2337 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
2338 fn = None
6066
f3a8b5360100 Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents: 6065
diff changeset
2339 params = cmd
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
2340 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
2341 if cmd.startswith(name):
5966
11af38a592ae Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents: 5915
diff changeset
2342 fn = filterfn
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2343 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
2344 break
11af38a592ae Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents: 5915
diff changeset
2345 if not fn:
37120
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
2346 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
2347 fn.__name__ = 'commandfilter'
5967
f8ad3b76e923 Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents: 5966
diff changeset
2348 # Wrap old filters not supporting keyword arguments
36178
646002338365 py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents: 36009
diff changeset
2349 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
2350 oldfn = fn
43202
8864aa96f1f6 localrepo: fix variable binding in handling of old filters
Mads Kiilerich <mads@kiilerich.com>
parents: 43201
diff changeset
2351 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
2352 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
2353 l.append((mf, fn, params))
37137
db90a5793103 localrepo: make filterpats private (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37135
diff changeset
2354 self._filterpats[filter] = l
db90a5793103 localrepo: make filterpats private (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37135
diff changeset
2355 return self._filterpats[filter]
1258
1945754e466b Add file encoding/decoding support
mpm@selenic.com
parents: 1236
diff changeset
2356
12707
2216ab103ea8 localrepo: load filter patterns outside of _filter
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12706
diff changeset
2357 def _filter(self, filterpats, filename, data):
2216ab103ea8 localrepo: load filter patterns outside of _filter
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12706
diff changeset
2358 for mf, fn, cmd in filterpats:
1258
1945754e466b Add file encoding/decoding support
mpm@selenic.com
parents: 1236
diff changeset
2359 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
2360 self.ui.debug(
6ceb3721e203 localrepo: debug log of filter name when filtering through a function
Mads Kiilerich <mads@kiilerich.com>
parents: 43167
diff changeset
2361 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
2362 % (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
2363 )
5967
f8ad3b76e923 Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents: 5966
diff changeset
2364 data = fn(data, cmd, ui=self.ui, repo=self, filename=filename)
1258
1945754e466b Add file encoding/decoding support
mpm@selenic.com
parents: 1236
diff changeset
2365 break
1945754e466b Add file encoding/decoding support
mpm@selenic.com
parents: 1236
diff changeset
2366
1945754e466b Add file encoding/decoding support
mpm@selenic.com
parents: 1236
diff changeset
2367 return data
1019
a9cca981c423 Create helper functions for I/O to files in the working directory
mpm@selenic.com
parents: 1013
diff changeset
2368
18013
98c867ac1330 clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18009
diff changeset
2369 @unfilteredpropertycache
12708
8a08b12ae88e localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12707
diff changeset
2370 def _encodefilterpats(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2371 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
2372
18013
98c867ac1330 clfilter: add a propertycache that must be unfiltered
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18009
diff changeset
2373 @unfilteredpropertycache
12708
8a08b12ae88e localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12707
diff changeset
2374 def _decodefilterpats(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2375 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
2376
5966
11af38a592ae Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents: 5915
diff changeset
2377 def adddatafilter(self, name, filter):
11af38a592ae Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents: 5915
diff changeset
2378 self._datafilters[name] = filter
11af38a592ae Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents: 5915
diff changeset
2379
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2380 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
2381 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
2382 data = self.wvfs.readlink(filename)
4004
c83c35f2f4e2 unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents: 4003
diff changeset
2383 else:
23854
f6070d3a9cb8 localrepo: remove all internal uses of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23853
diff changeset
2384 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
2385 return self._filter(self._encodefilterpats, filename, data)
1258
1945754e466b Add file encoding/decoding support
mpm@selenic.com
parents: 1236
diff changeset
2386
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2387 def wwrite(
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2388 self,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2389 filename: bytes,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2390 data: bytes,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2391 flags: bytes,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2392 backgroundclose=False,
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2393 **kwargs
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2394 ) -> 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
2395 """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
2396
21b33f0460e0 revert: apply normallookup on reverted file if size isn't changed (issue4583)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24825
diff changeset
2397 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
2398 """
12708
8a08b12ae88e localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12707
diff changeset
2399 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
2400 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
2401 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
2402 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2403 self.wvfs.write(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2404 filename, data, backgroundclose=backgroundclose, **kwargs
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2405 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2406 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
2407 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
2408 else:
45b678bf3a78 atomicupdate: add an experimental option to use atomictemp when updating
Boris Feld <boris.feld@octobus.net>
parents: 35725
diff changeset
2409 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
2410 return len(data)
1258
1945754e466b Add file encoding/decoding support
mpm@selenic.com
parents: 1236
diff changeset
2411
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
2412 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
2413 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
2414
23379
86c6f06feb04 localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23311
diff changeset
2415 def currenttransaction(self):
86c6f06feb04 localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23311
diff changeset
2416 """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
2417 if self._transref:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24284
diff changeset
2418 tr = self._transref()
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24284
diff changeset
2419 else:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24284
diff changeset
2420 tr = None
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24284
diff changeset
2421
8072
ecf7795479d5 transaction: support multiple, separate transactions
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7948
diff changeset
2422 if tr and tr.running():
23379
86c6f06feb04 localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23311
diff changeset
2423 return tr
86c6f06feb04 localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23311
diff changeset
2424 return None
86c6f06feb04 localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23311
diff changeset
2425
86c6f06feb04 localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23311
diff changeset
2426 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
2427 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
2428 b'devel', b'check-locks'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2429 ):
29705
41689e293994 develwarn: use the lock helper in local repo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 29417
diff changeset
2430 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
2431 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
2432 tr = self.currenttransaction()
86c6f06feb04 localrepo: add a currenttransaction method
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23311
diff changeset
2433 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
2434 return tr.nest(name=desc)
1806
a2c69737e65e Automatic nesting into running transactions in the same repository.
mason@suse.com
parents: 1802
diff changeset
2435
5865
e7127f669edb transactions: don't show a backtrace when journal exists
Matt Mackall <mpm@selenic.com>
parents: 5814
diff changeset
2436 # 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
2437 if self.svfs.exists(b"journal"):
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
2438 raise error.RepoError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2439 _(b"abandoned transaction found"),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2440 hint=_(b"run 'hg recover' to clean up transaction"),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2441 )
5865
e7127f669edb transactions: don't show a backtrace when journal exists
Matt Mackall <mpm@selenic.com>
parents: 5814
diff changeset
2442
50082
a66926099c0f localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50071
diff changeset
2443 # 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
2444 #
a66926099c0f localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50071
diff changeset
2445 # - 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
2446 # dirstate ?
a66926099c0f localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50071
diff changeset
2447 #
a66926099c0f localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50071
diff changeset
2448 # - 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
2449 # 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
2450 # 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
2451 #
a66926099c0f localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50071
diff changeset
2452 # - 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
2453 # dirstate dirty?
a66926099c0f localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50071
diff changeset
2454 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
2455 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
2456 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
2457
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2458 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
2459 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
2460 txnid = b'TXN:' + ha
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2461 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
2462
16236
97efd26eb957 localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents: 16208
diff changeset
2463 self._writejournal(desc)
24306
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24284
diff changeset
2464 if report:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24284
diff changeset
2465 rp = report
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24284
diff changeset
2466 else:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24284
diff changeset
2467 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
2468 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
2469 # 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
2470 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
2471 # 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
2472 #
b36318e6d2ef track-tags: introduce first bits of tags tracking during transaction
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31819
diff changeset
2473 # 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
2474 # 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
2475 # 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
2476 # 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
2477 # 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
2478 # 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
2479 #
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 # 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
2481 # 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
2482 # 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
2483 # 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
2484 # 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
2485 #
e6e1884df298 track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31995
diff changeset
2486 # 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
2487 # 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
2488 #
e6e1884df298 track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31995
diff changeset
2489 # 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
2490 # 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
2491 # 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
2492 # ``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
2493 # 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
2494 # 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
2495 # 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
2496 #
e6e1884df298 track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31995
diff changeset
2497 # <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
2498 #
e6e1884df298 track-tags: write all tag changes to a file
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31995
diff changeset
2499 # 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
2500 # "-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
2501 # "+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
2502 # "-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
2503 # "+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
2504 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
2505 # 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
2506 shouldtracktags = self.ui.configbool(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2507 b'experimental', b'hook-track-tags'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2508 )
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2509 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
2510 oldheads = self.changelog.headrevs()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2511
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
2512 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
2513 repo = reporef()
46792
7e08fa9b3d13 typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents: 46572
diff changeset
2514 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
2515 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
2516 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
2517 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
2518 # 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
2519 # 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
2520 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
2521 if changes:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2522 tr2.hookargs[b'tag_moved'] = b'1'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2523 with repo.vfs(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2524 b'changes/tags.changes', b'w', atomictemp=True
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2525 ) 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
2526 # 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
2527 # 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
2528 # 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
2529 tagsmod.writediff(changesfile, changes)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2530
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
2531 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
2532 """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
2533 # 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
2534 # 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
2535 #
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 # 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
2537 # 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
2538 # 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
2539 #
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 # 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
2541 # 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
2542 # 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
2543 #
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 # 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
2545 # 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
2546 #
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 # 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
2548 # 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
2549 tracktags(tr2)
34709
c212947273a7 bookmark: add a dedicated pretxnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
2550 repo = reporef()
46792
7e08fa9b3d13 typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents: 46572
diff changeset
2551 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
2552
43734
88a306478556 singlehead: making config item a bool again
Georges Racinet <georges.racinet@octobus.net>
parents: 43710
diff changeset
2553 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
2554 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
2555 if singlehead:
43734
88a306478556 singlehead: making config item a bool again
Georges Racinet <georges.racinet@octobus.net>
parents: 43710
diff changeset
2556 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
2557 accountclosed = singleheadsub.get(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2558 b"account-closed-heads", False
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2559 )
46096
4d5e2fd53707 singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents: 46004
diff changeset
2560 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
2561 filtername = b"immutable"
4d5e2fd53707 singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents: 46004
diff changeset
2562 else:
4d5e2fd53707 singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents: 46004
diff changeset
2563 filtername = b"visible"
4d5e2fd53707 singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents: 46004
diff changeset
2564 scmutil.enforcesinglehead(
4d5e2fd53707 singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents: 46004
diff changeset
2565 repo, tr2, desc, accountclosed, filtername
4d5e2fd53707 singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents: 46004
diff changeset
2566 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2567 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
2568 for name, (old, new) in sorted(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2569 tr.changes[b'bookmarks'].items()
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2570 ):
34709
c212947273a7 bookmark: add a dedicated pretxnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
2571 args = tr.hookargs.copy()
c212947273a7 bookmark: add a dedicated pretxnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents: 34708
diff changeset
2572 args.update(bookmarks.preparehookargs(name, old, new))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2573 repo.hook(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2574 b'pretxnclose-bookmark',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2575 throw=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2576 **pycompat.strkwargs(args)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2577 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2578 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
2579 cl = repo.unfiltered().changelog
44548
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2580 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
2581 for rev in revs:
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2582 args = tr.hookargs.copy()
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2583 node = hex(cl.node(rev))
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2584 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
2585 repo.hook(
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2586 b'pretxnclose-phase',
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2587 throw=True,
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2588 **pycompat.strkwargs(args)
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2589 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2590
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2591 repo.hook(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2592 b'pretxnclose', throw=True, **pycompat.strkwargs(tr.hookargs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2593 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2594
26577
8f2ff40fe9c9 localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 26499
diff changeset
2595 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
2596 repo = reporef()
42669
36c692eb28d3 transaction: leave unfinished without crashing when not properly released
Martin von Zweigbergk <martinvonz@google.com>
parents: 42621
diff changeset
2597 if repo is None:
36c692eb28d3 transaction: leave unfinished without crashing when not properly released
Martin von Zweigbergk <martinvonz@google.com>
parents: 42621
diff changeset
2598 # 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
2599 # 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
2600 # 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
2601 # user run `hg recover`.
36c692eb28d3 transaction: leave unfinished without crashing when not properly released
Martin von Zweigbergk <martinvonz@google.com>
parents: 42621
diff changeset
2602 return
26577
8f2ff40fe9c9 localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 26499
diff changeset
2603 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
2604 # 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
2605 # 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
2606 # 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
2607 # 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
2608 # 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
2609 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
2610 else:
8f2ff40fe9c9 localrepo: execute appropriate actions for dirstate at releasing transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 26499
diff changeset
2611 # 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
2612 # 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
2613 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
2614
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2615 tr = transaction.transaction(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2616 rp,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2617 self.svfs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2618 vfsmap,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2619 b"journal",
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2620 b"undo",
50285
473103758373 undo-files: drop the old undo rename logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50284
diff changeset
2621 lambda: None,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2622 self.store.createmode,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2623 validator=validate,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2624 releasefn=releasefn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2625 checkambigfiles=_cachedfiles,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2626 name=desc,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2627 )
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
2628 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
2629 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
2630 tr.changes[b'origrepolen'] = len(self)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2631 tr.changes[b'obsmarkers'] = set()
44548
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2632 tr.changes[b'phases'] = []
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2633 tr.changes[b'bookmarks'] = {}
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2634
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2635 tr.hookargs[b'txnid'] = txnid
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2636 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
2637 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
2638 # 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
2639 # 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
2640 # 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
2641 tr.addfinalize(b'flush-fncache', self.store.write)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2642
24282
db8679812f84 hook: add a generic hook after transaction has been closed
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24281
diff changeset
2643 def txnclosehook(tr2):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2644 """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
2645 # 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
2646 # 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
2647 # 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
2648 # fixes the function accumulation.
e219dbfd0342 localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27846
diff changeset
2649 hookargs = tr2.hookargs
e219dbfd0342 localrepo: don't reference transaction from hook closure (issue5043)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27846
diff changeset
2650
43778
888bd39ed555 lock: pass "success" boolean to _afterlock callbacks
Kyle Lippincott <spectral@google.com>
parents: 43765
diff changeset
2651 def hookfunc(unused_success):
34708
ee5f0d047b41 bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents: 34520
diff changeset
2652 repo = reporef()
46792
7e08fa9b3d13 typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents: 46572
diff changeset
2653 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
2654
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2655 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
2656 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
2657 for name, (old, new) in bmchanges:
ee5f0d047b41 bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents: 34520
diff changeset
2658 args = tr.hookargs.copy()
ee5f0d047b41 bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents: 34520
diff changeset
2659 args.update(bookmarks.preparehookargs(name, old, new))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2660 repo.hook(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2661 b'txnclose-bookmark',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2662 throw=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2663 **pycompat.strkwargs(args)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2664 )
34708
ee5f0d047b41 bookmark: add a dedicated txnclose-bookmark hook
Boris Feld <boris.feld@octobus.net>
parents: 34520
diff changeset
2665
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2666 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
2667 cl = repo.unfiltered().changelog
44548
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2668 phasemv = sorted(
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2669 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
2670 )
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2671 for revs, (old, new) in phasemv:
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2672 for rev in revs:
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2673 args = tr.hookargs.copy()
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2674 node = hex(cl.node(rev))
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2675 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
2676 repo.hook(
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2677 b'txnclose-phase',
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2678 throw=False,
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2679 **pycompat.strkwargs(args)
fdc802f29b2c transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents: 44482
diff changeset
2680 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2681
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2682 repo.hook(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2683 b'txnclose', throw=False, **pycompat.strkwargs(hookargs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2684 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2685
46792
7e08fa9b3d13 typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents: 46572
diff changeset
2686 repo = reporef()
7e08fa9b3d13 typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents: 46572
diff changeset
2687 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
2688 repo._afterlock(hookfunc)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2689
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2690 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
2691 # 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
2692 # 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
2693 # 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
2694 # callbacks run.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2695 tr.addpostclose(b'-warm-cache', self._buildcacheupdater(tr))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2696
24792
7d0421de8de3 hooks: add a 'txnabort' hook
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24784
diff changeset
2697 def txnaborthook(tr2):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2698 """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
2699 repo = reporef()
7e08fa9b3d13 typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents: 46572
diff changeset
2700 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
2701 repo.hook(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2702 b'txnabort', throw=False, **pycompat.strkwargs(tr2.hookargs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2703 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2704
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2705 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
2706 # 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
2707 # 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
2708 tr.addpostclose(b'refresh-filecachestats', self._refreshfilecachestats)
14266
89e7d35e0ef0 fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents: 13957
diff changeset
2709 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
2710 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
2711 # 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
2712 # 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
2713 # 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
2714 #
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
2715 # 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
2716 # 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
2717 #
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 # 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
2719 # 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
2720 #
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 # - 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
2722 # 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
2723 #
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 # - 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
2725 # 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
2726 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
2727 ds = self.dirstate
50267
f92afdf3cff9 transaction: remove the `branch` backup for transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50265
diff changeset
2728 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
2729 # 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
2730 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
2731
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 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
2733 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
2734 # 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
2735 # 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
2736 # 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
2737 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
2738
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 tr.addvalidator(b'dirstate-backup', backup_dirstate)
14266
89e7d35e0ef0 fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents: 13957
diff changeset
2740 return tr
89e7d35e0ef0 fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents: 13957
diff changeset
2741
16236
97efd26eb957 localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents: 16208
diff changeset
2742 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
2743 return (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2744 (self.svfs, b'journal'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2745 (self.vfs, b'journal.desc'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2746 )
16236
97efd26eb957 localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents: 16208
diff changeset
2747
97efd26eb957 localrepo: refactor retrieving of journal/undo files paths
Idan Kamara <idankk86@gmail.com>
parents: 16208
diff changeset
2748 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
2749 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
2750
32452
b647b923486f transaction: run _writejournal unfiltered
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32381
diff changeset
2751 @unfilteredmethod
14266
89e7d35e0ef0 fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents: 13957
diff changeset
2752 def _writejournal(self, desc):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2753 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
2754
210
d2badbd7d1ad hg undo: fixup working dir state
mpm@selenic.com
parents: 207
diff changeset
2755 def recover(self):
27846
63821023ea79 with: use context manager in localrepo recover
Bryan O'Sullivan <bryano@fb.com>
parents: 27698
diff changeset
2756 with self.lock():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2757 if self.svfs.exists(b"journal"):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2758 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
2759 vfsmap = self.vfs_map
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2760 transaction.rollback(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2761 self.svfs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2762 vfsmap,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2763 b"journal",
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2764 self.ui.warn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2765 checkambigfiles=_cachedfiles,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2766 )
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4914
diff changeset
2767 self.invalidate()
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4914
diff changeset
2768 return True
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4914
diff changeset
2769 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2770 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
2771 return False
210
d2badbd7d1ad hg undo: fixup working dir state
mpm@selenic.com
parents: 207
diff changeset
2772
15183
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
2773 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
2774 wlock = lock = None
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4914
diff changeset
2775 try:
1712
21dcf38e5d7d Allow callers to pass in the dirstate lock in most localrepo.py funcs.
mason@suse.com
parents: 1709
diff changeset
2776 wlock = self.wlock()
4438
3900f684a150 Fix hg import --exact bug that hangs hg on failure.
Eric Hopper <hopper@omnifarious.org>
parents: 4417
diff changeset
2777 lock = self.lock()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2778 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
2779 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
2780 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2781 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
2782 return 1
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4914
diff changeset
2783 finally:
50071
d91fc026071c rollback: remove the dirstateguard usage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50070
diff changeset
2784 release(lock, wlock)
162
5dcbe4d9a30c Implement recover and undo commands
mpm@selenic.com
parents: 161
diff changeset
2785
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2786 @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
2787 def _rollback(self, dryrun, force):
15130
3d44e68360a6 rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents: 15101
diff changeset
2788 ui = self.ui
50069
81870c92c293 rollback: detect "parentgone" case earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50059
diff changeset
2789
81870c92c293 rollback: detect "parentgone" case earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50059
diff changeset
2790 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
2791 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2792 args = self.vfs.read(b'undo.desc').splitlines()
15130
3d44e68360a6 rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents: 15101
diff changeset
2793 (oldlen, desc, detail) = (int(args[0]), args[1], None)
3d44e68360a6 rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents: 15101
diff changeset
2794 if len(args) >= 3:
3d44e68360a6 rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents: 15101
diff changeset
2795 detail = args[2]
3d44e68360a6 rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents: 15101
diff changeset
2796 oldtip = oldlen - 1
3d44e68360a6 rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents: 15101
diff changeset
2797
3d44e68360a6 rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents: 15101
diff changeset
2798 if detail and ui.verbose:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2799 msg = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2800 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
2801 b' (undo %s: %s)\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2802 ) % (oldtip, desc, detail)
15130
3d44e68360a6 rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents: 15101
diff changeset
2803 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2804 msg = _(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43106
diff changeset
2805 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
2806 ) % (oldtip, desc)
50069
81870c92c293 rollback: detect "parentgone" case earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50059
diff changeset
2807 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
2808 except IOError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2809 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
2810 desc = None
50069
81870c92c293 rollback: detect "parentgone" case earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50059
diff changeset
2811 parentgone = True
15183
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
2812
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2813 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
2814 raise error.Abort(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2815 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2816 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
2817 b'may lose data'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2818 ),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2819 hint=_(b'use -f to force'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2820 )
15183
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15131
diff changeset
2821
15130
3d44e68360a6 rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents: 15101
diff changeset
2822 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
2823 if dryrun:
cda7a87c1871 rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents: 15057
diff changeset
2824 return 0
15131
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
2825
18310
4499ba5ac35c localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents: 18309
diff changeset
2826 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
2827 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
2828 skip_journal_pattern = None
c8f32aa80dca rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50069
diff changeset
2829 if not parentgone:
c8f32aa80dca rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50069
diff changeset
2830 skip_journal_pattern = RE_SKIP_DIRSTATE_ROLLBACK
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2831 transaction.rollback(
50070
c8f32aa80dca rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50069
diff changeset
2832 self.svfs,
c8f32aa80dca rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50069
diff changeset
2833 vfsmap,
c8f32aa80dca rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50069
diff changeset
2834 b'undo',
c8f32aa80dca rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50069
diff changeset
2835 ui.warn,
c8f32aa80dca rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50069
diff changeset
2836 checkambigfiles=_cachedfiles,
c8f32aa80dca rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50069
diff changeset
2837 skip_journal_pattern=skip_journal_pattern,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2838 )
15097
cda7a87c1871 rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents: 15057
diff changeset
2839 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
2840 self.dirstate.invalidate()
15131
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
2841
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
2842 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
2843 # 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
2844 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
2845 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
2846 # 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
2847 # 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
2848 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
2849 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
2850 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
2851
27167
3fe8cb40c9c5 commands: inline definition of localrepo.parents() and drop the method (API)
Augie Fackler <augie@google.com>
parents: 27166
diff changeset
2852 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
2853 if len(parents) > 1:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2854 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2855 _(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2856 b'working directory now based on '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2857 b'revisions %d and %d\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2858 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2859 % parents
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2860 )
15131
7c26ce9edbd2 rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents: 15130
diff changeset
2861 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2862 ui.status(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43106
diff changeset
2863 _(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
2864 )
45490
0ce6af73f481 mergestate: make some callers not pass pointless node argument
Martin von Zweigbergk <martinvonz@google.com>
parents: 45485
diff changeset
2865 mergestatemod.mergestate.clean(self)
24784
59406b8b1303 rollback: clear resolve state (issue4593)
Matt Mackall <mpm@selenic.com>
parents: 24750
diff changeset
2866
17013
c8eda7bbdcab strip: incrementally update the branchheads cache after a strip
Joshua Redstone <joshua.redstone@fb.com>
parents: 17012
diff changeset
2867 # 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
2868 # 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
2869 # invalidated.
15604
b8d8599410da rollback: always call destroyed() (regression from 1.9)
Greg Ward <greg-hg@gerg.ca>
parents: 15381
diff changeset
2870 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
2871 return 0
cda7a87c1871 rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents: 15057
diff changeset
2872
32332
7aa4a4cf0dde cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32314
diff changeset
2873 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
2874 """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
2875
7aa4a4cf0dde cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32314
diff changeset
2876 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
2877 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
2878 method.
7aa4a4cf0dde cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32314
diff changeset
2879 """
7aa4a4cf0dde cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32314
diff changeset
2880 # 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
2881 reporef = weakref.ref(self)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
2882
32332
7aa4a4cf0dde cache: make the cache updated callback easily accessible to extension
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32314
diff changeset
2883 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
2884 repo = reporef()
46792
7e08fa9b3d13 typing: add assertions to localrepo.py to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents: 46572
diff changeset
2885 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
2886 repo.updatecaches(tr)
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 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
2889
32263
604d65e2c0b2 caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32262
diff changeset
2890 @unfilteredmethod
47297
1337bfaa88ca updatecaches: adds a `caches` parameters to `repo.updatecaches`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47296
diff changeset
2891 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
2892 """warm appropriate caches
a72caf0af38e caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32263
diff changeset
2893
a72caf0af38e caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32263
diff changeset
2894 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
2895 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
2896 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
2897
b24cde12061b debugupdatecache: also warm rev branch cache
Boris Feld <boris.feld@octobus.net>
parents: 36819
diff changeset
2898 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
2899 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
2900
8be95673eb8a cache: avoid warming the fnodetags cache after clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46907
diff changeset
2901 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
2902 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
2903 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
2904 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
2905 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
2906 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
2907 # 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
2908 # 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
2909 return
604d65e2c0b2 caches: introduce a function to warm cache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32262
diff changeset
2910
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
2911 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
2912
47300
8b2d09c7e5cd updatecaches: deprecate the `full` argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
2913 if full:
8b2d09c7e5cd updatecaches: deprecate the `full` argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
2914 msg = (
8b2d09c7e5cd updatecaches: deprecate the `full` argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
2915 "`full` argument for `repo.updatecaches` is deprecated\n"
8b2d09c7e5cd updatecaches: deprecate the `full` argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
2916 "(use `caches=repository.CACHE_ALL` instead)"
8b2d09c7e5cd updatecaches: deprecate the `full` argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
2917 )
47412
c887bab2dccf py3: byteify the version string passed to the deprecation warning method
Matt Harbison <matt_harbison@yahoo.com>
parents: 47300
diff changeset
2918 self.ui.deprecwarn(msg, b"5.9")
47300
8b2d09c7e5cd updatecaches: deprecate the `full` argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
2919 caches = repository.CACHES_ALL
8b2d09c7e5cd updatecaches: deprecate the `full` argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
2920 if full == b"post-clone":
8b2d09c7e5cd updatecaches: deprecate the `full` argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
2921 caches = repository.CACHES_POST_CLONE
8b2d09c7e5cd updatecaches: deprecate the `full` argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
2922 caches = repository.CACHES_ALL
8b2d09c7e5cd updatecaches: deprecate the `full` argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
2923 elif caches is None:
8b2d09c7e5cd updatecaches: deprecate the `full` argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
2924 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
2925
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47280
diff changeset
2926 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
2927 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
2928 # accessing the 'served' branchmap should refresh all the others,
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47280
diff changeset
2929 self.ui.debug(b'updating the branch cache\n')
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47280
diff changeset
2930 self.filtered(b'served').branchmap()
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 self.filtered(b'served.hidden').branchmap()
48677
8e5effbf52d0 branchmap: stop writing cache for uncommitted data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48674
diff changeset
2932 # flush all possibly delayed write.
8e5effbf52d0 branchmap: stop writing cache for uncommitted data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48674
diff changeset
2933 self._branchcaches.write_delayed(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
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_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
2936 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
2937
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47280
diff changeset
2938 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
2939 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
2940 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
2941 if not entry.is_revlog:
5d84b1385f7f treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50666
diff changeset
2942 continue
5d84b1385f7f treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50666
diff changeset
2943 if not entry.is_manifestlog:
5d84b1385f7f treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50666
diff changeset
2944 continue
5d84b1385f7f treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50666
diff changeset
2945 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
2946 if manifestrevlog is not None:
5d84b1385f7f treemanifest: make `updatecaches` update the nodemaps for all directories
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50666
diff changeset
2947 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
2948
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
2949 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
2950 rbc = unfi.revbranchcache()
2eee280a1354 updatecaches: also warm revbranchcache for filtered revisions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41896
diff changeset
2951 for r in unfi.changelog:
36952
b24cde12061b debugupdatecache: also warm rev branch cache
Boris Feld <boris.feld@octobus.net>
parents: 36819
diff changeset
2952 rbc.branchinfo(r)
b24cde12061b debugupdatecache: also warm rev branch cache
Boris Feld <boris.feld@octobus.net>
parents: 36819
diff changeset
2953 rbc.write()
b24cde12061b debugupdatecache: also warm rev branch cache
Boris Feld <boris.feld@octobus.net>
parents: 36819
diff changeset
2954
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
2955 if repository.CACHE_FULL_MANIFEST in caches:
38781
0a57945aaf7f manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents: 38760
diff changeset
2956 # 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
2957 for ctx in self[b'.'].parents():
38781
0a57945aaf7f manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents: 38760
diff changeset
2958 ctx.manifest() # accessing the manifest is enough
0a57945aaf7f manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents: 38760
diff changeset
2959
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 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
2961 # accessing fnode cache warms the cache
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47280
diff changeset
2962 tagsmod.fnoderevs(self.ui, unfi, unfi.changelog.revs())
d1589957fdcb updatecaches: introduce a set of constants to control which are updated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47280
diff changeset
2963
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_DEFAULT in caches:
41934
481259af4bdf updatecaches: also warm the tags caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41933
diff changeset
2965 # accessing tags warm the cache
481259af4bdf updatecaches: also warm the tags caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41933
diff changeset
2966 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
2967 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
2968 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
2969
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
2970 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
2971 # 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
2972 # 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
2973 # 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
2974 # 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
2975 # they're a subset of another kind of cache that *has* been used).
42712
cdf0e9523de1 branchmap: explicitly warm+write all subsets of the branchmap caches
Kyle Lippincott <spectral@google.com>
parents: 42685
diff changeset
2976 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
2977 filtered = self.filtered(filt)
cdf0e9523de1 branchmap: explicitly warm+write all subsets of the branchmap caches
Kyle Lippincott <spectral@google.com>
parents: 42685
diff changeset
2978 filtered.branchmap().write(filtered)
cdf0e9523de1 branchmap: explicitly warm+write all subsets of the branchmap caches
Kyle Lippincott <spectral@google.com>
parents: 42685
diff changeset
2979
10547
bae9bb09166b strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10522
diff changeset
2980 def invalidatecaches(self):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43421
diff changeset
2981 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
2982 # 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
2983 del self.__dict__['_tagscache']
14936
9dca7653b525 localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents: 14935
diff changeset
2984
41615
328ca3b9e545 branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents: 41529
diff changeset
2985 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
2986 self.invalidatevolatilesets()
33302
36a415b5a4b2 localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33278
diff changeset
2987 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
2988
312262ebc223 cache: group obscache and revsfiltercache invalidation in a single function
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18101
diff changeset
2989 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
2990 self.filteredrevcache.clear()
17469
fb72eec7efd8 obsolete: introduce caches for all meaningful sets
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 17434
diff changeset
2991 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
2992 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
2993
14930
372d9d8b1da4 localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents: 14929
diff changeset
2994 def invalidatedirstate(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
2995 """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
2996 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
2997 rereading it if it has.
372d9d8b1da4 localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents: 14929
diff changeset
2998
372d9d8b1da4 localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents: 14929
diff changeset
2999 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
3000 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
3001 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
3002 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
3003 unfi = self.unfiltered()
ec769cbc1fa2 dirstate: directly manage the dirstate property on localrepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50085
diff changeset
3004 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
3005 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
3006 del unfi.__dict__['dirstate']
14930
372d9d8b1da4 localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents: 14929
diff changeset
3007
26831
0a7610758c42 localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 26781
diff changeset
3008 def invalidate(self, clearfilecache=False):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3009 """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
3010
d9c49138ab93 localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29883
diff changeset
3011 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
3012 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
3013 (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
3014 redundant one doesn't).
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3015 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3016 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
3017 for k in list(self._filecache.keys()):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3018 if (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3019 k == b'changelog'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3020 and self.currenttransaction()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3021 and self.changelog._delayed
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3022 ):
33706
01a1c4e66816 repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33703
diff changeset
3023 # 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
3024 # 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
3025 # 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
3026 continue
14935
4ae7473f5b73 localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents: 14934
diff changeset
3027
26831
0a7610758c42 localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 26781
diff changeset
3028 if clearfilecache:
0a7610758c42 localrepo: discard objects in _filecache at transaction failure (issue4876)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 26781
diff changeset
3029 del self._filecache[k]
14935
4ae7473f5b73 localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents: 14934
diff changeset
3030 try:
50919
b3174be5e7f7 localrepo: purge filecache attribute using there unicode name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50759
diff changeset
3031 # 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
3032 # 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
3033 # 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
3034 # 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
3035 delattr(unfiltered, pycompat.sysstr(k))
14935
4ae7473f5b73 localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents: 14934
diff changeset
3036 except AttributeError:
4ae7473f5b73 localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents: 14934
diff changeset
3037 pass
10547
bae9bb09166b strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10522
diff changeset
3038 self.invalidatecaches()
29918
d9c49138ab93 localrepo: make invalidate avoid invalidating store inside transaction (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29883
diff changeset
3039 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
3040 # 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
3041 # 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
3042 # 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
3043 self.store.invalidatecaches()
10547
bae9bb09166b strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10522
diff changeset
3044
20627
a42ea6d209e6 localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents: 20567
diff changeset
3045 def invalidateall(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3046 """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
3047 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
3048 # 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
3049 self.invalidate()
a42ea6d209e6 localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents: 20567
diff changeset
3050 self.invalidatedirstate()
a42ea6d209e6 localrepo: add hook point to invalidate everything on each command-server run
Yuya Nishihara <yuya@tcha.org>
parents: 20567
diff changeset
3051
29920
e35a83cedde1 localrepo: make _refreshfilecachestats unfiltered method to refresh correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29918
diff changeset
3052 @unfilteredmethod
26251
5c0f5db65c6b localrepo: refresh filecache stats only if transaction finished successfully
Yuya Nishihara <yuya@tcha.org>
parents: 26250
diff changeset
3053 def _refreshfilecachestats(self, tr):
26250
bc1f8a79b4e4 localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents: 26155
diff changeset
3054 """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
3055 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
3056 k = pycompat.sysstr(k)
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43421
diff changeset
3057 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
3058 continue
bc1f8a79b4e4 localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents: 26155
diff changeset
3059 ce.refresh()
bc1f8a79b4e4 localrepo: move closure of lock release to class
Yuya Nishihara <yuya@tcha.org>
parents: 26155
diff changeset
3060
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3061 def _lock(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3062 self,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3063 vfs,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3064 lockname,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3065 wait,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3066 releasefn,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3067 acquirefn,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3068 desc,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3069 ):
35208
1b758105b5c7 lock: add a trylock method handling the timeout and messaging logic
Boris Feld <boris.feld@octobus.net>
parents: 35207
diff changeset
3070 timeout = 0
35209
9153871d50e0 lock: allow to configure when the lock messages are displayed
Boris Feld <boris.feld@octobus.net>
parents: 35208
diff changeset
3071 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
3072 if wait:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3073 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
3074 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
3075 # 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
3076 signalsafe = self.ui.configbool(b'ui', b'signal-safe-lock')
35208
1b758105b5c7 lock: add a trylock method handling the timeout and messaging logic
Boris Feld <boris.feld@octobus.net>
parents: 35207
diff changeset
3077
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3078 l = lockmod.trylock(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3079 self.ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3080 vfs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3081 lockname,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3082 timeout,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3083 warntimeout,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3084 releasefn=releasefn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3085 acquirefn=acquirefn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3086 desc=desc,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3087 signalsafe=signalsafe,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3088 )
1751
e9bf415a8ecb localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1747
diff changeset
3089 return l
e9bf415a8ecb localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1747
diff changeset
3090
15587
809d5d30e377 localrepo: rename _postrelease to _afterlock
Matt Mackall <mpm@selenic.com>
parents: 15586
diff changeset
3091 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
3092 """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
3093
24821
57f1dbc99631 afterlock: add the callback to the top level lock (issue4608)
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24799
diff changeset
3094 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
3095 (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
3096 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
3097 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
3098 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
3099 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
3100 break
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3101 else: # no lock have been found.
43778
888bd39ed555 lock: pass "success" boolean to _afterlock callbacks
Kyle Lippincott <spectral@google.com>
parents: 43765
diff changeset
3102 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
3103
4914
9a2a73ea6135 repo locks: use True/False
Matt Mackall <mpm@selenic.com>
parents: 4913
diff changeset
3104 def lock(self, wait=True):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3105 """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
3106 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
3107 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
3108
e0c810d0ab69 lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24745
diff changeset
3109 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
3110 '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
3111 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
3112 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
3113 l.lock()
a26d33749bd8 made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 8072
diff changeset
3114 return l
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4916
diff changeset
3115
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3116 l = self._lock(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3117 vfs=self.svfs,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3118 lockname=b"lock",
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3119 wait=wait,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3120 releasefn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3121 acquirefn=self.invalidate,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3122 desc=_(b'repository %s') % self.origroot,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3123 )
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4916
diff changeset
3124 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
3125 return l
1751
e9bf415a8ecb localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1747
diff changeset
3126
4914
9a2a73ea6135 repo locks: use True/False
Matt Mackall <mpm@selenic.com>
parents: 4913
diff changeset
3127 def wlock(self, wait=True):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3128 """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
3129 .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
3130
e0c810d0ab69 lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24745
diff changeset
3131 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
3132
e0c810d0ab69 lock: update the docstring with order information
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24745
diff changeset
3133 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
3134 '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
3135 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
3136 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
3137 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
3138 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
3139
26781
1aee2ab0f902 spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents: 26767
diff changeset
3140 # 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
3141 # 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
3142 if wait and (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3143 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
3144 or self.ui.configbool(b'devel', b'check-locks')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3145 ):
29705
41689e293994 develwarn: use the lock helper in local repo
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 29417
diff changeset
3146 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
3147 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
3148
14930
372d9d8b1da4 localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents: 14929
diff changeset
3149 def unlock():
50023
e1cff85484e2 dirstate: introduce a `is_changing_any` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50022
diff changeset
3150 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
3151 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
3152 self.ui.develwarn(msg)
22404
12bc7f06fc41 dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents: 22362
diff changeset
3153 self.dirstate.invalidate()
12bc7f06fc41 dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents: 22362
diff changeset
3154 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
3155 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
3156 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
3157 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
3158 self.dirstate.write(None)
22404
12bc7f06fc41 dirstate: add begin/endparentchange to dirstate
Durham Goode <durham@fb.com>
parents: 22362
diff changeset
3159
50127
ec769cbc1fa2 dirstate: directly manage the dirstate property on localrepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50085
diff changeset
3160 unfi = self.unfiltered()
ec769cbc1fa2 dirstate: directly manage the dirstate property on localrepo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50085
diff changeset
3161 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
3162 del unfi.__dict__['dirstate']
14930
372d9d8b1da4 localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents: 14929
diff changeset
3163
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3164 l = self._lock(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3165 self.vfs,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3166 b"wlock",
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3167 wait,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3168 unlock,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3169 self.invalidatedirstate,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3170 _(b'working directory of %s') % self.origroot,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3171 )
4917
126f527b3ba3 Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents: 4916
diff changeset
3172 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
3173 return l
1531
2ba8bf7defda add localrepo.wlock for protecting the dirstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1516
diff changeset
3174
26488
df2dc5141721 localrepo: add a way to get the current lock if it's held
Siddharth Agarwal <sid0@fb.com>
parents: 26475
diff changeset
3175 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
3176 """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
3177 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
3178 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
3179 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
3180 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
3181 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
3182 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
3183
26489
2a3fc0272e3f localrepo: add a way to get the current wlock if it's held
Siddharth Agarwal <sid0@fb.com>
parents: 26488
diff changeset
3184 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
3185 """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
3186 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
3187
50323
6901916458bd localrepo: add a `currentlock` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50316
diff changeset
3188 def currentlock(self):
6901916458bd localrepo: add a `currentlock` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50316
diff changeset
3189 """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
3190 return self._currentlock(self._lockref)
6901916458bd localrepo: add a `currentlock` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50316
diff changeset
3191
43712
f965b1027fb0 commit: drop unused "vdirs" argument from repo.checkcommitpatterns()
Martin von Zweigbergk <martinvonz@google.com>
parents: 43711
diff changeset
3192 def checkcommitpatterns(self, wctx, match, status, fail):
30332
318a24b52eeb spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents: 30272
diff changeset
3193 """check for commit arguments that aren't committable"""
28814
1f65f291a5b7 localrepo: drop force check from checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28813
diff changeset
3194 if match.isexact() or match.prefix():
28813
d77b790bd8d6 localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28198
diff changeset
3195 matched = set(status.modified + status.added + status.removed)
d77b790bd8d6 localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28198
diff changeset
3196
d77b790bd8d6 localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28198
diff changeset
3197 for f in match.files():
d77b790bd8d6 localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28198
diff changeset
3198 f = self.dirstate.normalize(f)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3199 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
3200 continue
d77b790bd8d6 localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28198
diff changeset
3201 if f in status.deleted:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3202 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
3203 # 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
3204 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
3205 d = f + b'/'
28813
d77b790bd8d6 localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28198
diff changeset
3206 for mf in matched:
d77b790bd8d6 localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28198
diff changeset
3207 if mf.startswith(d):
d77b790bd8d6 localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28198
diff changeset
3208 break
d77b790bd8d6 localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28198
diff changeset
3209 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3210 fail(f, _(b"no match under directory!"))
28813
d77b790bd8d6 localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28198
diff changeset
3211 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
3212 fail(f, _(b"file not tracked!"))
28813
d77b790bd8d6 localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28198
diff changeset
3213
18016
2a393df0f5cc clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18014
diff changeset
3214 @unfilteredmethod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3215 def commit(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3216 self,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3217 text=b"",
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3218 user=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3219 date=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3220 match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3221 force=False,
44023
3216cabffd4a commit: change default `editor` parameter to None
Matt Harbison <matt_harbison@yahoo.com>
parents: 44014
diff changeset
3222 editor=None,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3223 extra=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3224 ):
8515
865e08a7d6b0 localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8503
diff changeset
3225 """Add a new revision to current repository.
865e08a7d6b0 localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8503
diff changeset
3226
8706
25e9c71b89de commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents: 8705
diff changeset
3227 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
3228 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
3229 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
3230 """
26322
2cd19782d2d4 commit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26321
diff changeset
3231 if extra is None:
2cd19782d2d4 commit: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26321
diff changeset
3232 extra = {}
8709
b9e0ddb04c5c commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents: 8707
diff changeset
3233
8715
8c667f4c482e commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents: 8712
diff changeset
3234 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
3235 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
3236
8c667f4c482e commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents: 8712
diff changeset
3237 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
3238 match = matchmod.always()
8715
8c667f4c482e commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents: 8712
diff changeset
3239
8c667f4c482e commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents: 8712
diff changeset
3240 if not force:
8c667f4c482e commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents: 8712
diff changeset
3241 match.bad = fail
8c667f4c482e commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents: 8712
diff changeset
3242
41363
b87a009d1b3b localrepo: use context manager for locks in commit()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41362
diff changeset
3243 # 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
3244 with self.wlock(), self.lock():
8813
db3c1ab0e632 commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents: 8799
diff changeset
3245 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
3246 merge = len(wctx.parents()) > 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
3247
32312
0d6b3572ad92 match: remove ispartial()
Martin von Zweigbergk <martinvonz@google.com>
parents: 32292
diff changeset
3248 if not force and merge and not match.always():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3249 raise error.Abort(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3250 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3251 b'cannot partially commit a merge '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3252 b'(do not specify files or patterns)'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3253 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3254 )
6706
716a1296e182 localrepo: replace dirstate by workingfilectx in filecommit()
Patrick Mezard <pmezard@gmail.com>
parents: 6705
diff changeset
3255
22928
5e5d297ccbd0 localrepo: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22910
diff changeset
3256 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
3257 if force:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3258 status.modified.extend(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3259 status.clean
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3260 ) # mq may commit clean files
3621
7d3d603e7df9 localrepo: factor commit and rawcommit
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3620
diff changeset
3261
8813
db3c1ab0e632 commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents: 8799
diff changeset
3262 # check subrepos
36009
55e8efa2451a subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents: 35896
diff changeset
3263 subs, commitsubs, newstate = subrepoutil.precommit(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3264 self.ui, wctx, status, match, force=force
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3265 )
8813
db3c1ab0e632 commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents: 8799
diff changeset
3266
8709
b9e0ddb04c5c commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents: 8707
diff changeset
3267 # make sure all explicit patterns are matched
28813
d77b790bd8d6 localrepo: refactor commit argument check as checkcommitpatterns
timeless <timeless@mozdev.org>
parents: 28198
diff changeset
3268 if not force:
43712
f965b1027fb0 commit: drop unused "vdirs" argument from repo.checkcommitpatterns()
Martin von Zweigbergk <martinvonz@google.com>
parents: 43711
diff changeset
3269 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
3270
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3271 cctx = context.workingcommitctx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3272 self, status, text, user, date, extra
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3273 )
18659
b946470efed9 localrepo: create context used for actual commit earlier
David Schleimer <dschleimer@fb.com>
parents: 18644
diff changeset
3274
44856
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44852
diff changeset
3275 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
3276 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
3277
25840
25897d778738 commit: mark internal-only option
Matt Mackall <mpm@selenic.com>
parents: 25839
diff changeset
3278 # internal config: ui.allowemptycommit
45088
3e40abe0a170 commit: factor out empty commit check to `basectx.isempty()`
Manuel Jacob <me@manueljacob.de>
parents: 45084
diff changeset
3279 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
3280 b'ui', b'allowemptycommit'
3e40abe0a170 commit: factor out empty commit check to `basectx.isempty()`
Manuel Jacob <me@manueljacob.de>
parents: 45084
diff changeset
3281 ):
44442
6306baa7d19a commit: print debug message when clearing dirstate and wdir clean
Martin von Zweigbergk <martinvonz@google.com>
parents: 44437
diff changeset
3282 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
3283 ms.reset()
8404
a2bc39ade36b commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents: 8403
diff changeset
3284 return None
a2bc39ade36b commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents: 8403
diff changeset
3285
18660
7e6946ed5756 localrepo: use workingctx for validation in commit
David Schleimer <dschleimer@fb.com>
parents: 18659
diff changeset
3286 if merge and cctx.deleted():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3287 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
3288
8496
a21605de1509 commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents: 8481
diff changeset
3289 if editor:
8994
4a1187d3cb00 commit: report modified subrepos in commit editor
Matt Mackall <mpm@selenic.com>
parents: 8954
diff changeset
3290 cctx._text = editor(self, cctx, subs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3291 edited = text != cctx._text
8813
db3c1ab0e632 commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents: 8799
diff changeset
3292
20765
f042d4b263f4 localrepo: save manually edited commit message as soon as possible
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20332
diff changeset
3293 # 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
3294 # (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
3295 # 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
3296 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
3297
16073
b254f827b7a6 subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents: 16030
diff changeset
3298 # 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
3299 if subs:
41688
ec7bba81ebf4 commit: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41676
diff changeset
3300 uipathfn = scmutil.getuipathfn(self)
16073
b254f827b7a6 subrepo: rewrite handling of subrepo state at commit (issue2403)
Matt Mackall <mpm@selenic.com>
parents: 16030
diff changeset
3301 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
3302 sub = wctx.sub(s)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3303 self.ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3304 _(b'committing subrepository %s\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3305 % uipathfn(subrepoutil.subrelpath(sub))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3306 )
11112
4a9bee613737 subrepo: print paths relative to upper repo root for push/pull/commit
Edouard Gomez <ed.gomez@free.fr>
parents: 11063
diff changeset
3307 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
3308 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
3309 subrepoutil.writestate(self, newstate)
8813
db3c1ab0e632 commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents: 8799
diff changeset
3310
10970
3213e8947975 localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10969
diff changeset
3311 p1, p2 = self.dirstate.parents()
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46907
diff changeset
3312 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
3313 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3314 self.hook(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3315 b"precommit", throw=True, parent1=hookp1, parent2=hookp2
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3316 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3317 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
3318 ret = self.commitctx(cctx, True)
57c462db87fd localrepo: use context manager for transaction in commit()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41361
diff changeset
3319 # update bookmarks, dirstate and mergestate
57c462db87fd localrepo: use context manager for transaction in commit()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41361
diff changeset
3320 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
3321 cctx.markcommitted(ret)
57c462db87fd localrepo: use context manager for transaction in commit()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41361
diff changeset
3322 ms.reset()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3323 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
3324 if edited:
48b81d9bca8d commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents: 9934
diff changeset
3325 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
3326 _(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
3327 )
44733
c6d31e659a28 commit: tell user what to do with .hg/last-message.txt
Martin von Zweigbergk <martinvonz@google.com>
parents: 44687
diff changeset
3328 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
3329 _(
c6d31e659a28 commit: tell user what to do with .hg/last-message.txt
Martin von Zweigbergk <martinvonz@google.com>
parents: 44687
diff changeset
3330 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
3331 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
3332 )
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
3333 % 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
3334 )
9935
48b81d9bca8d commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents: 9934
diff changeset
3335 raise
6710
0aa91f69a4c4 localrepo: extract _commitctx() from commit()
Patrick Mezard <pmezard@gmail.com>
parents: 6709
diff changeset
3336
43778
888bd39ed555 lock: pass "success" boolean to _afterlock callbacks
Kyle Lippincott <spectral@google.com>
parents: 43765
diff changeset
3337 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
3338 # 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
3339 # 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
3340 if self.changelog.hasnode(ret):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3341 self.hook(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3342 b"commit", node=hex(ret), parent1=hookp1, parent2=hookp2
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3343 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3344
16680
d0e419b0f7de tag: run commit hook when lock is released (issue3344)
Mads Kiilerich <mads@kiilerich.com>
parents: 16679
diff changeset
3345 self._afterlock(commithook)
10492
0e64d814d7d0 run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents: 10435
diff changeset
3346 return ret
0e64d814d7d0 run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents: 10435
diff changeset
3347
18016
2a393df0f5cc clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18014
diff changeset
3348 @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
3349 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
3350 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
3351
18016
2a393df0f5cc clfilter: rename `unfilteredmeth` to `unfilteredmethod`
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18014
diff changeset
3352 @unfilteredmethod
18310
4499ba5ac35c localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents: 18309
diff changeset
3353 def destroying(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3354 """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
3355 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
3356 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
3357
4499ba5ac35c localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents: 18309
diff changeset
3358 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
3359 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
3360 destroyed is imminent, the repo will be invalidated causing those
4499ba5ac35c localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents: 18309
diff changeset
3361 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
3362 completely.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3363 """
18312
7331ee72f99c localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents: 18311
diff changeset
3364 # 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
3365 # 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
3366 # 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
3367 if '_phasecache' in vars(self):
18312
7331ee72f99c localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents: 18311
diff changeset
3368 self._phasecache.write()
7331ee72f99c localrepo: write the phasecache when destroying nodes
Idan Kamara <idankk86@gmail.com>
parents: 18311
diff changeset
3369
18310
4499ba5ac35c localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents: 18309
diff changeset
3370 @unfilteredmethod
18395
904b7109938e destroyed: drop complex branchcache rebuilt logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18394
diff changeset
3371 def destroyed(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3372 """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
3373 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
3374 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
3375 """
18221
082d6929fd4d localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents: 18219
diff changeset
3376 # When one tries to:
082d6929fd4d localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents: 18219
diff changeset
3377 # 1) destroy nodes thus calling this method (e.g. strip)
082d6929fd4d localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents: 18219
diff changeset
3378 # 2) use phasecache somewhere (e.g. commit)
082d6929fd4d localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents: 18219
diff changeset
3379 #
082d6929fd4d localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents: 18219
diff changeset
3380 # then 2) will fail because the phasecache contains nodes that were
082d6929fd4d localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents: 18219
diff changeset
3381 # removed. We can either remove phasecache from the filecache,
082d6929fd4d localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents: 18219
diff changeset
3382 # causing it to reload next time it is accessed, or simply filter
082d6929fd4d localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents: 18219
diff changeset
3383 # the removed nodes now and write the updated cache.
18757
1c8e0d6ac3b0 localrepo: always write the filtered phasecache when nodes are destroyed (issue3827)
Idan Kamara <idankk86@gmail.com>
parents: 18739
diff changeset
3384 self._phasecache.filterunknown(self)
1c8e0d6ac3b0 localrepo: always write the filtered phasecache when nodes are destroyed (issue3827)
Idan Kamara <idankk86@gmail.com>
parents: 18739
diff changeset
3385 self._phasecache.write()
18221
082d6929fd4d localrepo: filter unknown nodes from the phasecache on destroyed
Idan Kamara <idankk86@gmail.com>
parents: 18219
diff changeset
3386
32264
a72caf0af38e caches: call 'repo.updatecache()' in 'repo.destroyed()'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32263
diff changeset
3387 # 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
3388 self.updatecaches()
18223
6d6d0248530b destroyed: filter unknown before computing branchcache
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18222
diff changeset
3389
9151
f528d1a93491 tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9150
diff changeset
3390 # 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
3391 # 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
3392 # 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
3393 # guarantees that "cachetip == currenttip" (comparing both rev
f528d1a93491 tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9150
diff changeset
3394 # 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
3395
f528d1a93491 tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 9150
diff changeset
3396 # 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
3397 # 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
3398 # 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
3399 # 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
3400 self.invalidate()
17324
9f94358f9f93 localrepo: clear the filecache on _rollback() and destroyed()
Idan Kamara <idankk86@gmail.com>
parents: 17306
diff changeset
3401
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3402 def status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3403 self,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3404 node1=b'.',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3405 node2=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3406 match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3407 ignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3408 clean=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3409 unknown=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3410 listsubrepos=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3411 ):
21596
83bbfb23cb24 localrepo: replace status method with a shim
Sean Farley <sean.michael.farley@gmail.com>
parents: 21591
diff changeset
3412 '''a convenience method that calls node1.status(node2)'''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3413 return self[node1].status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3414 node2, match, ignored, clean, unknown, listsubrepos
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3415 )
2661
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2621
diff changeset
3416
32814
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32730
diff changeset
3417 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
3418 """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
3419 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
3420
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32730
diff changeset
3421 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
3422 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
3423 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
3424
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32730
diff changeset
3425 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
3426 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
3427 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
3428
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32730
diff changeset
3429 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
3430 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
3431 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
3432 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
3433 """
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32730
diff changeset
3434
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32730
diff changeset
3435 # 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
3436 # 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
3437 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
3438
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32730
diff changeset
3439 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
3440 """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
3441 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
3442
2083d1643d69 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com>
parents: 32730
diff changeset
3443 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
3444 """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
3445 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
3446
8796
2bcef677a6c3 localrepo: remove 'closed' argument to heads(...) function
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 8731
diff changeset
3447 def heads(self, start=None):
30875
1791be8a95c5 localrepo: avoid unnecessary conversion from node to rev
Stanislau Hlebik <stash@fb.com>
parents: 30818
diff changeset
3448 if start is None:
30905
6037caa6a2f3 localrepo: cache self.changelog in local variable
Stanislau Hlebik <stash@fb.com>
parents: 30875
diff changeset
3449 cl = self.changelog
30906
72f25e17af9d localrepo: avoid unnecessary sorting
Stanislau Hlebik <stash@fb.com>
parents: 30905
diff changeset
3450 headrevs = reversed(cl.headrevs())
30905
6037caa6a2f3 localrepo: cache self.changelog in local variable
Stanislau Hlebik <stash@fb.com>
parents: 30875
diff changeset
3451 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
3452
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
3453 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
3454 # 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
3455 return sorted(heads, key=self.changelog.rev, reverse=True)
222
87484f627422 make pull work for multiple heads
mpm@selenic.com
parents: 220
diff changeset
3456
8694
ca8d05e1f1d1 localrepo: set heads and branchheads to be closed=False by default
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 8680
diff changeset
3457 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
3458 """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
3459
c295a82a020b localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents: 9423
diff changeset
3460 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
3461 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
3462 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
3463 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
3464 """
6747
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6743
diff changeset
3465 if branch is None:
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6743
diff changeset
3466 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
3467 branches = self.branchmap()
42004
0bd730fbcc2b branchcache: introduce hasbranch()
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 42001
diff changeset
3468 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
3469 return []
7654
816b708f23af store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 7644
diff changeset
3470 # 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
3471 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
3472 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
3473 # 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
3474 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
3475 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
3476 return bheads
4648
8e503fa54d2d Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents: 4635
diff changeset
3477
56
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3478 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
3479 if not nodes:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1597
diff changeset
3480 nodes = [self.changelog.tip()]
56
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3481 b = []
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3482 for n in nodes:
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3483 t = n
14494
1ffeeb91c55d check-code: flag 0/1 used as constant Boolean expression
Martin Geisler <mg@lazybytes.net>
parents: 14482
diff changeset
3484 while True:
56
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3485 p = self.changelog.parents(n)
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46907
diff changeset
3486 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
3487 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
3488 break
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3489 n = p[0]
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3490 return b
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 def between(self, pairs):
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3493 r = []
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3494
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3495 for top, bottom in pairs:
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3496 n, l, i = top, [], 0
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3497 f = 1
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3498
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46907
diff changeset
3499 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
3500 p = self.changelog.parents(n)[0]
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3501 if i == f:
575
7f5ce4bbdd7b More whitespace cleanups
mpm@selenic.com
parents: 566
diff changeset
3502 l.append(n)
56
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3503 f = f * 2
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3504 n = p
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3505 i += 1
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3506
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3507 r.append(l)
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3508
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3509 return r
ad2ea1185f04 Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents: 55
diff changeset
3510
20924
e10000369b47 push: pass a `pushoperation` object to localrepo.checkpush
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20884
diff changeset
3511 def checkpush(self, pushop):
13327
dc11e30b48a3 mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents: 13272
diff changeset
3512 """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
3513 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
3514 command.
dc11e30b48a3 mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents: 13272
diff changeset
3515 """
dc11e30b48a3 mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents: 13272
diff changeset
3516
21043
6c383c871fdb localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20987
diff changeset
3517 @unfilteredpropertycache
6c383c871fdb localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20987
diff changeset
3518 def prepushoutgoinghooks(self):
28876
79b8f052ee51 localrepo: refactor prepushoutgoinghook to take a pushop
Mads Kiilerich <madski@unity3d.com>
parents: 28814
diff changeset
3519 """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
3520 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
3521 """
6c383c871fdb localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20987
diff changeset
3522 return util.hooks()
6c383c871fdb localrepo: introduce "prepushoutgoinghooks" to extend outgoing check easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20987
diff changeset
3523
11368
b9eb005c54ad pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents: 11303
diff changeset
3524 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
3525 try:
24824
0325c0da05df pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24821
diff changeset
3526 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
3527 hookargs = {}
0325c0da05df pushkey: use hook arguments from transaction when one exists
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24821
diff changeset
3528 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
3529 hookargs.update(tr.hookargs)
36400
7b86aa31b004 py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36373
diff changeset
3530 hookargs = pycompat.strkwargs(hookargs)
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43421
diff changeset
3531 hookargs['namespace'] = namespace
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43421
diff changeset
3532 hookargs['key'] = key
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43421
diff changeset
3533 hookargs['old'] = old
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43421
diff changeset
3534 hookargs['new'] = new
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3535 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
3536 except error.HookAbort as exc:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3537 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
3538 if exc.hint:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3539 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
3540 return False
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3541 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
3542 ret = pushkey.push(self, namespace, key, old, new)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3543
43778
888bd39ed555 lock: pass "success" boolean to _afterlock callbacks
Kyle Lippincott <spectral@google.com>
parents: 43765
diff changeset
3544 def runhook(unused_success):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3545 self.hook(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3546 b'pushkey',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3547 namespace=namespace,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3548 key=key,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3549 old=old,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3550 new=new,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3551 ret=ret,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3552 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3553
23648
915ac9403e13 pushkey: run hook after the lock release
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23630
diff changeset
3554 self._afterlock(runhook)
14102
7f45b1911893 pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents: 14076
diff changeset
3555 return ret
11368
b9eb005c54ad pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents: 11303
diff changeset
3556
b9eb005c54ad pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents: 11303
diff changeset
3557 def listkeys(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'prelistkeys', throw=True, namespace=namespace)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3559 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
3560 values = pushkey.list(self, namespace)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3561 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
3562 return values
11368
b9eb005c54ad pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents: 11303
diff changeset
3563
14048
58e58406ed19 wireproto: add test for new optional arg missing on server
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14036
diff changeset
3564 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
3565 '''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
3566 return b"%s %s %s %s %s" % (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3567 one,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3568 two,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3569 pycompat.bytestr(three),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3570 pycompat.bytestr(four),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3571 pycompat.bytestr(five),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3572 )
11368
b9eb005c54ad pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents: 11303
diff changeset
3573
14529
e7a1814854b9 localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents: 14522
diff changeset
3574 def savecommitmessage(self, text):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3575 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
3576 try:
e7a1814854b9 localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents: 14522
diff changeset
3577 fp.write(text)
e7a1814854b9 localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents: 14522
diff changeset
3578 finally:
e7a1814854b9 localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents: 14522
diff changeset
3579 fp.close()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3580 return self.pathto(fp.name[len(self.root) + 1 :])
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3581
46713
bc2519513ae0 sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents: 46711
diff changeset
3582 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
3583 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
3584 # 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
3585 return
46713
bc2519513ae0 sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents: 46711
diff changeset
3586 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
3587
47083
81eb7091c494 sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents: 47078
diff changeset
3588 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
3589 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
3590 ):
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
3591 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
3592 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
3593 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
3594 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
3595 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
3596 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
3597 msg = _(
bc2519513ae0 sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents: 46711
diff changeset
3598 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
3599 )
bc2519513ae0 sidedata-exchange: add `wanted_sidedata` and `sidedata_computers` to repos
Raphaël Gomès <rgomes@octobus.net>
parents: 46711
diff changeset
3600 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
3601 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
3602 msg = _(
81eb7091c494 sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents: 47078
diff changeset
3603 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
3604 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
3605 )
81eb7091c494 sidedata: add a way of replacing an existing sidedata computer
Raphaël Gomès <rgomes@octobus.net>
parents: 47078
diff changeset
3606 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
3607 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
3608 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
3609
14529
e7a1814854b9 localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents: 14522
diff changeset
3610
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
3611 def undoname(fn: bytes) -> bytes:
14266
89e7d35e0ef0 fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents: 13957
diff changeset
3612 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
3613 assert name.startswith(b'journal')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3614 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
3615
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3616
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
3617 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
3618 # 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
3619 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
3620
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
3621 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
3622 if create:
39591
76b58f240821 localrepo: use urllocalpath() for path to create repo too
Martin von Zweigbergk <martinvonz@google.com>
parents: 39590
diff changeset
3623 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
3624
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
3625 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
3626 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
3627
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
3628 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
3629 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
3630 return repo
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3164
diff changeset
3631
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3632
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
3633 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
3634 return True
28164
ad11edefa7c4 localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28163
diff changeset
3635
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3636
39996
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39994
diff changeset
3637 def defaultcreateopts(ui, createopts=None):
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39994
diff changeset
3638 """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
3639
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39994
diff changeset
3640 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
3641 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
3642 """
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39994
diff changeset
3643 createopts = dict(createopts or {})
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39994
diff changeset
3644
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3645 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
3646 # 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
3647 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
3648
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39994
diff changeset
3649 return createopts
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39994
diff changeset
3650
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3651
47441
e33c6dd346e7 localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47440
diff changeset
3652 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
3653 """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
3654
e33c6dd346e7 localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47440
diff changeset
3655 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
3656 depends on the configuration
e33c6dd346e7 localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47440
diff changeset
3657 """
e33c6dd346e7 localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47440
diff changeset
3658 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
3659 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
3660 # 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
3661 # with it.
fc80752dbb24 legacy-revlog: fix requirement computation when cloning legacy repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48666
diff changeset
3662 return target_requirements
47441
e33c6dd346e7 localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47440
diff changeset
3663 createopts = defaultcreateopts(ui, createopts=createopts)
e33c6dd346e7 localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47440
diff changeset
3664 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
3665 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
3666 target_requirements.add(r)
e33c6dd346e7 localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47440
diff changeset
3667
e33c6dd346e7 localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47440
diff changeset
3668 for r in srcrepo.requirements:
e33c6dd346e7 localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47440
diff changeset
3669 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
3670 target_requirements.add(r)
e33c6dd346e7 localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47440
diff changeset
3671 return target_requirements
e33c6dd346e7 localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47440
diff changeset
3672
e33c6dd346e7 localrepo: introduce a clone_requirements function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47440
diff changeset
3673
39996
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39994
diff changeset
3674 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
3675 """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
3676
ad11edefa7c4 localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28163
diff changeset
3677 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
3678 new repositories.
ad11edefa7c4 localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28163
diff changeset
3679 """
39848
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3680
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3681 if b'backend' not in createopts:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3682 raise error.ProgrammingError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3683 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
3684 b'was defaultcreateopts() called?'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3685 )
39996
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39994
diff changeset
3686
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3687 if createopts[b'backend'] != b'revlogv1':
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3688 raise error.Abort(
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 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
3691 b'storage backend: %s'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3692 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3693 % createopts[b'backend']
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3694 )
39996
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39994
diff changeset
3695
46626
ee91966aec0f requirements: add constant for revlog v1 requirement
Raphaël Gomès <rgomes@octobus.net>
parents: 46607
diff changeset
3696 requirements = {requirementsmod.REVLOGV1_REQUIREMENT}
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3697 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
3698 requirements.add(requirementsmod.STORE_REQUIREMENT)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3699 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
3700 requirements.add(requirementsmod.FNCACHE_REQUIREMENT)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3701 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
3702 requirements.add(requirementsmod.DOTENCODE_REQUIREMENT)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3703
44382
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44363
diff changeset
3704 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
3705 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
3706 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
3707 engine = util.compengines[compengine]
3aa78f2aea48 revlog-compression: fix computation of engine availability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46819
diff changeset
3708 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
3709 break
44382
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44363
diff changeset
3710 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3711 raise error.Abort(
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'compression engines %s defined by '
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3714 b'format.revlog-compression not available'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3715 )
44382
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44363
diff changeset
3716 % b', '.join(b'"%s"' % e for e in compengines),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3717 hint=_(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3718 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
3719 b'compression engines'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3720 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3721 )
30818
4c0a5a256ae8 localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30634
diff changeset
3722
4c0a5a256ae8 localrepo: experimental support for non-zlib revlog compression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30634
diff changeset
3723 # 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
3724 if compengine == b'zstd':
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3725 requirements.add(b'revlog-compression-zstd')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3726 elif compengine != b'zlib':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3727 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
3728
28164
ad11edefa7c4 localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28163
diff changeset
3729 if scmutil.gdinitconfig(ui):
46627
f4c325bf80fc requirements: also add a generaldelta constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46626
diff changeset
3730 requirements.add(requirementsmod.GENERALDELTA_REQUIREMENT)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3731 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
3732 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
3733
48674
f7086f6173f8 dirstate-v2: rename the configuration to enable the format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48295
diff changeset
3734 # 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
3735 # 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
3736 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
3737 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
3738
43137
81efc4a295e7 sidedatacopies: add a new requirement for storing copies into sidedata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43117
diff changeset
3739 # 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
3740 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
3741 requirements.add(requirementsmod.CHANGELOGV2_REQUIREMENT)
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
3742 requirements.add(requirementsmod.COPIESSDC_REQUIREMENT)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3743 if ui.configbool(b'experimental', b'treemanifest'):
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
3744 requirements.add(requirementsmod.TREEMANIFEST_REQUIREMENT)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3745
47263
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47260
diff changeset
3746 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
3747 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
3748 requirements.add(requirementsmod.CHANGELOGV2_REQUIREMENT)
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47260
diff changeset
3749
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3750 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
3751 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
3752 requirements.discard(requirementsmod.REVLOGV1_REQUIREMENT)
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
3753 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
3754 # 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
3755 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
3756 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
3757
49451
0c70d888a484 phase: introduce a dedicated requirement for the `archived` phase
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49355
diff changeset
3758 # 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
3759 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
3760 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
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'narrowfiles'):
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
3763 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
3764
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3765 if createopts.get(b'lfs'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3766 requirements.add(b'lfs')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3767
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3768 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
3769 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
3770
50759
f0ae403bf704 configitems: use standard "dynamicdefault" approach in edge case
Raphaël Gomès <rgomes@octobus.net>
parents: 50699
diff changeset
3771 # 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
3772 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
3773 if ui.configbool(
f0ae403bf704 configitems: use standard "dynamicdefault" approach in edge case
Raphaël Gomès <rgomes@octobus.net>
parents: 50699
diff changeset
3774 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
3775 ):
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
3776 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
3777
45483
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45464
diff changeset
3778 # 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
3779 # requirement
46334
4b0192f592cf share: move share safe functionality out of experimental
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46333
diff changeset
3780 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
3781 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
3782
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
3783 # 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
3784 # 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
3785 #
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 # [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
3787 # working copy)
48465
7964a2dbde12 share: move the requirement initialisation code around
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48295
diff changeset
3788 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
3789 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
3790
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 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
3792 # 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
3793 # 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
3794 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
3795 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
3796 # 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
3797 # 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
3798 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
3799 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
3800 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
3801 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
3802 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
3803 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
3804 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
3805 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
3806 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
3807
48465
7964a2dbde12 share: move the requirement initialisation code around
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48295
diff changeset
3808 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
3809 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
3810 else:
7964a2dbde12 share: move the requirement initialisation code around
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48295
diff changeset
3811 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
3812
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
3813 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
3814 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
3815 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
3816 hint = _(
bc2ecf08ae04 localrepo: byteify the requirements.DIRSTATE_TRACKED_HINT_Vx warning message
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
3817 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
3818 )
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
3819 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
3820 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
3821 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
3822 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
3823
28164
ad11edefa7c4 localrepo: move new repo requirements into standalone function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28163
diff changeset
3824 return requirements
39548
7ce9dea3a14a localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39546
diff changeset
3825
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3826
45300
dc457177dbc1 localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45204
diff changeset
3827 def checkrequirementscompat(ui, requirements):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45846
diff changeset
3828 """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
3829
dc457177dbc1 localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45204
diff changeset
3830 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
3831 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
3832
dc457177dbc1 localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45204
diff changeset
3833 dropped = set()
dc457177dbc1 localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45204
diff changeset
3834
46637
ab58098bebed requirements: also add a store constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46636
diff changeset
3835 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
3836 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
3837 ui.warn(
dc457177dbc1 localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45204
diff changeset
3838 _(
dc457177dbc1 localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45204
diff changeset
3839 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
3840 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
3841 b'\'format.usestore\' config\n'
dc457177dbc1 localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45204
diff changeset
3842 )
dc457177dbc1 localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45204
diff changeset
3843 )
48599
dfbfa802876b requirements: move "bookmark in store" requirements in the right module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48466
diff changeset
3844 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
3845
45386
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45373
diff changeset
3846 if (
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45373
diff changeset
3847 requirementsmod.SHARED_REQUIREMENT in requirements
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45373
diff changeset
3848 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
3849 ):
45301
dc283bc7e033 localrepo: abort creating a shared repo if the source does not have store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45300
diff changeset
3850 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
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 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
3853 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
3854 )
dc283bc7e033 localrepo: abort creating a shared repo if the source does not have store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45300
diff changeset
3855 )
dc283bc7e033 localrepo: abort creating a shared repo if the source does not have store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45300
diff changeset
3856
45483
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45464
diff changeset
3857 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
3858 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
3859 msg = _(
46334
4b0192f592cf share: move share safe functionality out of experimental
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46333
diff changeset
3860 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
3861 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
3862 b" config\n"
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45464
diff changeset
3863 )
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
3864 ui.warn(msg)
45483
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45464
diff changeset
3865 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
3866
45300
dc457177dbc1 localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45204
diff changeset
3867 return dropped
dc457177dbc1 localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45204
diff changeset
3868
dc457177dbc1 localrepo: only use 'bookmarksinstore' requirement if we have 'store'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45204
diff changeset
3869
39549
089fc0db0954 hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39548
diff changeset
3870 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
3871 """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
3872
089fc0db0954 hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39548
diff changeset
3873 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
3874 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
3875
089fc0db0954 hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39548
diff changeset
3876 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
3877 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
3878 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
3879 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
3880
089fc0db0954 hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39548
diff changeset
3881 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
3882 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
3883 """
39848
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3884 known = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3885 b'backend',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3886 b'lfs',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3887 b'narrowfiles',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3888 b'sharedrepo',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3889 b'sharedrelative',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3890 b'shareditems',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3891 b'shallowfilestore',
39848
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3892 }
39551
261f1e8dc300 localrepo: add requirement when narrow files creation option present
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
3893
261f1e8dc300 localrepo: add requirement when narrow files creation option present
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
3894 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
3895
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3896
49571
8fa3f7c3a9ad typing: add basic type hints to localrepo.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 49493
diff changeset
3897 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
3898 """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
3899
39590
e471cb2852ea localrepo: move check for existing repo into createrepository()
Martin von Zweigbergk <martinvonz@google.com>
parents: 39580
diff changeset
3900 ``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
3901 ``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
3902 ``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
3903 (incompatible with ``createopts``)
39848
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3904
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3905 The following keys for ``createopts`` are recognized:
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3906
39996
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39994
diff changeset
3907 backend
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39994
diff changeset
3908 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
3909 lfs
6637b079ae45 lfs: autoload the extension when cloning from repo with lfs enabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 40296
diff changeset
3910 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
3911 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
3912 narrowfiles
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3913 Set up repository to support narrow file storage.
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3914 sharedrepo
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3915 Repository object from which storage should be shared.
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3916 sharedrelative
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3917 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
3918 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
3919 is stored as an absolute path.
39849
d3d4b4b5f725 localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39848
diff changeset
3920 shareditems
d3d4b4b5f725 localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39848
diff changeset
3921 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
3922 shallowfilestore
7e3b6c4f01a2 localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40360
diff changeset
3923 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
3924 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
3925 """
47440
e43e68624dfb createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47421
diff changeset
3926
e43e68624dfb createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47421
diff changeset
3927 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
3928 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
3929 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
3930 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
3931 createopts = {}
e43e68624dfb createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47421
diff changeset
3932 else:
e43e68624dfb createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47421
diff changeset
3933 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
3934
e43e68624dfb createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47421
diff changeset
3935 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
3936
e43e68624dfb createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47421
diff changeset
3937 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
3938 raise error.ProgrammingError(
e43e68624dfb createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47421
diff changeset
3939 b'filterknowncreateopts() did not return a dict'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3940 )
47440
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 if unknownopts:
e43e68624dfb createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47421
diff changeset
3943 raise error.Abort(
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'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
3946 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
3947 )
e43e68624dfb createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47421
diff changeset
3948 % 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
3949 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
3950 )
e43e68624dfb createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47421
diff changeset
3951
e43e68624dfb createrepository: allow to directly pass the target requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47421
diff changeset
3952 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
3953 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
3954
39590
e471cb2852ea localrepo: move check for existing repo into createrepository()
Martin von Zweigbergk <martinvonz@google.com>
parents: 39580
diff changeset
3955 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
3956
7ce9dea3a14a localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39546
diff changeset
3957 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
3958 if hgvfs.exists():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3959 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
3960
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3961 if b'sharedrepo' in createopts:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3962 sharedpath = createopts[b'sharedrepo'].sharedpath
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3963
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3964 if createopts.get(b'sharedrelative'):
39848
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3965 try:
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3966 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
3967 sharedpath = util.pconvert(sharedpath)
39848
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3968 except (IOError, ValueError) as e:
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3969 # 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
3970 # on each path.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3971 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3972 _(b'cannot calculate relative path'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3973 hint=stringutil.forcebytestr(e),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3974 )
39848
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
3975
39847
b504ff813c4f localrepo: validate directories before creating any
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39846
diff changeset
3976 if not wdirvfs.exists():
b504ff813c4f localrepo: validate directories before creating any
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39846
diff changeset
3977 wdirvfs.makedirs()
b504ff813c4f localrepo: validate directories before creating any
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39846
diff changeset
3978
39548
7ce9dea3a14a localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39546
diff changeset
3979 hgvfs.makedir(notindexed=True)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
3980 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
3981 hgvfs.mkdir(b'cache')
40794
d5622dfe4ba3 cache: create `wcache` directory at init time
Boris Feld <boris.feld@octobus.net>
parents: 40793
diff changeset
3982 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
3983
46637
ab58098bebed requirements: also add a store constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46636
diff changeset
3984 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
3985 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
3986 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
3987
7ce9dea3a14a localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39546
diff changeset
3988 # 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
3989 # 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
3990 # 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
3991 # 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
3992 # 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
3993 #
46406
95054317e172 revlog: use a less probable revlog version for backwards compatibility
Raphaël Gomès <rgomes@octobus.net>
parents: 46372
diff changeset
3994 # 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
3995 # such old clients.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3996 hgvfs.append(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
3997 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
3998 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
3999 b'layout',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
4000 )
39548
7ce9dea3a14a localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39546
diff changeset
4001
45483
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45464
diff changeset
4002 # 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
4003 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
4004 # write working copy ones
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45464
diff changeset
4005 scmutil.writerequires(hgvfs, wcreq)
d252f51ab032 share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45464
diff changeset
4006 # 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
4007 # 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
4008 # 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
4009 # 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
4010 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
4011 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
4012 scmutil.writerequires(storevfs, storereq)
39606
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39591
diff changeset
4013
39848
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
4014 # 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
4015 if b'sharedrepo' in createopts:
39848
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
4016 hgvfs.write(b'sharedpath', sharedpath)
4ece3cdfd907 localrepo: support shared repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39847
diff changeset
4017
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4018 if createopts.get(b'shareditems'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
4019 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
4020 hgvfs.write(b'shared', shared)
d3d4b4b5f725 localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39848
diff changeset
4021
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
4022
39606
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39591
diff changeset
4023 def poisonrepository(repo):
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39591
diff changeset
4024 """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
4025 # 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
4026 repo.close()
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 # 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
4029 # 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
4030 #
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39591
diff changeset
4031 # 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
4032 # 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
4033 class poisonedrepository:
39606
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39591
diff changeset
4034 def __getattribute__(self, item):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43421
diff changeset
4035 if item == 'close':
39606
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39591
diff changeset
4036 return object.__getattribute__(self, item)
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39591
diff changeset
4037
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
4038 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
4039 b'repo instances should not be used after unshare'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43030
diff changeset
4040 )
39606
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 def close(self):
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39591
diff changeset
4043 pass
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39591
diff changeset
4044
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39591
diff changeset
4045 # 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
4046 # 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
4047 object.__setattr__(repo, '__class__', poisonedrepository)