Mercurial > public > mercurial-scm > hg
annotate mercurial/scmutil.py @ 48687:f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
It's time to make this part of core Mercurial obsolescence-aware.
Not considering obsolete revisions when computing heads is clearly what
Mercurial should do. But there are a couple of small issues:
- Let's say tip of the repo is obsolete. There are two ways of finding tiprev
for branchcache (both are in use): looking at input data for update() and
looking at computed heads after update(). Previously, repo tip would be
tiprev of the branchcache. With this patch, an obsolete revision can no
longer be tiprev. And depending on what way we use for finding tiprev (input
data vs computed heads) we'll get a different result. This is relevant when
recomputing cache key from cache contents, and may lead to updating cache for
obsolete revisions multiple times (not from scratch, because it still would
be considered valid for a subset of revisions in the repo).
- If all commits on a branch are obsolete, the branchcache will include that
branch, but the list of heads will be empty (that's why there's now `if not
heads` when recomputing tiprev/tipnode from cache contents). Having an entry
for every branch is currently required for notify extension (and
test-notify.t to pass), because notify doesn't handle revsets in its
subscription config very well and will throw an error if e.g. a branch
doesn't exist.
- Cloning static HTTP repos may try to stat() a non-existent obsstore file. The
issue is that we now care about obsolescence during clone, but statichttpvfs
doesn't implement a stat method, so a regular vfs.stat() is used, and it
assumes that file is local and calls os.stat(). During a clone, we're trying
to stat() .hg/store/obsstore, but in static HTTP case we provide a literal
URL to the obsstore file on the remote as if it were a local file path. On
windows it actually results in a failure in test-static-http.t.
The first issue is going to be addressed in a series dedicated to making sure
branchcache is properly and timely written on disk (it wasn't perfect even
before this patch, but there aren't enough tests to demonstrate that). The
second issue will be addressed in a future patch for notify extension that will
make it not raise an exception if a branch doesn't exist. And the third one was
partially addressed in the previous patch in this series and will be properly
fixed in a future patch when this series is accepted.
filteredhash() grows a keyword argument to make sure that branchcache is also
invalidated when there are new obsolete revisions in its repo view. This way
the on-disk cache format is unchanged and compatible between versions (although
it will obviously be recomputed when switching versions before/after this patch
and the repo has obsolete revisions).
There's one test that uses plain `hg up` without arguments while updated to a
pruned commit. To make this test pass, simply return current working directory
parent. Later in this series this code will be replaced by what prune command
does: updating to the closest non-obsolete ancestor.
Test changes:
test-branch-change.t: update branch head and cache update message. The head of
default listed in hg heads is changed because revision 2 was rewritten as 7,
and 1 is the closest ancestor on the same branch, so it's the head of default
now.
The cache invalidation message appears now because of the cache hash change,
since we're now accounting for obsolete revisions. Here's some context:
"served.hidden" repo filter means everything is visible (no filtered
revisions), so before this series branch2-served.hidden file would not contain
any cache hash, only revnum and node. Now it also has a hash when there are
obsolete changesets in the repo. The command that the message appears for is
changing branch of 5 and 6, which are now obsolete, so the cache hash changes.
In general, when cache is simply out-of-date, it can be updated using the old
version as a base. But if cache hash differs, then the cache for that
particular repo filter is recomputed (at least with the current
implementation). This is what happens here.
test-obsmarker-template.t: the pull reports 2 heads changed, but after that the
repo correctly sees only 1. The new message could be better, but it's still an
improvement over the previous one where hg pull suggested merging with an
obsolete revision.
test-obsolete.t: we can see these revisions in hg log --hidden, but they
shouldn't be considered heads even with --hidden.
test-rebase-obsolete{,2}.t: there were new heads created previously after
making new orphan changesets, but they weren't detected. Now we are properly
detecting and reporting them.
test-rebase-obsolete4.t: there's only one head now because the other head is
pruned and was falsely reported before.
test-static-http.t: add obsstore to the list of requested files. This file
doesn't exist on the remotes, but clients want it anyway (they get 404). This
is fine, because there are other nonexistent files that clients request, like
.hg/bookmarks or .hg/cache/tags2-served.
Differential Revision: https://phab.mercurial-scm.org/D12097
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Fri, 07 Jan 2022 11:53:23 +0300 |
parents | c51408b92b88 |
children | c7e675848027 |
rev | line source |
---|---|
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
1 # scmutil.py - Mercurial core utility functions |
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
2 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46672
diff
changeset
|
3 # Copyright Olivia Mackall <olivia@selenic.com> |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
4 # |
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
7 |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
8 from __future__ import absolute_import |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
9 |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
10 import errno |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
11 import glob |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
12 import os |
41650
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41649
diff
changeset
|
13 import posixpath |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
14 import re |
34461
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
15 import subprocess |
33252
53b3a1968aa6
obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33246
diff
changeset
|
16 import weakref |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
17 |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
18 from .i18n import _ |
32658
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
19 from .node import ( |
37528
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
20 bin, |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
21 hex, |
39894
d739f423bf06
repo: look up nullrev context by revnum, not symbolic name
Martin von Zweigbergk <martinvonz@google.com>
parents:
39891
diff
changeset
|
22 nullrev, |
34327
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
23 short, |
32658
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
24 wdirrev, |
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
25 ) |
43089
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
26 from .pycompat import getattr |
43654
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
27 from .thirdparty import attr |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
28 from . import ( |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
29 copies as copiesmod, |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
30 encoding, |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
31 error, |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
32 match as matchmod, |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
33 obsolete, |
33252
53b3a1968aa6
obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33246
diff
changeset
|
34 obsutil, |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
35 pathutil, |
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
36 phases, |
39226
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
37 policy, |
30305
af7c60988f6e
py3: make scmutil.rcpath() return bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30109
diff
changeset
|
38 pycompat, |
45482
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
39 requirements as requirementsmod, |
31024
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30639
diff
changeset
|
40 revsetlang, |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
41 similar, |
39897
a477679f6323
pullreport: skip filtered revs instead of obsolete ones
Boris Feld <boris.feld@octobus.net>
parents:
39894
diff
changeset
|
42 smartset, |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
43 url, |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
44 util, |
34543
6fad8059a970
scmutil: handle conflicting files and dirs in origbackuppath
Mark Thomas <mbthomas@fb.com>
parents:
34542
diff
changeset
|
45 vfs, |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
46 ) |
18690
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
18678
diff
changeset
|
47 |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36836
diff
changeset
|
48 from .utils import ( |
44060
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
44038
diff
changeset
|
49 hashutil, |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37094
diff
changeset
|
50 procutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36836
diff
changeset
|
51 stringutil, |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36836
diff
changeset
|
52 ) |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36836
diff
changeset
|
53 |
34645 | 54 if pycompat.iswindows: |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
55 from . import scmwindows as scmplatform |
18690
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
18678
diff
changeset
|
56 else: |
27482
dde3da2246f1
scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27093
diff
changeset
|
57 from . import scmposix as scmplatform |
18690
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
18678
diff
changeset
|
58 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43365
diff
changeset
|
59 parsers = policy.importmod('parsers') |
44013
992f0d6e7f33
rust-index: use the new method in shortesthexnodeidprefix
Georges Racinet <georges.racinet@octobus.net>
parents:
44000
diff
changeset
|
60 rustrevlog = policy.importrust('revlog') |
39226
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
61 |
30314
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30309
diff
changeset
|
62 termsize = scmplatform.termsize |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
63 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
64 |
43654
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
65 @attr.s(slots=True, repr=False) |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
66 class status(object): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
67 """Struct with a list of files per status. |
43654
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
68 |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
69 The 'deleted', 'unknown' and 'ignored' properties are only |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
70 relevant to the working copy. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
71 """ |
22913
cb4449921a1d
status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22816
diff
changeset
|
72 |
43775
b5f183eedd98
status: fix default value of status struct
Yuya Nishihara <yuya@tcha.org>
parents:
43727
diff
changeset
|
73 modified = attr.ib(default=attr.Factory(list)) |
b5f183eedd98
status: fix default value of status struct
Yuya Nishihara <yuya@tcha.org>
parents:
43727
diff
changeset
|
74 added = attr.ib(default=attr.Factory(list)) |
b5f183eedd98
status: fix default value of status struct
Yuya Nishihara <yuya@tcha.org>
parents:
43727
diff
changeset
|
75 removed = attr.ib(default=attr.Factory(list)) |
b5f183eedd98
status: fix default value of status struct
Yuya Nishihara <yuya@tcha.org>
parents:
43727
diff
changeset
|
76 deleted = attr.ib(default=attr.Factory(list)) |
b5f183eedd98
status: fix default value of status struct
Yuya Nishihara <yuya@tcha.org>
parents:
43727
diff
changeset
|
77 unknown = attr.ib(default=attr.Factory(list)) |
b5f183eedd98
status: fix default value of status struct
Yuya Nishihara <yuya@tcha.org>
parents:
43727
diff
changeset
|
78 ignored = attr.ib(default=attr.Factory(list)) |
b5f183eedd98
status: fix default value of status struct
Yuya Nishihara <yuya@tcha.org>
parents:
43727
diff
changeset
|
79 clean = attr.ib(default=attr.Factory(list)) |
22913
cb4449921a1d
status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22816
diff
changeset
|
80 |
43654
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
81 def __iter__(self): |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
82 yield self.modified |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
83 yield self.added |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
84 yield self.removed |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
85 yield self.deleted |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
86 yield self.unknown |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
87 yield self.ignored |
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
88 yield self.clean |
22913
cb4449921a1d
status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22816
diff
changeset
|
89 |
43654
c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
Augie Fackler <augie@google.com>
parents:
43633
diff
changeset
|
90 def __repr__(self): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
91 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
92 r'<status modified=%s, added=%s, removed=%s, deleted=%s, ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
93 r'unknown=%s, ignored=%s, clean=%s>' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
94 ) % tuple(pycompat.sysstr(stringutil.pprint(v)) for v in self) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
95 |
22913
cb4449921a1d
status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22816
diff
changeset
|
96 |
20392
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
97 def itersubrepos(ctx1, ctx2): |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
98 """find subrepos in ctx1 or ctx2""" |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
99 # Create a (subpath, ctx) mapping where we prefer subpaths from |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
100 # ctx1. The subpaths from ctx2 are important when the .hgsub file |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
101 # has been modified (in ctx2) but not yet committed (in ctx1). |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
102 subpaths = dict.fromkeys(ctx2.substate, ctx2) |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
103 subpaths.update(dict.fromkeys(ctx1.substate, ctx1)) |
25418
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
104 |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
105 missing = set() |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
106 |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
107 for subpath in ctx2.substate: |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
108 if subpath not in ctx1.substate: |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
109 del subpaths[subpath] |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
110 missing.add(subpath) |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
111 |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43089
diff
changeset
|
112 for subpath, ctx in sorted(pycompat.iteritems(subpaths)): |
20392
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
113 yield subpath, ctx.sub(subpath) |
d4f804caa0ed
itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents:
20364
diff
changeset
|
114 |
25418
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
115 # Yield an empty subrepo based on ctx1 for anything only in ctx2. That way, |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
116 # status and diff will have an accurate result when it does |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
117 # 'sub.{status|diff}(rev2)'. Otherwise, the ctx2 subrepo is compared |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
118 # against itself. |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
119 for subpath in missing: |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
120 yield subpath, ctx2.nullsub(subpath, ctx1) |
c0995cd8ff6f
scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25386
diff
changeset
|
121 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
122 |
17248
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
123 def nochangesfound(ui, repo, excluded=None): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
124 """Report no changes for push/pull, excluded is None or a list of |
17248
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
125 nodes excluded from the push/pull. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
126 """ |
17248
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
127 secretlist = [] |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
128 if excluded: |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
129 for n in excluded: |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
130 ctx = repo[n] |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
131 if ctx.phase() >= phases.secret and not ctx.extinct(): |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
132 secretlist.append(n) |
6ffb35b2284c
discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents:
17201
diff
changeset
|
133 |
15993
0b05e0bfdc1c
scmutil: unify some 'no changes found' messages
Matt Mackall <mpm@selenic.com>
parents:
15797
diff
changeset
|
134 if secretlist: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
135 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
136 _(b"no changes found (ignored %d secret changesets)\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
137 % len(secretlist) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
138 ) |
15993
0b05e0bfdc1c
scmutil: unify some 'no changes found' messages
Matt Mackall <mpm@selenic.com>
parents:
15797
diff
changeset
|
139 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
140 ui.status(_(b"no changes found\n")) |
15993
0b05e0bfdc1c
scmutil: unify some 'no changes found' messages
Matt Mackall <mpm@selenic.com>
parents:
15797
diff
changeset
|
141 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
142 |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
143 def callcatch(ui, func): |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
144 """call func() with global exception handling |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
145 |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
146 return func() if no exception happens. otherwise do some error handling |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
147 and return an exit code accordingly. does not handle all exceptions. |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
148 """ |
45826
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
149 coarse_exit_code = -1 |
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
150 detailed_exit_code = -1 |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
151 try: |
32041
38963a53ab0d
dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents:
31951
diff
changeset
|
152 try: |
38963a53ab0d
dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents:
31951
diff
changeset
|
153 return func() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
154 except: # re-raises |
32041
38963a53ab0d
dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents:
31951
diff
changeset
|
155 ui.traceback() |
38963a53ab0d
dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents:
31951
diff
changeset
|
156 raise |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
157 # Global exception handling, alphabetically |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
158 # Mercurial-specific first, followed by built-in and library exceptions |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
159 except error.LockHeld as inst: |
45828
e0dbfbd4062c
errors: set detailed exit code to 20 for locking errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
45827
diff
changeset
|
160 detailed_exit_code = 20 |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
161 if inst.errno == errno.ETIMEDOUT: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
162 reason = _(b'timed out waiting for lock held by %r') % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
163 pycompat.bytestr(inst.locker) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
164 ) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
165 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
166 reason = _(b'lock held by %r') % inst.locker |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
167 ui.error( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
168 _(b"abort: %s: %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
169 % (inst.desc or stringutil.forcebytestr(inst.filename), reason) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
170 ) |
32088
0d892d820a51
lock: avoid unintentional lock acquisition at failure of readlock
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32041
diff
changeset
|
171 if not inst.locker: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
172 ui.error(_(b"(lock might be very busy)\n")) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
173 except error.LockUnavailable as inst: |
45828
e0dbfbd4062c
errors: set detailed exit code to 20 for locking errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
45827
diff
changeset
|
174 detailed_exit_code = 20 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
175 ui.error( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
176 _(b"abort: could not lock %s: %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
177 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
178 inst.desc or stringutil.forcebytestr(inst.filename), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
179 encoding.strtolocal(inst.strerror), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
180 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
181 ) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
182 except error.RepoError as inst: |
48368
8c4881c07f57
errors: use detailed exit code for RepoLookupError
Martin von Zweigbergk <martinvonz@google.com>
parents:
48367
diff
changeset
|
183 if isinstance(inst, error.RepoLookupError): |
8c4881c07f57
errors: use detailed exit code for RepoLookupError
Martin von Zweigbergk <martinvonz@google.com>
parents:
48367
diff
changeset
|
184 detailed_exit_code = 10 |
45906
95c4cca641f6
errors: remove trailing "!" from some error messages for consistency
Martin von Zweigbergk <martinvonz@google.com>
parents:
45895
diff
changeset
|
185 ui.error(_(b"abort: %s\n") % inst) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
186 if inst.hint: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
187 ui.error(_(b"(%s)\n") % inst.hint) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
188 except error.ResponseError as inst: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
189 ui.error(_(b"abort: %s") % inst.args[0]) |
36661
b76248e51605
scmutil: avoid using basestring and add explicit handling of unicodes
Augie Fackler <augie@google.com>
parents:
36658
diff
changeset
|
190 msg = inst.args[1] |
b76248e51605
scmutil: avoid using basestring and add explicit handling of unicodes
Augie Fackler <augie@google.com>
parents:
36658
diff
changeset
|
191 if isinstance(msg, type(u'')): |
b76248e51605
scmutil: avoid using basestring and add explicit handling of unicodes
Augie Fackler <augie@google.com>
parents:
36658
diff
changeset
|
192 msg = pycompat.sysbytes(msg) |
46672
aa2e38147e8b
wireprotov1peer: don't raise internal errors in some cases
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
46417
diff
changeset
|
193 if msg is None: |
aa2e38147e8b
wireprotov1peer: don't raise internal errors in some cases
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
46417
diff
changeset
|
194 ui.error(b"\n") |
aa2e38147e8b
wireprotov1peer: don't raise internal errors in some cases
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
46417
diff
changeset
|
195 elif not isinstance(msg, bytes): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
196 ui.error(b" %r\n" % (msg,)) |
36695
c442c4a92ae8
scmutil: fix oversight in b76248e51605c6 where I forgot to use msg
Augie Fackler <augie@google.com>
parents:
36661
diff
changeset
|
197 elif not msg: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
198 ui.error(_(b" empty string\n")) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
199 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
200 ui.error(b"\n%r\n" % pycompat.bytestr(stringutil.ellipsis(msg))) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
201 except error.CensoredNodeError as inst: |
45906
95c4cca641f6
errors: remove trailing "!" from some error messages for consistency
Martin von Zweigbergk <martinvonz@google.com>
parents:
45895
diff
changeset
|
202 ui.error(_(b"abort: file censored %s\n") % inst) |
32659
7b17f9de6d3e
revlog: map rev(wdirid) to WdirUnsupported exception
Yuya Nishihara <yuya@tcha.org>
parents:
32658
diff
changeset
|
203 except error.WdirUnsupported: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
204 ui.error(_(b"abort: working directory revision cannot be specified\n")) |
47293
7a769ac49637
errors: catch the new Error class in scmutil and chgserver
Martin von Zweigbergk <martinvonz@google.com>
parents:
47291
diff
changeset
|
205 except error.Error as inst: |
47289
33c0c25d0b0f
errors: let each Abort subclass define its error code
Martin von Zweigbergk <martinvonz@google.com>
parents:
47128
diff
changeset
|
206 if inst.detailed_exit_code is not None: |
33c0c25d0b0f
errors: let each Abort subclass define its error code
Martin von Zweigbergk <martinvonz@google.com>
parents:
47128
diff
changeset
|
207 detailed_exit_code = inst.detailed_exit_code |
47291
d9c71bbe20f7
errors: make InterventionRequired subclass Abort
Martin von Zweigbergk <martinvonz@google.com>
parents:
47289
diff
changeset
|
208 if inst.coarse_exit_code is not None: |
d9c71bbe20f7
errors: make InterventionRequired subclass Abort
Martin von Zweigbergk <martinvonz@google.com>
parents:
47289
diff
changeset
|
209 coarse_exit_code = inst.coarse_exit_code |
45885
600aec73f309
errors: format "abort: " text in a new Abort.format() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
45884
diff
changeset
|
210 ui.error(inst.format()) |
45825
8f07f5a9c3de
worker: raise exception instead of calling sys.exit() with child's code
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
211 except error.WorkerError as inst: |
8f07f5a9c3de
worker: raise exception instead of calling sys.exit() with child's code
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
212 # Don't print a message -- the worker already should have |
8f07f5a9c3de
worker: raise exception instead of calling sys.exit() with child's code
Martin von Zweigbergk <martinvonz@google.com>
parents:
45720
diff
changeset
|
213 return inst.status_code |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
214 except ImportError as inst: |
45906
95c4cca641f6
errors: remove trailing "!" from some error messages for consistency
Martin von Zweigbergk <martinvonz@google.com>
parents:
45895
diff
changeset
|
215 ui.error(_(b"abort: %s\n") % stringutil.forcebytestr(inst)) |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36836
diff
changeset
|
216 m = stringutil.forcebytestr(inst).split()[-1] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
217 if m in b"mpatch bdiff".split(): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
218 ui.error(_(b"(did you forget to compile extensions?)\n")) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
219 elif m in b"zlib".split(): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
220 ui.error(_(b"(is your Python install correct?)\n")) |
45838
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
221 except util.urlerr.httperror as inst: |
45839
ebee234d952a
errors: set detailed exit code to 100 for some remote errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
45838
diff
changeset
|
222 detailed_exit_code = 100 |
45838
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
223 ui.error(_(b"abort: %s\n") % stringutil.forcebytestr(inst)) |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
224 except util.urlerr.urlerror as inst: |
45839
ebee234d952a
errors: set detailed exit code to 100 for some remote errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
45838
diff
changeset
|
225 detailed_exit_code = 100 |
45838
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
226 try: # usually it is in the form (errno, strerror) |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
227 reason = inst.reason.args[1] |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
228 except (AttributeError, IndexError): |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
229 # it might be anything, for example a string |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
230 reason = inst.reason |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
231 if isinstance(reason, pycompat.unicode): |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
232 # SSLError of Python 2.7.9 contains a unicode |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
233 reason = encoding.unitolocal(reason) |
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
234 ui.error(_(b"abort: error: %s\n") % stringutil.forcebytestr(reason)) |
41421
f83b230b7fb3
dispatch: unify handler of IOError and OSError
Yuya Nishihara <yuya@tcha.org>
parents:
41420
diff
changeset
|
235 except (IOError, OSError) as inst: |
45838
ae00e170f2d1
errors: catch urllib errors specifically instead of using safehasattr()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45828
diff
changeset
|
236 if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
237 util.safehasattr(inst, b"args") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
238 and inst.args |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
239 and inst.args[0] == errno.EPIPE |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
240 ): |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
241 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
242 elif getattr(inst, "strerror", None): # common IOError or OSError |
41420
b6673e9bdcf6
dispatch: quote filename in IOError as well
Yuya Nishihara <yuya@tcha.org>
parents:
41419
diff
changeset
|
243 if getattr(inst, "filename", None) is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
244 ui.error( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
245 _(b"abort: %s: '%s'\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
246 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
247 encoding.strtolocal(inst.strerror), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
248 stringutil.forcebytestr(inst.filename), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
249 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
250 ) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
251 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
252 ui.error(_(b"abort: %s\n") % encoding.strtolocal(inst.strerror)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
253 else: # suspicious IOError |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
254 raise |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
255 except MemoryError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
256 ui.error(_(b"abort: out of memory\n")) |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
257 except SystemExit as inst: |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
258 # Commands shouldn't sys.exit directly, but give a return code. |
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
259 # Just in case catch this and and pass exit code to caller. |
45826
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
260 detailed_exit_code = 254 |
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
261 coarse_exit_code = inst.code |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
262 |
45826
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
263 if ui.configbool(b'ui', b'detailed-exit-code'): |
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
264 return detailed_exit_code |
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
265 else: |
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45825
diff
changeset
|
266 return coarse_exit_code |
30520
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
30417
diff
changeset
|
267 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
268 |
17821
361ab1e2086f
scmutil: add bad character checking to checknewlabel
Kevin Bullock <kbullock@ringworld.org>
parents:
17817
diff
changeset
|
269 def checknewlabel(repo, lbl, kind): |
19070
290a61833b99
translations: change label integer error to not specify the kind of label
Durham Goode <durham@fb.com>
parents:
18951
diff
changeset
|
270 # Do not use the "kind" parameter in ui output. |
290a61833b99
translations: change label integer error to not specify the kind of label
Durham Goode <durham@fb.com>
parents:
18951
diff
changeset
|
271 # It makes strings difficult to translate. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
272 if lbl in [b'tip', b'.', b'null']: |
45845
f96fa4de5055
errors: use InputError for errors about bad label names (tags etc)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45844
diff
changeset
|
273 raise error.InputError(_(b"the name '%s' is reserved") % lbl) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
274 for c in (b':', b'\0', b'\n', b'\r'): |
17821
361ab1e2086f
scmutil: add bad character checking to checknewlabel
Kevin Bullock <kbullock@ringworld.org>
parents:
17817
diff
changeset
|
275 if c in lbl: |
45845
f96fa4de5055
errors: use InputError for errors about bad label names (tags etc)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45844
diff
changeset
|
276 raise error.InputError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
277 _(b"%r cannot be used in a name") % pycompat.bytestr(c) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
278 ) |
18566
341868ef0cf6
bookmark: don't allow integers as bookmark/branch/tag names
Durham Goode <durham@fb.com>
parents:
18560
diff
changeset
|
279 try: |
341868ef0cf6
bookmark: don't allow integers as bookmark/branch/tag names
Durham Goode <durham@fb.com>
parents:
18560
diff
changeset
|
280 int(lbl) |
45845
f96fa4de5055
errors: use InputError for errors about bad label names (tags etc)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45844
diff
changeset
|
281 raise error.InputError(_(b"cannot use an integer as a name")) |
18566
341868ef0cf6
bookmark: don't allow integers as bookmark/branch/tag names
Durham Goode <durham@fb.com>
parents:
18560
diff
changeset
|
282 except ValueError: |
341868ef0cf6
bookmark: don't allow integers as bookmark/branch/tag names
Durham Goode <durham@fb.com>
parents:
18560
diff
changeset
|
283 pass |
36145
4f3e989536c3
label: enforce the lack of leading or trailing white space
Boris Feld <boris.feld@octobus.net>
parents:
36137
diff
changeset
|
284 if lbl.strip() != lbl: |
45845
f96fa4de5055
errors: use InputError for errors about bad label names (tags etc)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45844
diff
changeset
|
285 raise error.InputError( |
f96fa4de5055
errors: use InputError for errors about bad label names (tags etc)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45844
diff
changeset
|
286 _(b"leading or trailing whitespace in name %r") % lbl |
f96fa4de5055
errors: use InputError for errors about bad label names (tags etc)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45844
diff
changeset
|
287 ) |
17817
b17be267b59c
scmutil: add function to validate new branch, tag, and bookmark names
Kevin Bullock <kbullock@ringworld.org>
parents:
17768
diff
changeset
|
288 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
289 |
13974
23f2736abce3
move checkfilename from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13973
diff
changeset
|
290 def checkfilename(f): |
23f2736abce3
move checkfilename from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13973
diff
changeset
|
291 '''Check that the filename f is an acceptable filename for a tracked file''' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
292 if b'\r' in f or b'\n' in f: |
45844
3175b0e0058b
errors: use InputError for errors about bad paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
45841
diff
changeset
|
293 raise error.InputError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
294 _(b"'\\n' and '\\r' disallowed in filenames: %r") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
295 % pycompat.bytestr(f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
296 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
297 |
13974
23f2736abce3
move checkfilename from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13973
diff
changeset
|
298 |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
299 def checkportable(ui, f): |
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
300 '''Check if filename f is portable and warn or abort depending on config''' |
13974
23f2736abce3
move checkfilename from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13973
diff
changeset
|
301 checkfilename(f) |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
302 abort, warn = checkportabilityalert(ui) |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
303 if abort or warn: |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
304 msg = util.checkwinfilename(f) |
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
305 if msg: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
306 msg = b"%s: %s" % (msg, procutil.shellquote(f)) |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
307 if abort: |
45844
3175b0e0058b
errors: use InputError for errors about bad paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
45841
diff
changeset
|
308 raise error.InputError(msg) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
309 ui.warn(_(b"warning: %s\n") % msg) |
14068
04ce8fa1015d
add: notify when adding a file that would cause a case-folding collision
Kevin Gessner <kevin@kevingessner.com>
parents:
14067
diff
changeset
|
310 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
311 |
14067
e88a4958a6b7
scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents:
13986
diff
changeset
|
312 def checkportabilityalert(ui): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
313 """check if the user's config requests nothing, a warning, or abort for |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
314 non-portable filenames""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
315 val = ui.config(b'ui', b'portablefilenames') |
14067
e88a4958a6b7
scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents:
13986
diff
changeset
|
316 lval = val.lower() |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36836
diff
changeset
|
317 bval = stringutil.parsebool(val) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
318 abort = pycompat.iswindows or lval == b'abort' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
319 warn = bval or lval == b'warn' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
320 if bval is None and not (warn or abort or lval == b'ignore'): |
13962
8b252e826c68
add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff
changeset
|
321 raise error.ConfigError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
322 _(b"ui.portablefilenames value is invalid ('%s')") % val |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
323 ) |
14067
e88a4958a6b7
scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents:
13986
diff
changeset
|
324 return abort, warn |
e88a4958a6b7
scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents:
13986
diff
changeset
|
325 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
326 |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
327 class casecollisionauditor(object): |
17201
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
328 def __init__(self, ui, abort, dirstate): |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
329 self._ui = ui |
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
330 self._abort = abort |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
331 allfiles = b'\0'.join(dirstate) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
332 self._loweredfiles = set(encoding.lower(allfiles).split(b'\0')) |
17201
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
333 self._dirstate = dirstate |
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
334 # The purpose of _newfiles is so that we don't complain about |
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
335 # case collisions if someone were to call this object with the |
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
336 # same filename twice. |
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
337 self._newfiles = set() |
14067
e88a4958a6b7
scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents:
13986
diff
changeset
|
338 |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
339 def __call__(self, f): |
20006
9276014db865
scmutil: skip checks in "casecollisionauditor" if filename is already checked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19900
diff
changeset
|
340 if f in self._newfiles: |
9276014db865
scmutil: skip checks in "casecollisionauditor" if filename is already checked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19900
diff
changeset
|
341 return |
14980
28e98a8b173d
i18n: use UTF-8 string to lower filename for case collision check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
14861
diff
changeset
|
342 fl = encoding.lower(f) |
20006
9276014db865
scmutil: skip checks in "casecollisionauditor" if filename is already checked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19900
diff
changeset
|
343 if fl in self._loweredfiles and f not in self._dirstate: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
344 msg = _(b'possible case-folding collision for %s') % f |
14138
c18204fd35b0
scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14097
diff
changeset
|
345 if self._abort: |
48367
0b8e076e878c
errors: use detailed exit code for detected case-collision
Martin von Zweigbergk <martinvonz@google.com>
parents:
48315
diff
changeset
|
346 raise error.StateError(msg) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
347 self._ui.warn(_(b"warning: %s\n") % msg) |
17201
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
348 self._loweredfiles.add(fl) |
afd75476939e
scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents:
17161
diff
changeset
|
349 self._newfiles.add(f) |
13970
d13913355390
move opener from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13962
diff
changeset
|
350 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
351 |
48687
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
352 def filteredhash(repo, maxrev, needobsolete=False): |
24723
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
353 """build hash of filtered revisions in the current repoview. |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
354 |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
355 Multiple caches perform up-to-date validation by checking that the |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
356 tiprev and tipnode stored in the cache file match the current repository. |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
357 However, this is not sufficient for validating repoviews because the set |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
358 of revisions in the view may change without the repository tiprev and |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
359 tipnode changing. |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
360 |
48687
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
361 This function hashes all the revs filtered from the view (and, optionally, |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
362 all obsolete revs) up to maxrev and returns that SHA-1 digest. |
24723
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
363 """ |
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
364 cl = repo.changelog |
48687
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
365 if needobsolete: |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
366 obsrevs = obsolete.getrevs(repo, b'obsolete') |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
367 if not cl.filteredrevs and not obsrevs: |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
368 return None |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
369 # TODO: obsrevs should be a frozenset, but right now obsolete.getrevs() |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
370 # may return a set, which is not a hashable type. |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
371 key = (maxrev, hash(cl.filteredrevs), hash(frozenset(obsrevs))) |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
372 else: |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
373 if not cl.filteredrevs: |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
374 return None |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
375 key = maxrev |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
376 obsrevs = frozenset() |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
377 |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
378 result = cl._filteredrevs_hashcache.get(key) |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
379 if not result: |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
380 revs = sorted(r for r in cl.filteredrevs | obsrevs if r <= maxrev) |
45515
89f0d9f87701
branchmap: add a cache validation cache, avoid expensive re-hash on every use
Kyle Lippincott <spectral@google.com>
parents:
45483
diff
changeset
|
381 if revs: |
89f0d9f87701
branchmap: add a cache validation cache, avoid expensive re-hash on every use
Kyle Lippincott <spectral@google.com>
parents:
45483
diff
changeset
|
382 s = hashutil.sha1() |
89f0d9f87701
branchmap: add a cache validation cache, avoid expensive re-hash on every use
Kyle Lippincott <spectral@google.com>
parents:
45483
diff
changeset
|
383 for rev in revs: |
89f0d9f87701
branchmap: add a cache validation cache, avoid expensive re-hash on every use
Kyle Lippincott <spectral@google.com>
parents:
45483
diff
changeset
|
384 s.update(b'%d;' % rev) |
48687
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
385 result = s.digest() |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
386 cl._filteredrevs_hashcache[key] = result |
f8f2ecdde4b5
branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net>
parents:
48460
diff
changeset
|
387 return result |
24723
467a33142425
repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24693
diff
changeset
|
388 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
389 |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
390 def walkrepos(path, followsym=False, seen_dirs=None, recurse=False): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
391 """yield every hg repository under path, always recursively. |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
392 The recurse flag will only control recursion into repo working dirs""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
393 |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
394 def errhandler(err): |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
395 if err.filename == path: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
396 raise err |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
397 |
14961
5523529bd1af
walkrepos: use getattr instead of hasattr for samestat
Augie Fackler <durin42@gmail.com>
parents:
14928
diff
changeset
|
398 samestat = getattr(os.path, 'samestat', None) |
5523529bd1af
walkrepos: use getattr instead of hasattr for samestat
Augie Fackler <durin42@gmail.com>
parents:
14928
diff
changeset
|
399 if followsym and samestat is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
400 |
14227
94985b5a8278
scmutil: rename local function _add_dir_if_not_there
Adrian Buehlmann <adrian@cadifra.com>
parents:
14226
diff
changeset
|
401 def adddir(dirlst, dirname): |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
402 dirstat = os.stat(dirname) |
36338
ddd9474d2e08
walkrepos: don't reimplement any()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36313
diff
changeset
|
403 match = any(samestat(dirstat, lstdirstat) for lstdirstat in dirlst) |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
404 if not match: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
405 dirlst.append(dirstat) |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
406 return not match |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
407 |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
408 else: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
409 followsym = False |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
410 |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
411 if (seen_dirs is None) and followsym: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
412 seen_dirs = [] |
14227
94985b5a8278
scmutil: rename local function _add_dir_if_not_there
Adrian Buehlmann <adrian@cadifra.com>
parents:
14226
diff
changeset
|
413 adddir(seen_dirs, path) |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
414 for root, dirs, files in os.walk(path, topdown=True, onerror=errhandler): |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
415 dirs.sort() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
416 if b'.hg' in dirs: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
417 yield root # found a repository |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
418 qroot = os.path.join(root, b'.hg', b'patches') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
419 if os.path.isdir(os.path.join(qroot, b'.hg')): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
420 yield qroot # we have a patch queue repo here |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
421 if recurse: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
422 # avoid recursing inside the .hg directory |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
423 dirs.remove(b'.hg') |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
424 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
425 dirs[:] = [] # don't descend further |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
426 elif followsym: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
427 newdirs = [] |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
428 for d in dirs: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
429 fname = os.path.join(root, d) |
14227
94985b5a8278
scmutil: rename local function _add_dir_if_not_there
Adrian Buehlmann <adrian@cadifra.com>
parents:
14226
diff
changeset
|
430 if adddir(seen_dirs, fname): |
13975
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
431 if os.path.islink(fname): |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
432 for hgname in walkrepos(fname, True, seen_dirs): |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
433 yield hgname |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
434 else: |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
435 newdirs.append(d) |
938fbeacac84
move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13974
diff
changeset
|
436 dirs[:] = newdirs |
13984
af60153b5e3b
move rcpath from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13975
diff
changeset
|
437 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
438 |
32658
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
439 def binnode(ctx): |
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
440 """Return binary node id for a given basectx""" |
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
441 node = ctx.node() |
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
442 if node is None: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46976
diff
changeset
|
443 return ctx.repo().nodeconstants.wdirid |
32658
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
444 return node |
55ff67ffcead
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents:
32656
diff
changeset
|
445 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
446 |
32656
4bec8cce6a09
scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents:
32270
diff
changeset
|
447 def intrev(ctx): |
4bec8cce6a09
scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents:
32270
diff
changeset
|
448 """Return integer for a given basectx that can be used in comparison or |
24582
56fff44cce98
scmutil: add function to help handling workingctx in arithmetic operation
Yuya Nishihara <yuya@tcha.org>
parents:
24447
diff
changeset
|
449 arithmetic operation""" |
32656
4bec8cce6a09
scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents:
32270
diff
changeset
|
450 rev = ctx.rev() |
24582
56fff44cce98
scmutil: add function to help handling workingctx in arithmetic operation
Yuya Nishihara <yuya@tcha.org>
parents:
24447
diff
changeset
|
451 if rev is None: |
25739
3dabc9b7494a
changeset_printer: use node.wdirrev to calculate meaningful parentrevs
Yuya Nishihara <yuya@tcha.org>
parents:
25660
diff
changeset
|
452 return wdirrev |
24582
56fff44cce98
scmutil: add function to help handling workingctx in arithmetic operation
Yuya Nishihara <yuya@tcha.org>
parents:
24447
diff
changeset
|
453 return rev |
56fff44cce98
scmutil: add function to help handling workingctx in arithmetic operation
Yuya Nishihara <yuya@tcha.org>
parents:
24447
diff
changeset
|
454 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
455 |
34327
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
456 def formatchangeid(ctx): |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
457 """Format changectx as '{rev}:{node|formatnode}', which is the default |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35748
diff
changeset
|
458 template provided by logcmdutil.changesettemplater""" |
34327
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
459 repo = ctx.repo() |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
460 return formatrevnode(repo.ui, intrev(ctx), binnode(ctx)) |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
461 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
462 |
34327
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
463 def formatrevnode(ui, rev, node): |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
464 """Format given revision and node depending on the current verbosity""" |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
465 if ui.debugflag: |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
466 hexfunc = hex |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
467 else: |
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
468 hexfunc = short |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
469 return b'%d:%s' % (rev, hexfunc(node)) |
34327
4647e0a8d3d7
scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents:
34146
diff
changeset
|
470 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
471 |
37678
5f8f013e7d52
scmutil: rename resolvepartialhexnodeid() to resolvehexnodeidprefix()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37677
diff
changeset
|
472 def resolvehexnodeidprefix(repo, prefix): |
44810
62435a5b46fe
revisions: parse "x123" as "nodeid starting with 123" without prefixhexnode
Martin von Zweigbergk <martinvonz@google.com>
parents:
44548
diff
changeset
|
473 if prefix.startswith(b'x'): |
38855
7848f284b211
revisions: allow "x123" to refer to nodeid prefix "123"
Martin von Zweigbergk <martinvonz@google.com>
parents:
38854
diff
changeset
|
474 prefix = prefix[1:] |
38842
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
475 try: |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
476 # Uses unfiltered repo because it's faster when prefix is ambiguous/ |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
477 # This matches the shortesthexnodeidprefix() function below. |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
478 node = repo.unfiltered().changelog._partialmatch(prefix) |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
479 except error.AmbiguousPrefixLookupError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
480 revset = repo.ui.config( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
481 b'experimental', b'revisions.disambiguatewithin' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
482 ) |
38842
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
483 if revset: |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
484 # Clear config to avoid infinite recursion |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
485 configoverrides = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
486 (b'experimental', b'revisions.disambiguatewithin'): None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
487 } |
38842
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
488 with repo.ui.configoverride(configoverrides): |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
489 revs = repo.anyrevs([revset], user=True) |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
490 matches = [] |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
491 for rev in revs: |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
492 node = repo.changelog.node(rev) |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
493 if hex(node).startswith(prefix): |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
494 matches.append(node) |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
495 if len(matches) == 1: |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
496 return matches[0] |
503f936489dd
lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38841
diff
changeset
|
497 raise |
37504
901e749ca0e1
context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
37463
diff
changeset
|
498 if node is None: |
901e749ca0e1
context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
37463
diff
changeset
|
499 return |
901e749ca0e1
context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
37463
diff
changeset
|
500 repo.changelog.rev(node) # make sure node isn't filtered |
901e749ca0e1
context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
37463
diff
changeset
|
501 return node |
901e749ca0e1
context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
37463
diff
changeset
|
502 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
503 |
38854
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
504 def mayberevnum(repo, prefix): |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
505 """Checks if the given prefix may be mistaken for a revision number""" |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
506 try: |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
507 i = int(prefix) |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
508 # if we are a pure int, then starting with zero will not be |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
509 # confused as a rev; or, obviously, if the int is larger |
40341
d916ed3ca951
revisions: when using prefixhexnode, ensure we prefix "0"
Kyle Lippincott <spectral@google.com>
parents:
40167
diff
changeset
|
510 # than the value of the tip rev. We still need to disambiguate if |
d916ed3ca951
revisions: when using prefixhexnode, ensure we prefix "0"
Kyle Lippincott <spectral@google.com>
parents:
40167
diff
changeset
|
511 # prefix == '0', since that *is* a valid revnum. |
d916ed3ca951
revisions: when using prefixhexnode, ensure we prefix "0"
Kyle Lippincott <spectral@google.com>
parents:
40167
diff
changeset
|
512 if (prefix != b'0' and prefix[0:1] == b'0') or i >= len(repo): |
38854
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
513 return False |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
514 return True |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
515 except ValueError: |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
516 return False |
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
517 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
518 |
38853
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
519 def shortesthexnodeidprefix(repo, node, minlength=1, cache=None): |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
520 """Find the shortest unambiguous prefix that matches hexnode. |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
521 |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
522 If "cache" is not None, it must be a dictionary that can be used for |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
523 caching between calls to this method. |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
524 """ |
37708
8e8541610d85
scmutil: make shortesthexnodeidprefix() use unfiltered repo
Martin von Zweigbergk <martinvonz@google.com>
parents:
37680
diff
changeset
|
525 # _partialmatch() of filtered changelog could take O(len(repo)) time, |
8e8541610d85
scmutil: make shortesthexnodeidprefix() use unfiltered repo
Martin von Zweigbergk <martinvonz@google.com>
parents:
37680
diff
changeset
|
526 # which would be unacceptably slow. so we look for hash collision in |
8e8541610d85
scmutil: make shortesthexnodeidprefix() use unfiltered repo
Martin von Zweigbergk <martinvonz@google.com>
parents:
37680
diff
changeset
|
527 # unfiltered space, which means some hashes may be slightly longer. |
37971
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
528 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
529 minlength = max(minlength, 1) |
40403
bf249bb60087
shortest: never emit 0-length prefix even if unique
Martin von Zweigbergk <martinvonz@google.com>
parents:
40367
diff
changeset
|
530 |
37971
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
531 def disambiguate(prefix): |
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
532 """Disambiguate against revnums.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
533 if repo.ui.configbool(b'experimental', b'revisions.prefixhexnode'): |
38856
a01200b25da6
shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
38855
diff
changeset
|
534 if mayberevnum(repo, prefix): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
535 return b'x' + prefix |
38856
a01200b25da6
shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
38855
diff
changeset
|
536 else: |
a01200b25da6
shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
38855
diff
changeset
|
537 return prefix |
a01200b25da6
shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
38855
diff
changeset
|
538 |
37971
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
539 hexnode = hex(node) |
37979
5ac72e07692a
shortest: avoid magic number "41"
Martin von Zweigbergk <martinvonz@google.com>
parents:
37971
diff
changeset
|
540 for length in range(len(prefix), len(hexnode) + 1): |
37971
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
541 prefix = hexnode[:length] |
38854
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
542 if not mayberevnum(repo, prefix): |
37971
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
543 return prefix |
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
544 |
38854
531b86cc8fb3
shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents:
38853
diff
changeset
|
545 cl = repo.unfiltered().changelog |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
546 revset = repo.ui.config(b'experimental', b'revisions.disambiguatewithin') |
38843
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
547 if revset: |
38853
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
548 revs = None |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
549 if cache is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
550 revs = cache.get(b'disambiguationrevset') |
38853
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
551 if revs is None: |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
552 revs = repo.anyrevs([revset], user=True) |
3588e41f796d
shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38843
diff
changeset
|
553 if cache is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
554 cache[b'disambiguationrevset'] = revs |
38843
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
555 if cl.rev(node) in revs: |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
556 hexnode = hex(node) |
39226
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
557 nodetree = None |
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
558 if cache is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
559 nodetree = cache.get(b'disambiguationnodetree') |
39226
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
560 if not nodetree: |
43911
f2de8dc9c52f
nodetree: simplify a conditionnal in shortesthexnodeidprefix
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43775
diff
changeset
|
561 if util.safehasattr(parsers, 'nodetree'): |
f2de8dc9c52f
nodetree: simplify a conditionnal in shortesthexnodeidprefix
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43775
diff
changeset
|
562 # The CExt is the only implementation to provide a nodetree |
f2de8dc9c52f
nodetree: simplify a conditionnal in shortesthexnodeidprefix
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43775
diff
changeset
|
563 # class so far. |
44013
992f0d6e7f33
rust-index: use the new method in shortesthexnodeidprefix
Georges Racinet <georges.racinet@octobus.net>
parents:
44000
diff
changeset
|
564 index = cl.index |
992f0d6e7f33
rust-index: use the new method in shortesthexnodeidprefix
Georges Racinet <georges.racinet@octobus.net>
parents:
44000
diff
changeset
|
565 if util.safehasattr(index, 'get_cindex'): |
992f0d6e7f33
rust-index: use the new method in shortesthexnodeidprefix
Georges Racinet <georges.racinet@octobus.net>
parents:
44000
diff
changeset
|
566 # the rust wrapped need to give access to its internal index |
992f0d6e7f33
rust-index: use the new method in shortesthexnodeidprefix
Georges Racinet <georges.racinet@octobus.net>
parents:
44000
diff
changeset
|
567 index = index.get_cindex() |
992f0d6e7f33
rust-index: use the new method in shortesthexnodeidprefix
Georges Racinet <georges.racinet@octobus.net>
parents:
44000
diff
changeset
|
568 nodetree = parsers.nodetree(index, len(revs)) |
39226
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
569 for r in revs: |
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
570 nodetree.insert(r) |
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
571 if cache is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
572 cache[b'disambiguationnodetree'] = nodetree |
39226
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
573 if nodetree is not None: |
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
574 length = max(nodetree.shortest(node), minlength) |
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
575 prefix = hexnode[:length] |
7a759ad2d06d
shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
39088
diff
changeset
|
576 return disambiguate(prefix) |
38843
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
577 for length in range(minlength, len(hexnode) + 1): |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
578 matches = [] |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
579 prefix = hexnode[:length] |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
580 for rev in revs: |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
581 otherhexnode = repo[rev].hex() |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
582 if prefix == otherhexnode[:length]: |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
583 matches.append(otherhexnode) |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
584 if len(matches) == 1: |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
585 return disambiguate(prefix) |
6f7c9527030b
scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
38842
diff
changeset
|
586 |
37865
da083d9fafab
shortest: don't keep checking for longer prefix if node doesn't exist (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37767
diff
changeset
|
587 try: |
37971
3ac950cd5978
shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents:
37960
diff
changeset
|
588 return disambiguate(cl.shortest(node, minlength)) |
37865
da083d9fafab
shortest: don't keep checking for longer prefix if node doesn't exist (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37767
diff
changeset
|
589 except error.LookupError: |
da083d9fafab
shortest: don't keep checking for longer prefix if node doesn't exist (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37767
diff
changeset
|
590 raise error.RepoLookupError() |
37680
e743b8524d60
scmutil: introduce shortesthexnodeidprefix()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37679
diff
changeset
|
591 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
592 |
37350
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
593 def isrevsymbol(repo, symbol): |
37677
41ac707322ba
scmutil: document that isrevsymbol() raises on ambiguous node prefix
Martin von Zweigbergk <martinvonz@google.com>
parents:
37531
diff
changeset
|
594 """Checks if a symbol exists in the repo. |
41ac707322ba
scmutil: document that isrevsymbol() raises on ambiguous node prefix
Martin von Zweigbergk <martinvonz@google.com>
parents:
37531
diff
changeset
|
595 |
38841
df0873ab5c14
revlog: use specialized exception for ambiguous prefix lookup
Martin von Zweigbergk <martinvonz@google.com>
parents:
38799
diff
changeset
|
596 See revsymbol() for details. Raises error.AmbiguousPrefixLookupError if the |
df0873ab5c14
revlog: use specialized exception for ambiguous prefix lookup
Martin von Zweigbergk <martinvonz@google.com>
parents:
38799
diff
changeset
|
597 symbol is an ambiguous nodeid prefix. |
37677
41ac707322ba
scmutil: document that isrevsymbol() raises on ambiguous node prefix
Martin von Zweigbergk <martinvonz@google.com>
parents:
37531
diff
changeset
|
598 """ |
37350
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
599 try: |
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
600 revsymbol(repo, symbol) |
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
601 return True |
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
602 except error.RepoLookupError: |
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
603 return False |
e32dfff71529
revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37306
diff
changeset
|
604 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
605 |
37271
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
606 def revsymbol(repo, symbol): |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
607 """Returns a context given a single revision symbol (as string). |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
608 |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
609 This is similar to revsingle(), but accepts only a single revision symbol, |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
610 i.e. things like ".", "tip", "1234", "deadbeef", "my-bookmark" work, but |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
611 not "max(public())". |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
612 """ |
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
613 if not isinstance(symbol, bytes): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
614 msg = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
615 b"symbol (%s of type %s) was not a string, did you mean " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
616 b"repo[symbol]?" % (symbol, type(symbol)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
617 ) |
37271
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
618 raise error.ProgrammingError(msg) |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
619 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
620 if symbol in (b'.', b'tip', b'null'): |
37527
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
621 return repo[symbol] |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
622 |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
623 try: |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
624 r = int(symbol) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
625 if b'%d' % r != symbol: |
37527
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
626 raise ValueError |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
627 l = len(repo.changelog) |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
628 if r < 0: |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
629 r += l |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
630 if r < 0 or r >= l and r != wdirrev: |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
631 raise ValueError |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
632 return repo[r] |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
633 except error.FilteredIndexError: |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
634 raise |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
635 except (ValueError, OverflowError, IndexError): |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
636 pass |
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
637 |
47041
a407fe56d6e8
core: don't hard-code hex node lengths
Joerg Sonnenberger <joerg@bec.de>
parents:
47012
diff
changeset
|
638 if len(symbol) == 2 * repo.nodeconstants.nodelen: |
37528
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
639 try: |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
640 node = bin(symbol) |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
641 rev = repo.changelog.rev(node) |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
642 return repo[rev] |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
643 except error.FilteredLookupError: |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
644 raise |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
645 except (TypeError, LookupError): |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
646 pass |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
647 |
37529
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
648 # look up bookmarks through the name interface |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
649 try: |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
650 node = repo.names.singlenode(repo, symbol) |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
651 rev = repo.changelog.rev(node) |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
652 return repo[rev] |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
653 except KeyError: |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
654 pass |
45667439439e
context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37528
diff
changeset
|
655 |
37679
ab828755e1ea
scmutil: use resolvehexnodeidprefix() from revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37678
diff
changeset
|
656 node = resolvehexnodeidprefix(repo, symbol) |
37530
35b34202dd3b
context: handle partial nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37529
diff
changeset
|
657 if node is not None: |
35b34202dd3b
context: handle partial nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37529
diff
changeset
|
658 rev = repo.changelog.rev(node) |
35b34202dd3b
context: handle partial nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37529
diff
changeset
|
659 return repo[rev] |
35b34202dd3b
context: handle partial nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37529
diff
changeset
|
660 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
661 raise error.RepoLookupError(_(b"unknown revision '%s'") % symbol) |
37527
1c09481acdcc
context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37504
diff
changeset
|
662 |
37528
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
663 except error.WdirUnsupported: |
d2b484eed1ec
scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37527
diff
changeset
|
664 return repo[None] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
665 except ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
666 error.FilteredIndexError, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
667 error.FilteredLookupError, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
668 error.FilteredRepoLookupError, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
669 ): |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
670 raise _filterederror(repo, symbol) |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
671 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
672 |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
673 def _filterederror(repo, changeid): |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
674 """build an exception to be raised about a filtered changeid |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
675 |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
676 This is extracted in a function to help extensions (eg: evolve) to |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
677 experiment with various message variants.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
678 if repo.filtername.startswith(b'visible'): |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
679 |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
680 # Check if the changeset is obsolete |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
681 unfilteredrepo = repo.unfiltered() |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
682 ctx = revsymbol(unfilteredrepo, changeid) |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
683 |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
684 # If the changeset is obsolete, enrich the message with the reason |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
685 # that made this changeset not visible |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
686 if ctx.obsolete(): |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
687 msg = obsutil._getfilteredreason(repo, changeid, ctx) |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
688 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
689 msg = _(b"hidden revision '%s'") % changeid |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
690 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
691 hint = _(b'use --hidden to access hidden revisions') |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
692 |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
693 return error.FilteredRepoLookupError(msg, hint=hint) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
694 msg = _(b"filtered revision '%s' (not in '%s' subset)") |
37385
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
695 msg %= (changeid, repo.filtername) |
ecd3f6909184
context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37360
diff
changeset
|
696 return error.FilteredRepoLookupError(msg) |
37271
0194dac77c93
scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
697 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
698 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
699 def revsingle(repo, revspec, default=b'.', localalias=None): |
19509
8963a706e075
revsingle: fix silly API issue (issue2992)
Matt Mackall <mpm@selenic.com>
parents:
19154
diff
changeset
|
700 if not revspec and revspec != 0: |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
701 return repo[default] |
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
702 |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
33798
diff
changeset
|
703 l = revrange(repo, [revspec], localalias=localalias) |
22814
8110405cf8ae
revset-limit: use boolean testing instead of `len(revs) < 1`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21799
diff
changeset
|
704 if not l: |
48030
7d908ee19b5b
errors: use InputError for some invalid revsets and such
Martin von Zweigbergk <martinvonz@google.com>
parents:
47729
diff
changeset
|
705 raise error.InputError(_(b'empty revision set')) |
22815
4f81470e83bf
revsingle: use `last` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22814
diff
changeset
|
706 return repo[l.last()] |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
707 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
708 |
26020
cc3a30ff9490
revpair: restrict odd-range handling to top-level x:y expression (issue4774)
Yuya Nishihara <yuya@tcha.org>
parents:
25928
diff
changeset
|
709 def _pairspec(revspec): |
31024
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30639
diff
changeset
|
710 tree = revsetlang.parse(revspec) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
711 return tree and tree[0] in ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
712 b'range', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
713 b'rangepre', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
714 b'rangepost', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
715 b'rangeall', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
716 ) |
26020
cc3a30ff9490
revpair: restrict odd-range handling to top-level x:y expression (issue4774)
Yuya Nishihara <yuya@tcha.org>
parents:
25928
diff
changeset
|
717 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
718 |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
719 def revpair(repo, revs): |
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
720 if not revs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
721 return repo[b'.'], repo[None] |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
722 |
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
723 l = revrange(repo, revs) |
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
724 |
41370
a728ef2f9b15
revpair: clarify check for empty revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
41369
diff
changeset
|
725 if not l: |
48030
7d908ee19b5b
errors: use InputError for some invalid revsets and such
Martin von Zweigbergk <martinvonz@google.com>
parents:
47729
diff
changeset
|
726 raise error.InputError(_(b'empty revision range')) |
41370
a728ef2f9b15
revpair: clarify check for empty revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
41369
diff
changeset
|
727 |
41369
5079242abef9
revpair: simplify revpair by always relying on smartset.first/last
Martin von Zweigbergk <martinvonz@google.com>
parents:
41288
diff
changeset
|
728 first = l.first() |
5079242abef9
revpair: simplify revpair by always relying on smartset.first/last
Martin von Zweigbergk <martinvonz@google.com>
parents:
41288
diff
changeset
|
729 second = l.last() |
20862
97b2f26dfc43
revpair: smartset compatibility
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20820
diff
changeset
|
730 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
731 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
732 first == second |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
733 and len(revs) >= 2 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
734 and not all(revrange(repo, [r]) for r in revs) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
735 ): |
48030
7d908ee19b5b
errors: use InputError for some invalid revsets and such
Martin von Zweigbergk <martinvonz@google.com>
parents:
47729
diff
changeset
|
736 raise error.InputError(_(b'empty revision on one side of range')) |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
737 |
26020
cc3a30ff9490
revpair: restrict odd-range handling to top-level x:y expression (issue4774)
Yuya Nishihara <yuya@tcha.org>
parents:
25928
diff
changeset
|
738 # if top-level is range expression, the result must always be a pair |
cc3a30ff9490
revpair: restrict odd-range handling to top-level x:y expression (issue4774)
Yuya Nishihara <yuya@tcha.org>
parents:
25928
diff
changeset
|
739 if first == second and len(revs) == 1 and not _pairspec(revs[0]): |
37252
e9ee540af434
scmutil: make revpair() return context objects (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37251
diff
changeset
|
740 return repo[first], repo[None] |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
741 |
37252
e9ee540af434
scmutil: make revpair() return context objects (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37251
diff
changeset
|
742 return repo[first], repo[second] |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14261
diff
changeset
|
743 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
744 |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
33798
diff
changeset
|
745 def revrange(repo, specs, localalias=None): |
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
746 """Execute 1 to many revsets and return the union. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
747 |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
748 This is the preferred mechanism for executing revsets using user-specified |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
749 config options, such as revset aliases. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
750 |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
751 The revsets specified by ``specs`` will be executed via a chained ``OR`` |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
752 expression. If ``specs`` is empty, an empty result is returned. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
753 |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
754 ``specs`` can contain integers, in which case they are assumed to be |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
755 revision numbers. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
756 |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
757 It is assumed the revsets are already formatted. If you have arguments |
31024
0b8356705de6
revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30639
diff
changeset
|
758 that need to be expanded in the revset, call ``revsetlang.formatspec()`` |
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
759 and pass the result as an element of ``specs``. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
760 |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
761 Specifying a single revset is allowed. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
762 |
44075
2122ffa903ea
doc: fix references to `revset.abstractsmartset`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44063
diff
changeset
|
763 Returns a ``smartset.abstractsmartset`` which is a list-like interface over |
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
764 integer revisions. |
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
765 """ |
25928
4ee4f7415095
revrange: evaluate all revset specs at once
Yuya Nishihara <yuya@tcha.org>
parents:
25904
diff
changeset
|
766 allspecs = [] |
29417
526b027b0130
scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29389
diff
changeset
|
767 for spec in specs: |
25904
fbaa2de13cf6
revrange: drop old-style parser in favor of revset (API)
Yuya Nishihara <yuya@tcha.org>
parents:
25772
diff
changeset
|
768 if isinstance(spec, int): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
769 spec = revsetlang.formatspec(b'%d', spec) |
25928
4ee4f7415095
revrange: evaluate all revset specs at once
Yuya Nishihara <yuya@tcha.org>
parents:
25904
diff
changeset
|
770 allspecs.append(spec) |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
33798
diff
changeset
|
771 return repo.anyrevs(allspecs, user=True, localalias=localalias) |
14320 | 772 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
773 |
45720
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
774 def increasingwindows(windowsize=8, sizelimit=512): |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
775 while True: |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
776 yield windowsize |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
777 if windowsize < sizelimit: |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
778 windowsize *= 2 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
779 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
780 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
781 def walkchangerevs(repo, revs, makefilematcher, prepare): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
782 """Iterate over files and the revs in a "windowed" way. |
45720
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
783 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
784 Callers most commonly need to iterate backwards over the history |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
785 in which they are interested. Doing so has awful (quadratic-looking) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
786 performance, so we use iterators in a "windowed" way. |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
787 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
788 We walk a window of revisions in the desired order. Within the |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
789 window, we first walk forwards to gather data, then in the desired |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
790 order (usually backwards) to display it. |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
791 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
792 This function returns an iterator yielding contexts. Before |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
793 yielding each context, the iterator will first call the prepare |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
794 function on each context in the window in forward order.""" |
45720
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
795 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
796 if not revs: |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
797 return [] |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
798 change = repo.__getitem__ |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
799 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
800 def iterate(): |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
801 it = iter(revs) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
802 stopiteration = False |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
803 for windowsize in increasingwindows(): |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
804 nrevs = [] |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
805 for i in pycompat.xrange(windowsize): |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
806 rev = next(it, None) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
807 if rev is None: |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
808 stopiteration = True |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
809 break |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
810 nrevs.append(rev) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
811 for rev in sorted(nrevs): |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
812 ctx = change(rev) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
813 prepare(ctx, makefilematcher(ctx)) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
814 for rev in nrevs: |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
815 yield change(rev) |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
816 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
817 if stopiteration: |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
818 break |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
819 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
820 return iterate() |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
821 |
508dfd1c18df
scmutil: move walkchangerevs() from cmdutil
Yuya Nishihara <yuya@tcha.org>
parents:
45682
diff
changeset
|
822 |
26433
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
823 def meaningfulparents(repo, ctx): |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
824 """Return list of meaningful (or all if debug) parentrevs for rev. |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
825 |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
826 For merges (two non-nullrev revisions) both parents are meaningful. |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
827 Otherwise the first parent revision is considered meaningful if it |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
828 is not the preceding revision. |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
829 """ |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
830 parents = ctx.parents() |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
831 if len(parents) > 1: |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
832 return parents |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
833 if repo.ui.debugflag: |
39894
d739f423bf06
repo: look up nullrev context by revnum, not symbolic name
Martin von Zweigbergk <martinvonz@google.com>
parents:
39891
diff
changeset
|
834 return [parents[0], repo[nullrev]] |
32656
4bec8cce6a09
scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents:
32270
diff
changeset
|
835 if parents[0].rev() >= intrev(ctx) - 1: |
26433
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
836 return [] |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
837 return parents |
3ad41638b4b4
changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents:
26421
diff
changeset
|
838 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
839 |
41575
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
840 def getuipathfn(repo, legacyrelativevalue=False, forcerelativevalue=None): |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
841 """Return a function that produced paths for presenting to the user. |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
842 |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
843 The returned function takes a repo-relative path and produces a path |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
844 that can be presented in the UI. |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
845 |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
846 Depending on the value of ui.relative-paths, either a repo-relative or |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
847 cwd-relative path will be produced. |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
848 |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
849 legacyrelativevalue is the value to use if ui.relative-paths=legacy |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
850 |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
851 If forcerelativevalue is not None, then that value will be used regardless |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
852 of what ui.relative-paths is set to. |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
853 """ |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
854 if forcerelativevalue is not None: |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
855 relative = forcerelativevalue |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
856 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
857 config = repo.ui.config(b'ui', b'relative-paths') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
858 if config == b'legacy': |
41575
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
859 relative = legacyrelativevalue |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
860 else: |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
861 relative = stringutil.parsebool(config) |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
862 if relative is None: |
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
863 raise error.ConfigError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
864 _(b"ui.relative-paths is not a boolean ('%s')") % config |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
865 ) |
41575
aec185af621e
config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents:
41492
diff
changeset
|
866 |
41491
e6ec0737b706
status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents:
41421
diff
changeset
|
867 if relative: |
e6ec0737b706
status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents:
41421
diff
changeset
|
868 cwd = repo.getcwd() |
44858
5d8ae9248a70
scmutil: speed up relativization of paths when it's a no-op
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44810
diff
changeset
|
869 if cwd != b'': |
44884
d044b66d8429
scmutil: clarify getuipathfn comment
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44858
diff
changeset
|
870 # this branch would work even if cwd == b'' (ie cwd = repo |
d044b66d8429
scmutil: clarify getuipathfn comment
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44858
diff
changeset
|
871 # root), but its generality makes the returned function slower |
44858
5d8ae9248a70
scmutil: speed up relativization of paths when it's a no-op
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44810
diff
changeset
|
872 pathto = repo.pathto |
5d8ae9248a70
scmutil: speed up relativization of paths when it's a no-op
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44810
diff
changeset
|
873 return lambda f: pathto(f, cwd) |
5d8ae9248a70
scmutil: speed up relativization of paths when it's a no-op
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44810
diff
changeset
|
874 if repo.ui.configbool(b'ui', b'slash'): |
41684
a8d3a4be066e
windows: use util.localpath for repo-relative paths in getuipathfn()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41676
diff
changeset
|
875 return lambda f: f |
41491
e6ec0737b706
status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents:
41421
diff
changeset
|
876 else: |
41684
a8d3a4be066e
windows: use util.localpath for repo-relative paths in getuipathfn()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41676
diff
changeset
|
877 return util.localpath |
41491
e6ec0737b706
status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents:
41421
diff
changeset
|
878 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
879 |
41650
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41649
diff
changeset
|
880 def subdiruipathfn(subpath, uipathfn): |
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41649
diff
changeset
|
881 '''Create a new uipathfn that treats the file as relative to subpath.''' |
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41649
diff
changeset
|
882 return lambda f: uipathfn(posixpath.join(subpath, f)) |
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41649
diff
changeset
|
883 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
884 |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
885 def anypats(pats, opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
886 """Checks if any patterns, including --include and --exclude were given. |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
887 |
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
888 Some commands (e.g. addremove) use this condition for deciding whether to |
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
889 print absolute or relative paths. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
890 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
891 return bool(pats or opts.get(b'include') or opts.get(b'exclude')) |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
892 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
893 |
14320 | 894 def expandpats(pats): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
895 """Expand bare globs when running on windows. |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
896 On posix we assume it already has already been done by sh.""" |
14320 | 897 if not util.expandglobs: |
898 return list(pats) | |
899 ret = [] | |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
900 for kindpat in pats: |
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
901 kind, pat = matchmod._patsplit(kindpat, None) |
14320 | 902 if kind is None: |
903 try: | |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
904 globbed = glob.glob(pat) |
14320 | 905 except re.error: |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
906 globbed = [pat] |
14320 | 907 if globbed: |
908 ret.extend(globbed) | |
909 continue | |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
910 ret.append(kindpat) |
14320 | 911 return ret |
912 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
913 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
914 def matchandpats( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
915 ctx, pats=(), opts=None, globbed=False, default=b'relpath', badfn=None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
916 ): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
917 """Return a matcher and the patterns that were used. |
25467
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
918 The matcher will warn about bad matches, unless an alternate badfn callback |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
919 is provided.""" |
26326
58218b0e6005
match: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26325
diff
changeset
|
920 if opts is None: |
58218b0e6005
match: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26325
diff
changeset
|
921 opts = {} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
922 if not globbed and default == b'relpath': |
14320 | 923 pats = expandpats(pats or []) |
14670
19197fa4c41c
scmutil: match now accepts a context or a repo
Matt Mackall <mpm@selenic.com>
parents:
14669
diff
changeset
|
924 |
41665
0ed7a8ac5711
scmutil: respect ui.relative-paths in default match.badfn
Martin von Zweigbergk <martinvonz@google.com>
parents:
41662
diff
changeset
|
925 uipathfn = getuipathfn(ctx.repo(), legacyrelativevalue=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
926 |
25467
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
927 def bad(f, msg): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
928 ctx.repo().ui.warn(b"%s: %s\n" % (uipathfn(f), msg)) |
25466
007a1d53f7c3
scmutil: use the optional badfn argument when building a matcher
Matt Harbison <matt_harbison@yahoo.com>
parents:
25434
diff
changeset
|
929 |
25467
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
930 if badfn is None: |
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
931 badfn = bad |
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
932 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
933 m = ctx.match( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
934 pats, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
935 opts.get(b'include'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
936 opts.get(b'exclude'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
937 default, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
938 listsubrepos=opts.get(b'subrepos'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
939 badfn=badfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
940 ) |
25466
007a1d53f7c3
scmutil: use the optional badfn argument when building a matcher
Matt Harbison <matt_harbison@yahoo.com>
parents:
25434
diff
changeset
|
941 |
24447
d44d53bc9a1e
matcher: make e.g. 'relpath:.' lead to fast paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
24338
diff
changeset
|
942 if m.always(): |
d44d53bc9a1e
matcher: make e.g. 'relpath:.' lead to fast paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
24338
diff
changeset
|
943 pats = [] |
16171
336e61875335
graphlog: restore FILE glob expansion on Windows
Patrick Mezard <patrick@mezard.eu>
parents:
16167
diff
changeset
|
944 return m, pats |
336e61875335
graphlog: restore FILE glob expansion on Windows
Patrick Mezard <patrick@mezard.eu>
parents:
16167
diff
changeset
|
945 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
946 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
947 def match( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
948 ctx, pats=(), opts=None, globbed=False, default=b'relpath', badfn=None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
949 ): |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
950 '''Return a matcher that will warn about bad matches.''' |
25467
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
951 return matchandpats(ctx, pats, opts, globbed, default, badfn=badfn)[0] |
14320 | 952 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
953 |
14320 | 954 def matchall(repo): |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
955 '''Return a matcher that will efficiently match everything.''' |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41666
diff
changeset
|
956 return matchmod.always() |
14320 | 957 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
958 |
25467
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
959 def matchfiles(repo, files, badfn=None): |
21111
9d28fd795215
match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents:
20980
diff
changeset
|
960 '''Return a matcher that will efficiently match exactly these files.''' |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41666
diff
changeset
|
961 return matchmod.exact(files, badfn=badfn) |
14320 | 962 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
963 |
34854
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
964 def parsefollowlinespattern(repo, rev, pat, msg): |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
965 """Return a file name from `pat` pattern suitable for usage in followlines |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
966 logic. |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
967 """ |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
968 if not matchmod.patkind(pat): |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
969 return pathutil.canonpath(repo.root, repo.getcwd(), pat) |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
970 else: |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
971 ctx = repo[rev] |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
972 m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=ctx) |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
973 files = [f for f in ctx if m(f)] |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
974 if len(files) != 1: |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
975 raise error.ParseError(msg) |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
976 return files[0] |
39b094e4ae2c
revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34793
diff
changeset
|
977 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
978 |
40752
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
979 def getorigvfs(ui, repo): |
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
980 """return a vfs suitable to save 'orig' file |
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
981 |
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
982 return None if no special directory is configured""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
983 origbackuppath = ui.config(b'ui', b'origbackuppath') |
40752
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
984 if not origbackuppath: |
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
985 return None |
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
986 return vfs.vfs(repo.wvfs.join(origbackuppath)) |
65591a513b9c
revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents:
40658
diff
changeset
|
987 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
988 |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
989 def backuppath(ui, repo, filepath): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
990 """customize where working copy backup files (.orig files) are created |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
991 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
992 Fetch user defined path from config file: [ui] origbackuppath = <path> |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
993 Fall back to default (filepath with .orig suffix) if not specified |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
994 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
995 filepath is repo-relative |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
996 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
997 Returns an absolute path |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
998 """ |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
999 origvfs = getorigvfs(ui, repo) |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1000 if origvfs is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1001 return repo.wjoin(filepath + b".orig") |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1002 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1003 origbackupdir = origvfs.dirname(filepath) |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1004 if not origvfs.isdir(origbackupdir) or origvfs.islink(origbackupdir): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1005 ui.note(_(b'creating directory: %s\n') % origvfs.join(origbackupdir)) |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1006 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1007 # Remove any files that conflict with the backup file's path |
43633
0b7733719d21
utils: move finddirs() to pathutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43506
diff
changeset
|
1008 for f in reversed(list(pathutil.finddirs(filepath))): |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1009 if origvfs.isfileorlink(f): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1010 ui.note(_(b'removing conflicting file: %s\n') % origvfs.join(f)) |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1011 origvfs.unlink(f) |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1012 break |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1013 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1014 origvfs.makedirs(origbackupdir) |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1015 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1016 if origvfs.isdir(filepath) and not origvfs.islink(filepath): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1017 ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1018 _(b'removing conflicting directory: %s\n') % origvfs.join(filepath) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1019 ) |
41595
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1020 origvfs.rmtree(filepath, forcibly=True) |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1021 |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1022 return origvfs.join(filepath) |
8785188d1915
scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41575
diff
changeset
|
1023 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1024 |
33331
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1025 class _containsnode(object): |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1026 """proxy __contains__(node) to container.__contains__ which accepts revs""" |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1027 |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1028 def __init__(self, repo, revcontainer): |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1029 self._torev = repo.changelog.rev |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1030 self._revcontains = revcontainer.__contains__ |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1031 |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1032 def __contains__(self, node): |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1033 return self._revcontains(self._torev(node)) |
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1034 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1035 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1036 def cleanupnodes( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1037 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1038 replacements, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1039 operation, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1040 moves=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1041 metadata=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1042 fixphase=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1043 targetphase=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1044 backup=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1045 ): |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1046 """do common cleanups when old nodes are replaced by new nodes |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1047 |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1048 That includes writing obsmarkers or stripping nodes, and moving bookmarks. |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1049 (we might also want to move working directory parent in the future) |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1050 |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1051 By default, bookmark moves are calculated automatically from 'replacements', |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1052 but 'moves' can be used to override that. Also, 'moves' may include |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1053 additional bookmark moves that should not have associated obsmarkers. |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1054 |
34353
2dbd6d259cd2
cleanupnodes: rename "mapping" to "replacements"
Martin von Zweigbergk <martinvonz@google.com>
parents:
34352
diff
changeset
|
1055 replacements is {oldnode: [newnode]} or a iterable of nodes if they do not |
2dbd6d259cd2
cleanupnodes: rename "mapping" to "replacements"
Martin von Zweigbergk <martinvonz@google.com>
parents:
34352
diff
changeset
|
1056 have replacements. operation is a string, like "rebase". |
34793
3df59451cdec
scmutil: add capability to cleanupnodes to take obsmarker metadata
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34737
diff
changeset
|
1057 |
3df59451cdec
scmutil: add capability to cleanupnodes to take obsmarker metadata
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34737
diff
changeset
|
1058 metadata is dictionary containing metadata to be stored in obsmarker if |
3df59451cdec
scmutil: add capability to cleanupnodes to take obsmarker metadata
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34737
diff
changeset
|
1059 obsolescence is enabled. |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1060 """ |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1061 assert fixphase or targetphase is None |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1062 if not replacements and not moves: |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1063 return |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1064 |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1065 # translate mapping's other forms |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1066 if not util.safehasattr(replacements, b'items'): |
39891
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1067 replacements = {(n,): () for n in replacements} |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1068 else: |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1069 # upgrading non tuple "source" to tuple ones for BC |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1070 repls = {} |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1071 for key, value in replacements.items(): |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1072 if not isinstance(key, tuple): |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1073 key = (key,) |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1074 repls[key] = value |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1075 replacements = repls |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1076 |
40855
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1077 # Unfiltered repo is needed since nodes in replacements might be hidden. |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1078 unfi = repo.unfiltered() |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1079 |
34352
033a5befbaf7
cleanupnodes: separate out bookmark destination calculation from actual update
Martin von Zweigbergk <martinvonz@google.com>
parents:
33649
diff
changeset
|
1080 # Calculate bookmark movements |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1081 if moves is None: |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1082 moves = {} |
40855
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1083 for oldnodes, newnodes in replacements.items(): |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1084 for oldnode in oldnodes: |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1085 if oldnode in moves: |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1086 continue |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1087 if len(newnodes) > 1: |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1088 # usually a split, take the one with biggest rev number |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1089 newnode = next(unfi.set(b'max(%ln)', newnodes)).node() |
40855
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1090 elif len(newnodes) == 0: |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1091 # move bookmark backwards |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1092 allreplaced = [] |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1093 for rep in replacements: |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1094 allreplaced.extend(rep) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1095 roots = list( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1096 unfi.set(b'max((::%n) - %ln)', oldnode, allreplaced) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1097 ) |
40855
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1098 if roots: |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1099 newnode = roots[0].node() |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1100 else: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46976
diff
changeset
|
1101 newnode = repo.nullid |
39891
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1102 else: |
40855
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1103 newnode = newnodes[0] |
b7823bd59b07
cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents:
40752
diff
changeset
|
1104 moves[oldnode] = newnode |
34352
033a5befbaf7
cleanupnodes: separate out bookmark destination calculation from actual update
Martin von Zweigbergk <martinvonz@google.com>
parents:
33649
diff
changeset
|
1105 |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1106 allnewnodes = [n for ns in replacements.values() for n in ns] |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1107 toretract = {} |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1108 toadvance = {} |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1109 if fixphase: |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1110 precursors = {} |
39891
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1111 for oldnodes, newnodes in replacements.items(): |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1112 for oldnode in oldnodes: |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1113 for newnode in newnodes: |
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1114 precursors.setdefault(newnode, []).append(oldnode) |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1115 |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1116 allnewnodes.sort(key=lambda n: unfi[n].rev()) |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1117 newphases = {} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1118 |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1119 def phase(ctx): |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1120 return newphases.get(ctx.node(), ctx.phase()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1121 |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1122 for newnode in allnewnodes: |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1123 ctx = unfi[newnode] |
38432
05b7dd11918e
cleanupnodes: preserve phase of parents of new nodes
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
1124 parentphase = max(phase(p) for p in ctx.parents()) |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1125 if targetphase is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1126 oldphase = max( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1127 unfi[oldnode].phase() for oldnode in precursors[newnode] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1128 ) |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1129 newphase = max(oldphase, parentphase) |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1130 else: |
38432
05b7dd11918e
cleanupnodes: preserve phase of parents of new nodes
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
1131 newphase = max(targetphase, parentphase) |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1132 newphases[newnode] = newphase |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1133 if newphase > ctx.phase(): |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1134 toretract.setdefault(newphase, []).append(newnode) |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1135 elif newphase < ctx.phase(): |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1136 toadvance.setdefault(newphase, []).append(newnode) |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1137 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1138 with repo.transaction(b'cleanup') as tr: |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1139 # Move bookmarks |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1140 bmarks = repo._bookmarks |
33511
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1141 bmarkchanges = [] |
34352
033a5befbaf7
cleanupnodes: separate out bookmark destination calculation from actual update
Martin von Zweigbergk <martinvonz@google.com>
parents:
33649
diff
changeset
|
1142 for oldnode, newnode in moves.items(): |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1143 oldbmarks = repo.nodebookmarks(oldnode) |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1144 if not oldbmarks: |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1145 continue |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1146 from . import bookmarks # avoid import cycle |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1147 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1148 repo.ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1149 b'moving bookmarks %r from %s to %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1150 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1151 pycompat.rapply(pycompat.maybebytestr, oldbmarks), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1152 hex(oldnode), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1153 hex(newnode), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1154 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1155 ) |
33331
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1156 # Delete divergent bookmarks being parents of related newnodes |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1157 deleterevs = repo.revs( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1158 b'parents(roots(%ln & (::%n))) - parents(%n)', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1159 allnewnodes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1160 newnode, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1161 oldnode, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1162 ) |
33331
4bae3c117b57
scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents:
33330
diff
changeset
|
1163 deletenodes = _containsnode(repo, deleterevs) |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1164 for name in oldbmarks: |
33511
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1165 bmarkchanges.append((name, newnode)) |
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1166 for b in bookmarks.divergent2delete(repo, deletenodes, name): |
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1167 bmarkchanges.append((b, None)) |
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1168 |
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1169 if bmarkchanges: |
9689239d7c2b
bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents:
33505
diff
changeset
|
1170 bmarks.applychanges(repo, tr, bmarkchanges) |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1171 |
38423
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1172 for phase, nodes in toretract.items(): |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1173 phases.retractboundary(repo, tr, phase, nodes) |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1174 for phase, nodes in toadvance.items(): |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1175 phases.advanceboundary(repo, tr, phase, nodes) |
32fba6fe893d
scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38419
diff
changeset
|
1176 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1177 mayusearchived = repo.ui.config(b'experimental', b'cleanup-as-archived') |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1178 # Obsolete or strip nodes |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1179 if obsolete.isenabled(repo, obsolete.createmarkersopt): |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1180 # If a node is already obsoleted, and we want to obsolete it |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1181 # without a successor, skip that obssolete request since it's |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1182 # unnecessary. That's the "if s or not isobs(n)" check below. |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1183 # Also sort the node in topology order, that might be useful for |
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1184 # some obsstore logic. |
40041
ca9d0c93acea
cleanupnodes: update comment to drop mention of filtering
Boris Feld <boris.feld@octobus.net>
parents:
39923
diff
changeset
|
1185 # NOTE: the sorting might belong to createmarkers. |
33330
ba43e5ee9c6d
scmutil: make cleanupnodes handle filtered node
Jun Wu <quark@fb.com>
parents:
33252
diff
changeset
|
1186 torev = unfi.changelog.rev |
39891
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1187 sortfunc = lambda ns: torev(ns[0][0]) |
39890
1c3f1491965f
scmutil: expand long "one-liner"
Boris Feld <boris.feld@octobus.net>
parents:
39836
diff
changeset
|
1188 rels = [] |
39891
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1189 for ns, s in sorted(replacements.items(), key=sortfunc): |
39923
61f39a892168
cleanupnodes: pass multiple predecessors to `createmarkers` directly
Boris Feld <boris.feld@octobus.net>
parents:
39916
diff
changeset
|
1190 rel = (tuple(unfi[n] for n in ns), tuple(unfi[m] for m in s)) |
61f39a892168
cleanupnodes: pass multiple predecessors to `createmarkers` directly
Boris Feld <boris.feld@octobus.net>
parents:
39916
diff
changeset
|
1191 rels.append(rel) |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1192 if rels: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1193 obsolete.createmarkers( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1194 repo, rels, operation=operation, metadata=metadata |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1195 ) |
41799
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1196 elif phases.supportinternal(repo) and mayusearchived: |
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1197 # this assume we do not have "unstable" nodes above the cleaned ones |
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1198 allreplaced = set() |
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1199 for ns in replacements.keys(): |
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1200 allreplaced.update(ns) |
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1201 if backup: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1202 from . import repair # avoid import cycle |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1203 |
41799
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1204 node = min(allreplaced, key=repo.changelog.rev) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1205 repair.backupbundle( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1206 repo, allreplaced, allreplaced, node, operation |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1207 ) |
41799
64de5f44eec3
rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents:
41781
diff
changeset
|
1208 phases.retractboundary(repo, tr, phases.archived, allreplaced) |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1209 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1210 from . import repair # avoid import cycle |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1211 |
39891
b99903534e06
scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents:
39890
diff
changeset
|
1212 tostrip = list(n for ns in replacements for n in ns) |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
34353
diff
changeset
|
1213 if tostrip: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1214 repair.delayedstrip( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1215 repo.ui, repo, tostrip, operation, backup=backup |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1216 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1217 |
33088
65cadeea6c22
scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents:
32659
diff
changeset
|
1218 |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
1219 def addremove(repo, matcher, prefix, uipathfn, opts=None): |
26329
d9537ce64f3a
addremove: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26328
diff
changeset
|
1220 if opts is None: |
d9537ce64f3a
addremove: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26328
diff
changeset
|
1221 opts = {} |
23533
891aaa7c0c70
scmutil: pass a matcher to scmutil.addremove() instead of a list of patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23481
diff
changeset
|
1222 m = matcher |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1223 dry_run = opts.get(b'dry_run') |
37306
6942c73f0733
addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents:
37271
diff
changeset
|
1224 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1225 similarity = float(opts.get(b'similarity') or 0) |
37306
6942c73f0733
addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents:
37271
diff
changeset
|
1226 except ValueError: |
48031
5b89626c11e9
errors: use InputError for bad --similarity value
Martin von Zweigbergk <martinvonz@google.com>
parents:
48030
diff
changeset
|
1227 raise error.InputError(_(b'similarity must be a number')) |
37306
6942c73f0733
addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents:
37271
diff
changeset
|
1228 if similarity < 0 or similarity > 100: |
48031
5b89626c11e9
errors: use InputError for bad --similarity value
Martin von Zweigbergk <martinvonz@google.com>
parents:
48030
diff
changeset
|
1229 raise error.InputError(_(b'similarity must be between 0 and 100')) |
37306
6942c73f0733
addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents:
37271
diff
changeset
|
1230 similarity /= 100.0 |
23533
891aaa7c0c70
scmutil: pass a matcher to scmutil.addremove() instead of a list of patterns
Matt Harbison <matt_harbison@yahoo.com>
parents:
23481
diff
changeset
|
1231 |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1232 ret = 0 |
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1233 |
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1234 wctx = repo[None] |
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1235 for subpath in sorted(wctx.substate): |
29802
35560189677c
subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents:
29771
diff
changeset
|
1236 submatch = matchmod.subdirmatcher(subpath, m) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1237 if opts.get(b'subrepos') or m.exact(subpath) or any(submatch.files()): |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1238 sub = wctx.sub(subpath) |
41629
5ee3c49fc9cd
subrepo: adjust subrepo prefix before calling subrepo.addremove() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41604
diff
changeset
|
1239 subprefix = repo.wvfs.reljoin(prefix, subpath) |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
1240 subuipathfn = subdiruipathfn(subpath, uipathfn) |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1241 try: |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41650
diff
changeset
|
1242 if sub.addremove(submatch, subprefix, subuipathfn, opts): |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1243 ret = 1 |
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1244 except error.LookupError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1245 repo.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1246 _(b"skipping missing subrepository: %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1247 % uipathfn(subpath) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1248 ) |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1249 |
16167
94a8396c9305
addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents:
16115
diff
changeset
|
1250 rejected = [] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1251 |
23534
83bbedc16b3f
addremove: warn when addremove fails to operate on a named path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23533
diff
changeset
|
1252 def badfn(f, msg): |
83bbedc16b3f
addremove: warn when addremove fails to operate on a named path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23533
diff
changeset
|
1253 if f in m.files(): |
25434
5984dd42e140
addremove: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25418
diff
changeset
|
1254 m.bad(f, msg) |
23534
83bbedc16b3f
addremove: warn when addremove fails to operate on a named path
Matt Harbison <matt_harbison@yahoo.com>
parents:
23533
diff
changeset
|
1255 rejected.append(f) |
16167
94a8396c9305
addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents:
16115
diff
changeset
|
1256 |
25434
5984dd42e140
addremove: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25418
diff
changeset
|
1257 badmatch = matchmod.badmatch(m, badfn) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1258 added, unknown, deleted, removed, forgotten = _interestingfiles( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1259 repo, badmatch |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1260 ) |
18863
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1261 |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1262 unknownset = set(unknown + forgotten) |
18863
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1263 toprint = unknownset.copy() |
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1264 toprint.update(deleted) |
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1265 for abs in sorted(toprint): |
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1266 if repo.ui.verbose or not m.exact(abs): |
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1267 if abs in unknownset: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1268 status = _(b'adding %s\n') % uipathfn(abs) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1269 label = b'ui.addremove.added' |
18863
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1270 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1271 status = _(b'removing %s\n') % uipathfn(abs) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1272 label = b'ui.addremove.removed' |
39088
ad88726d6982
addremove: add labels for messages about added and removed files
Boris Feld <boris.feld@octobus.net>
parents:
38856
diff
changeset
|
1273 repo.ui.status(status, label=label) |
18863
1b70e5941ad7
scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents:
18862
diff
changeset
|
1274 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1275 renames = _findrenames( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1276 repo, m, added + unknown, removed + deleted, similarity, uipathfn |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1277 ) |
14320 | 1278 |
1279 if not dry_run: | |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1280 _markchanges(repo, unknown + forgotten, deleted, renames) |
14320 | 1281 |
16167
94a8396c9305
addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents:
16115
diff
changeset
|
1282 for f in rejected: |
94a8396c9305
addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents:
16115
diff
changeset
|
1283 if f in m.files(): |
94a8396c9305
addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents:
16115
diff
changeset
|
1284 return 1 |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23534
diff
changeset
|
1285 return ret |
16167
94a8396c9305
addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents:
16115
diff
changeset
|
1286 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1287 |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1288 def marktouched(repo, files, similarity=0.0): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1289 """Assert that files have somehow been operated upon. files are relative to |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1290 the repo root.""" |
25467
f64dbe06f3d0
scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents:
25466
diff
changeset
|
1291 m = matchfiles(repo, files, badfn=lambda x, y: rejected.append(x)) |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1292 rejected = [] |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1293 |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1294 added, unknown, deleted, removed, forgotten = _interestingfiles(repo, m) |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1295 |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1296 if repo.ui.verbose: |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1297 unknownset = set(unknown + forgotten) |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1298 toprint = unknownset.copy() |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1299 toprint.update(deleted) |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1300 for abs in sorted(toprint): |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1301 if abs in unknownset: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1302 status = _(b'adding %s\n') % abs |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1303 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1304 status = _(b'removing %s\n') % abs |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1305 repo.ui.status(status) |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1306 |
41662
0a5a6675c86c
addremove: use uipathfn instead of m.rel() for recorded similatity message
Martin von Zweigbergk <martinvonz@google.com>
parents:
41652
diff
changeset
|
1307 # TODO: We should probably have the caller pass in uipathfn and apply it to |
41697
e21183db2259
scmutil: fix a comment that doesn't match the code
Martin von Zweigbergk <martinvonz@google.com>
parents:
41685
diff
changeset
|
1308 # the messages above too. legacyrelativevalue=True is consistent with how |
41662
0a5a6675c86c
addremove: use uipathfn instead of m.rel() for recorded similatity message
Martin von Zweigbergk <martinvonz@google.com>
parents:
41652
diff
changeset
|
1309 # it used to work. |
41685
b81ecf3571d5
addremove: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41684
diff
changeset
|
1310 uipathfn = getuipathfn(repo, legacyrelativevalue=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1311 renames = _findrenames( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1312 repo, m, added + unknown, removed + deleted, similarity, uipathfn |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1313 ) |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1314 |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1315 _markchanges(repo, unknown + forgotten, deleted, renames) |
19154
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1316 |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1317 for f in rejected: |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1318 if f in m.files(): |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1319 return 1 |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1320 return 0 |
0c7cf411b390
scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents:
19153
diff
changeset
|
1321 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1322 |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1323 def _interestingfiles(repo, matcher): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1324 """Walk dirstate with matcher, looking for files that addremove would care |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1325 about. |
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1326 |
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1327 This is different from dirstate.status because it doesn't care about |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1328 whether files are modified or clean.""" |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1329 added, unknown, deleted, removed, forgotten = [], [], [], [], [] |
33649
377e8ddaebef
pathauditor: disable cache of audited paths by default (issue5628)
Yuya Nishihara <yuya@tcha.org>
parents:
33542
diff
changeset
|
1330 audit_path = pathutil.pathauditor(repo.root, cached=True) |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1331 |
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1332 ctx = repo[None] |
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1333 dirstate = repo.dirstate |
40087
1d09ba0d2ed3
narrow: move remaining narrow-limited dirstate walks to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
40041
diff
changeset
|
1334 matcher = repo.narrowmatch(matcher, includeexact=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1335 walkresults = dirstate.walk( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1336 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1337 subrepos=sorted(ctx.substate), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1338 unknown=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1339 ignored=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1340 full=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1341 ) |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43089
diff
changeset
|
1342 for abs, st in pycompat.iteritems(walkresults): |
48098
ba79d99ec1ae
dirstate-item: use item's property instead of `state` in addremove
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48041
diff
changeset
|
1343 entry = dirstate.get_entry(abs) |
ba79d99ec1ae
dirstate-item: use item's property instead of `state` in addremove
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48041
diff
changeset
|
1344 if (not entry.any_tracked) and audit_path.check(abs): |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1345 unknown.append(abs) |
48098
ba79d99ec1ae
dirstate-item: use item's property instead of `state` in addremove
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48041
diff
changeset
|
1346 elif (not entry.removed) and not st: |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1347 deleted.append(abs) |
48098
ba79d99ec1ae
dirstate-item: use item's property instead of `state` in addremove
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48041
diff
changeset
|
1348 elif entry.removed and st: |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1349 forgotten.append(abs) |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1350 # for finding renames |
48098
ba79d99ec1ae
dirstate-item: use item's property instead of `state` in addremove
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48041
diff
changeset
|
1351 elif entry.removed and not st: |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1352 removed.append(abs) |
48098
ba79d99ec1ae
dirstate-item: use item's property instead of `state` in addremove
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48041
diff
changeset
|
1353 elif entry.added: |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1354 added.append(abs) |
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1355 |
23259
9f4778027bc2
addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
23142
diff
changeset
|
1356 return added, unknown, deleted, removed, forgotten |
19150
7a4eab2456de
scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents:
19070
diff
changeset
|
1357 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1358 |
41662
0a5a6675c86c
addremove: use uipathfn instead of m.rel() for recorded similatity message
Martin von Zweigbergk <martinvonz@google.com>
parents:
41652
diff
changeset
|
1359 def _findrenames(repo, matcher, added, removed, similarity, uipathfn): |
19152
7a1292523db3
scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents:
19151
diff
changeset
|
1360 '''Find renames from removed files to added ones.''' |
7a1292523db3
scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents:
19151
diff
changeset
|
1361 renames = {} |
7a1292523db3
scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents:
19151
diff
changeset
|
1362 if similarity > 0: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1363 for old, new, score in similar.findrenames( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1364 repo, added, removed, similarity |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1365 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1366 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1367 repo.ui.verbose |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1368 or not matcher.exact(old) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1369 or not matcher.exact(new) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1370 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1371 repo.ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1372 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1373 b'recording removal of %s as rename to %s ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1374 b'(%d%% similar)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1375 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1376 % (uipathfn(old), uipathfn(new), score * 100) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1377 ) |
19152
7a1292523db3
scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents:
19151
diff
changeset
|
1378 renames[new] = old |
7a1292523db3
scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents:
19151
diff
changeset
|
1379 return renames |
7a1292523db3
scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents:
19151
diff
changeset
|
1380 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1381 |
19153
9a4e219bda89
scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents:
19152
diff
changeset
|
1382 def _markchanges(repo, unknown, deleted, renames): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1383 """Marks the files in unknown as added, the files in deleted as removed, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1384 and the files in renames as copied.""" |
19153
9a4e219bda89
scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents:
19152
diff
changeset
|
1385 wctx = repo[None] |
27851
4133a306606c
with: use context manager in _markchanges
Bryan O'Sullivan <bryano@fb.com>
parents:
27706
diff
changeset
|
1386 with repo.wlock(): |
19153
9a4e219bda89
scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents:
19152
diff
changeset
|
1387 wctx.forget(deleted) |
9a4e219bda89
scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents:
19152
diff
changeset
|
1388 wctx.add(unknown) |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43089
diff
changeset
|
1389 for new, old in pycompat.iteritems(renames): |
19153
9a4e219bda89
scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents:
19152
diff
changeset
|
1390 wctx.copy(old, new) |
9a4e219bda89
scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents:
19152
diff
changeset
|
1391 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1392 |
41781
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1393 def getrenamedfn(repo, endrev=None): |
42115
27475ae67676
copies: extract function for deciding whether to use changeset-centric algos
Martin von Zweigbergk <martinvonz@google.com>
parents:
42114
diff
changeset
|
1394 if copiesmod.usechangesetcentricalgo(repo): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1395 |
42114
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1396 def getrenamed(fn, rev): |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1397 ctx = repo[rev] |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1398 p1copies = ctx.p1copies() |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1399 if fn in p1copies: |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1400 return p1copies[fn] |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1401 p2copies = ctx.p2copies() |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1402 if fn in p2copies: |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1403 return p2copies[fn] |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1404 return None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1405 |
42114
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1406 return getrenamed |
aa84bc48c2f7
getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents:
41938
diff
changeset
|
1407 |
41781
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1408 rcache = {} |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1409 if endrev is None: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1410 endrev = len(repo) |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1411 |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1412 def getrenamed(fn, rev): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1413 """looks up all renames for a file (up to endrev) the first |
41781
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1414 time the file is given. It indexes on the changerev and only |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1415 parses the manifest if linkrev != changerev. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1416 Returns rename info for fn at changerev rev.""" |
41781
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1417 if fn not in rcache: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1418 rcache[fn] = {} |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1419 fl = repo.file(fn) |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1420 for i in fl: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1421 lr = fl.linkrev(i) |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1422 renamed = fl.renamed(fl.node(i)) |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1423 rcache[fn][lr] = renamed and renamed[0] |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1424 if lr >= endrev: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1425 break |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1426 if rev in rcache[fn]: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1427 return rcache[fn][rev] |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1428 |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1429 # If linkrev != rev (i.e. rev not found in rcache) fallback to |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1430 # filectx logic. |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1431 try: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1432 return repo[rev][fn].copysource() |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1433 except error.LookupError: |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1434 return None |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1435 |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1436 return getrenamed |
e9b9ee9af4a9
templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41697
diff
changeset
|
1437 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1438 |
42503
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1439 def getcopiesfn(repo, endrev=None): |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1440 if copiesmod.usechangesetcentricalgo(repo): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1441 |
42503
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1442 def copiesfn(ctx): |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1443 if ctx.p2copies(): |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1444 allcopies = ctx.p1copies().copy() |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1445 # There should be no overlap |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1446 allcopies.update(ctx.p2copies()) |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1447 return sorted(allcopies.items()) |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1448 else: |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1449 return sorted(ctx.p1copies().items()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1450 |
42503
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1451 else: |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1452 getrenamed = getrenamedfn(repo, endrev) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1453 |
42503
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1454 def copiesfn(ctx): |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1455 copies = [] |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1456 for fn in ctx.files(): |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1457 rename = getrenamed(fn, ctx.rev()) |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1458 if rename: |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1459 copies.append((fn, rename)) |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1460 return copies |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1461 |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1462 return copiesfn |
88ba0ff94605
copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents:
42115
diff
changeset
|
1463 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1464 |
14320 | 1465 def dirstatecopy(ui, repo, wctx, src, dst, dryrun=False, cwd=None): |
1466 """Update the dirstate to reflect the intent of copying src to dst. For | |
1467 different reasons it might not end with dst being marked as copied from src. | |
1468 """ | |
1469 origsrc = repo.dirstate.copied(src) or src | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1470 if dst == origsrc: # copying back a copy? |
48103
8f452fecd0a4
dirstate-item: use item's property when computing a copies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48098
diff
changeset
|
1471 entry = repo.dirstate.get_entry(dst) |
8f452fecd0a4
dirstate-item: use item's property when computing a copies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48098
diff
changeset
|
1472 if (entry.added or not entry.tracked) and not dryrun: |
47729
b66ae4468c9a
copy: use `set_tracked` instead of `normallookup` in `dirstatecopy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47693
diff
changeset
|
1473 repo.dirstate.set_tracked(dst) |
14320 | 1474 else: |
48103
8f452fecd0a4
dirstate-item: use item's property when computing a copies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48098
diff
changeset
|
1475 if repo.dirstate.get_entry(origsrc).added and origsrc == src: |
14320 | 1476 if not ui.quiet: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1477 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1478 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1479 b"%s has not been committed yet, so no copy " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1480 b"data will be stored for %s.\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1481 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1482 % (repo.pathto(origsrc, cwd), repo.pathto(dst, cwd)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1483 ) |
48103
8f452fecd0a4
dirstate-item: use item's property when computing a copies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48098
diff
changeset
|
1484 if not repo.dirstate.get_entry(dst).tracked and not dryrun: |
14320 | 1485 wctx.add([dst]) |
1486 elif not dryrun: | |
1487 wctx.copy(origsrc, dst) | |
14482
58b36e9ea783
introduce new function scmutil.readrequires
Adrian Buehlmann <adrian@cadifra.com>
parents:
14435
diff
changeset
|
1488 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1489 |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1490 def movedirstate(repo, newctx, match=None): |
41938
ad4a3e2eedb3
scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41937
diff
changeset
|
1491 """Move the dirstate to newctx and adjust it as necessary. |
ad4a3e2eedb3
scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41937
diff
changeset
|
1492 |
ad4a3e2eedb3
scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41937
diff
changeset
|
1493 A matcher can be provided as an optimization. It is probably a bug to pass |
ad4a3e2eedb3
scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41937
diff
changeset
|
1494 a matcher that doesn't match all the differences between the parent of the |
ad4a3e2eedb3
scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41937
diff
changeset
|
1495 working copy and newctx. |
ad4a3e2eedb3
scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41937
diff
changeset
|
1496 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1497 oldctx = repo[b'.'] |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1498 ds = repo.dirstate |
44038
0750cbffdb3b
movedirstate: get copies from dirstate before setting parents
Martin von Zweigbergk <martinvonz@google.com>
parents:
44013
diff
changeset
|
1499 copies = dict(ds.copies()) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46976
diff
changeset
|
1500 ds.setparents(newctx.node(), repo.nullid) |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1501 s = newctx.status(oldctx, match=match) |
47592
0f5c203eb5ab
dirstate: add a function to update tracking status while "moving" parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47295
diff
changeset
|
1502 |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1503 for f in s.modified: |
47693
46c318b9b9a4
dirstate: rename `update_file_reference` to `update_file_p1`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47592
diff
changeset
|
1504 ds.update_file_p1(f, p1_tracked=True) |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1505 |
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1506 for f in s.added: |
47693
46c318b9b9a4
dirstate: rename `update_file_reference` to `update_file_p1`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47592
diff
changeset
|
1507 ds.update_file_p1(f, p1_tracked=False) |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1508 |
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1509 for f in s.removed: |
47693
46c318b9b9a4
dirstate: rename `update_file_reference` to `update_file_p1`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47592
diff
changeset
|
1510 ds.update_file_p1(f, p1_tracked=True) |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1511 |
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1512 # Merge old parent and old working dir copies |
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1513 oldcopies = copiesmod.pathcopies(newctx, oldctx, match) |
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1514 oldcopies.update(copies) |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44104
diff
changeset
|
1515 copies = { |
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44104
diff
changeset
|
1516 dst: oldcopies.get(src, src) |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43089
diff
changeset
|
1517 for dst, src in pycompat.iteritems(oldcopies) |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44104
diff
changeset
|
1518 } |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1519 # Adjust the dirstate copies |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43089
diff
changeset
|
1520 for dst, src in pycompat.iteritems(copies): |
48105
207df24a31f6
dirstate-item: use `added` instead of `state` when moving dirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48103
diff
changeset
|
1521 if src not in newctx or dst in newctx or not ds.get_entry(dst).added: |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1522 src = None |
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1523 ds.copy(src, dst) |
44104
85c4cd73996b
localrepo: also fastpath access to working copy parents when possible
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44075
diff
changeset
|
1524 repo._quick_access_changeid_invalidate() |
41937
232d4b9d391a
uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents:
41799
diff
changeset
|
1525 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1526 |
45482
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1527 def filterrequirements(requirements): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1528 """filters the requirements into two sets: |
45482
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1529 |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1530 wcreq: requirements which should be written in .hg/requires |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1531 storereq: which should be written in .hg/store/requires |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1532 |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1533 Returns (wcreq, storereq) |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1534 """ |
45483
d252f51ab032
share: introduce config option to store requires in .hg/store
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45482
diff
changeset
|
1535 if requirementsmod.SHARESAFE_REQUIREMENT in requirements: |
45482
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1536 wc, store = set(), set() |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1537 for r in requirements: |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1538 if r in requirementsmod.WORKING_DIR_REQUIREMENTS: |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1539 wc.add(r) |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1540 else: |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1541 store.add(r) |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1542 return wc, store |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1543 return requirements, None |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1544 |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1545 |
45552
10284ce3d5ed
scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
1546 def istreemanifest(repo): |
47062
f38bf44e077f
black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents:
46976
diff
changeset
|
1547 """returns whether the repository is using treemanifest or not""" |
45552
10284ce3d5ed
scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
1548 return requirementsmod.TREEMANIFEST_REQUIREMENT in repo.requirements |
10284ce3d5ed
scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
1549 |
10284ce3d5ed
scmutil: introduce function to check whether repo uses treemanifest or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45519
diff
changeset
|
1550 |
45106
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45072
diff
changeset
|
1551 def writereporequirements(repo, requirements=None): |
46242
cb12658bf0e1
scmutil: improve documentation of writereporequirements()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46116
diff
changeset
|
1552 """writes requirements for the repo |
cb12658bf0e1
scmutil: improve documentation of writereporequirements()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46116
diff
changeset
|
1553 |
cb12658bf0e1
scmutil: improve documentation of writereporequirements()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46116
diff
changeset
|
1554 Requirements are written to .hg/requires and .hg/store/requires based |
cb12658bf0e1
scmutil: improve documentation of writereporequirements()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46116
diff
changeset
|
1555 on whether share-safe mode is enabled and which requirements are wdir |
cb12658bf0e1
scmutil: improve documentation of writereporequirements()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46116
diff
changeset
|
1556 requirements and which are store requirements |
cb12658bf0e1
scmutil: improve documentation of writereporequirements()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46116
diff
changeset
|
1557 """ |
45106
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45072
diff
changeset
|
1558 if requirements: |
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45072
diff
changeset
|
1559 repo.requirements = requirements |
45482
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1560 wcreq, storereq = filterrequirements(repo.requirements) |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1561 if wcreq is not None: |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1562 writerequires(repo.vfs, wcreq) |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1563 if storereq is not None: |
9a99ab8217bd
scmutil: introduce filterrequirements() to split reqs into wc and store ones
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
1564 writerequires(repo.svfs, storereq) |
45919
aba4f2c97e74
scmutil: try-delete `.hg/store/requires` if store requirements are empty
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45915
diff
changeset
|
1565 elif repo.ui.configbool(b'format', b'usestore'): |
aba4f2c97e74
scmutil: try-delete `.hg/store/requires` if store requirements are empty
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45915
diff
changeset
|
1566 # only remove store requires if we are using store |
aba4f2c97e74
scmutil: try-delete `.hg/store/requires` if store requirements are empty
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45915
diff
changeset
|
1567 repo.svfs.tryunlink(b'requires') |
45106
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45072
diff
changeset
|
1568 |
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45072
diff
changeset
|
1569 |
24934
5abd0a76bc8f
requires: move requires file writing func from localrepo to scmutil
Drew Gottlieb <drgott@google.com>
parents:
24755
diff
changeset
|
1570 def writerequires(opener, requirements): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1571 with opener(b'requires', b'w', atomictemp=True) as fp: |
27706
22e362da27cf
scmutil: use context managers for file handles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27651
diff
changeset
|
1572 for r in sorted(requirements): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1573 fp.write(b"%s\n" % r) |
24934
5abd0a76bc8f
requires: move requires file writing func from localrepo to scmutil
Drew Gottlieb <drgott@google.com>
parents:
24755
diff
changeset
|
1574 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1575 |
20043
88bd8df008f2
scmutil: rename filecacheentry to filecachesubentry
Siddharth Agarwal <sid0@fb.com>
parents:
20042
diff
changeset
|
1576 class filecachesubentry(object): |
20042
9a72d3886888
scmutil.filecacheentry: make stat argument to constructor mandatory
Siddharth Agarwal <sid0@fb.com>
parents:
20033
diff
changeset
|
1577 def __init__(self, path, stat): |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1578 self.path = path |
18315
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1579 self.cachestat = None |
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1580 self._cacheable = None |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1581 |
18315
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1582 if stat: |
20043
88bd8df008f2
scmutil: rename filecacheentry to filecachesubentry
Siddharth Agarwal <sid0@fb.com>
parents:
20042
diff
changeset
|
1583 self.cachestat = filecachesubentry.stat(self.path) |
18315
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1584 |
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1585 if self.cachestat: |
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1586 self._cacheable = self.cachestat.cacheable() |
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1587 else: |
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1588 # None means we don't know yet |
216230643ae2
filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents:
18213
diff
changeset
|
1589 self._cacheable = None |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1590 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1591 def refresh(self): |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1592 if self.cacheable(): |
20043
88bd8df008f2
scmutil: rename filecacheentry to filecachesubentry
Siddharth Agarwal <sid0@fb.com>
parents:
20042
diff
changeset
|
1593 self.cachestat = filecachesubentry.stat(self.path) |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1594 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1595 def cacheable(self): |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1596 if self._cacheable is not None: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1597 return self._cacheable |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1598 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1599 # we don't know yet, assume it is for now |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1600 return True |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1601 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1602 def changed(self): |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1603 # no point in going further if we can't cache it |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1604 if not self.cacheable(): |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1605 return True |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1606 |
20043
88bd8df008f2
scmutil: rename filecacheentry to filecachesubentry
Siddharth Agarwal <sid0@fb.com>
parents:
20042
diff
changeset
|
1607 newstat = filecachesubentry.stat(self.path) |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1608 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1609 # we may not know if it's cacheable yet, check again now |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1610 if newstat and self._cacheable is None: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1611 self._cacheable = newstat.cacheable() |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1612 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1613 # check again |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1614 if not self._cacheable: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1615 return True |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1616 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1617 if self.cachestat != newstat: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1618 self.cachestat = newstat |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1619 return True |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1620 else: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1621 return False |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1622 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1623 @staticmethod |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1624 def stat(path): |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1625 try: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1626 return util.cachestat(path) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25658
diff
changeset
|
1627 except OSError as e: |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1628 if e.errno != errno.ENOENT: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1629 raise |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1630 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1631 |
20044
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1632 class filecacheentry(object): |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1633 def __init__(self, paths, stat=True): |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1634 self._entries = [] |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1635 for path in paths: |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1636 self._entries.append(filecachesubentry(path, stat)) |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1637 |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1638 def changed(self): |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1639 '''true if any entry has changed''' |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1640 for entry in self._entries: |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1641 if entry.changed(): |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1642 return True |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1643 return False |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1644 |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1645 def refresh(self): |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1646 for entry in self._entries: |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1647 entry.refresh() |
d38de18d187a
scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents:
20043
diff
changeset
|
1648 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1649 |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1650 class filecache(object): |
38676
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1651 """A property like decorator that tracks files under .hg/ for updates. |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1652 |
38676
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1653 On first access, the files defined as arguments are stat()ed and the |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1654 results cached. The decorated function is called. The results are stashed |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1655 away in a ``_filecache`` dict on the object whose method is decorated. |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1656 |
40424
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1657 On subsequent access, the cached result is used as it is set to the |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1658 instance dictionary. |
38676
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1659 |
40424
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1660 On external property set/delete operations, the caller must update the |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1661 corresponding _filecache entry appropriately. Use __class__.<attr>.set() |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1662 instead of directly setting <attr>. |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1663 |
40424
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1664 When using the property API, the cached data is always used if available. |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1665 No stat() is performed to check if the file has changed. |
20045
b3684fd2ff1a
scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents:
20044
diff
changeset
|
1666 |
38676
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1667 Others can muck about with the state of the ``_filecache`` dict. e.g. they |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1668 can populate an entry before the property's getter is called. In this case, |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1669 entries in ``_filecache`` will be used during property operations, |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1670 if available. If the underlying file changes, it is up to external callers |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1671 to reflect this by e.g. calling ``delattr(obj, attr)`` to remove the cached |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1672 method result as well as possibly calling ``del obj._filecache[attr]`` to |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1673 remove the ``filecacheentry``. |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1674 """ |
3b072388ca78
scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38659
diff
changeset
|
1675 |
20045
b3684fd2ff1a
scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents:
20044
diff
changeset
|
1676 def __init__(self, *paths): |
b3684fd2ff1a
scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents:
20044
diff
changeset
|
1677 self.paths = paths |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1678 |
48041
37a41267d000
branching: merge stable into default
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48031
diff
changeset
|
1679 def tracked_paths(self, obj): |
37a41267d000
branching: merge stable into default
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48031
diff
changeset
|
1680 return [self.join(obj, path) for path in self.paths] |
37a41267d000
branching: merge stable into default
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48031
diff
changeset
|
1681 |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1682 def join(self, obj, fname): |
20045
b3684fd2ff1a
scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents:
20044
diff
changeset
|
1683 """Used to compute the runtime path of a cached file. |
16198
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1684 |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1685 Users should subclass filecache and provide their own version of this |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1686 function to call the appropriate join function on 'obj' (an instance |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1687 of the class that its member function was decorated). |
fa8488565afd
filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents:
16115
diff
changeset
|
1688 """ |
31285
1937671105bc
filecache: make 'join' abstract
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31217
diff
changeset
|
1689 raise NotImplementedError |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1690 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1691 def __call__(self, func): |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1692 self.func = func |
37869
73a74f29eb87
scmutil: clean up bytes/string cache decorator mess on Python 3 again
Augie Fackler <augie@google.com>
parents:
37868
diff
changeset
|
1693 self.sname = func.__name__ |
73a74f29eb87
scmutil: clean up bytes/string cache decorator mess on Python 3 again
Augie Fackler <augie@google.com>
parents:
37868
diff
changeset
|
1694 self.name = pycompat.sysbytes(self.sname) |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1695 return self |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1696 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1697 def __get__(self, obj, type=None): |
29373
36fbd72c2f39
scmutil: allow access to filecache descriptor on class
Martijn Pieters <mjpieters@fb.com>
parents:
29367
diff
changeset
|
1698 # if accessed on the class, return the descriptor itself. |
36fbd72c2f39
scmutil: allow access to filecache descriptor on class
Martijn Pieters <mjpieters@fb.com>
parents:
29367
diff
changeset
|
1699 if obj is None: |
36fbd72c2f39
scmutil: allow access to filecache descriptor on class
Martijn Pieters <mjpieters@fb.com>
parents:
29367
diff
changeset
|
1700 return self |
40424
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1701 |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1702 assert self.sname not in obj.__dict__ |
16115
236bb604dc39
scmutil: update cached copy when filecached attribute is assigned (issue3263)
Idan Kamara <idankk86@gmail.com>
parents:
16068
diff
changeset
|
1703 |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1704 entry = obj._filecache.get(self.name) |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1705 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1706 if entry: |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1707 if entry.changed(): |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1708 entry.obj = self.func(obj) |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1709 else: |
48041
37a41267d000
branching: merge stable into default
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48031
diff
changeset
|
1710 paths = self.tracked_paths(obj) |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1711 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1712 # We stat -before- creating the object so our cache doesn't lie if |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1713 # a writer modified between the time we read and stat |
20045
b3684fd2ff1a
scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents:
20044
diff
changeset
|
1714 entry = filecacheentry(paths, True) |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1715 entry.obj = self.func(obj) |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1716 |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1717 obj._filecache[self.name] = entry |
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1718 |
37869
73a74f29eb87
scmutil: clean up bytes/string cache decorator mess on Python 3 again
Augie Fackler <augie@google.com>
parents:
37868
diff
changeset
|
1719 obj.__dict__[self.sname] = entry.obj |
14928
dca59d5be12d
scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents:
14861
diff
changeset
|
1720 return entry.obj |
16115
236bb604dc39
scmutil: update cached copy when filecached attribute is assigned (issue3263)
Idan Kamara <idankk86@gmail.com>
parents:
16068
diff
changeset
|
1721 |
40424
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1722 # don't implement __set__(), which would make __dict__ lookup as slow as |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1723 # function call. |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1724 |
7caf632e30c3
filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents:
40423
diff
changeset
|
1725 def set(self, obj, value): |
18316
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1726 if self.name not in obj._filecache: |
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1727 # we add an entry for the missing value because X in __dict__ |
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1728 # implies X in _filecache |
48041
37a41267d000
branching: merge stable into default
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48031
diff
changeset
|
1729 paths = self.tracked_paths(obj) |
20045
b3684fd2ff1a
scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents:
20044
diff
changeset
|
1730 ce = filecacheentry(paths, False) |
18316
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1731 obj._filecache[self.name] = ce |
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1732 else: |
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1733 ce = obj._filecache[self.name] |
f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Idan Kamara <idankk86@gmail.com>
parents:
18315
diff
changeset
|
1734 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1735 ce.obj = value # update cached copy |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1736 obj.__dict__[self.sname] = value # update copy returned by obj.x |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1737 |
16115
236bb604dc39
scmutil: update cached copy when filecached attribute is assigned (issue3263)
Idan Kamara <idankk86@gmail.com>
parents:
16068
diff
changeset
|
1738 |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1739 def extdatasource(repo, source): |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1740 """Gather a map of rev -> value dict from the specified source |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1741 |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1742 A source spec is treated as a URL, with a special case shell: type |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1743 for parsing the output from a shell command. |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1744 |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1745 The data is parsed as a series of newline-separated records where |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1746 each record is a revision specifier optionally followed by a space |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1747 and a freeform string value. If the revision is known locally, it |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1748 is converted to a rev, otherwise the record is skipped. |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1749 |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1750 Note that both key and value are treated as UTF-8 and converted to |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1751 the local encoding. This allows uniformity between local and |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1752 remote data sources. |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1753 """ |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1754 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1755 spec = repo.ui.config(b"extdata", source) |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1756 if not spec: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1757 raise error.Abort(_(b"unknown extdata source '%s'") % source) |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1758 |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1759 data = {} |
34461
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1760 src = proc = None |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1761 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1762 if spec.startswith(b"shell:"): |
34461
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1763 # external commands should be run relative to the repo root |
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1764 cmd = spec[6:] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1765 proc = subprocess.Popen( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1766 procutil.tonativestr(cmd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1767 shell=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1768 bufsize=-1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1769 close_fds=procutil.closefds, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1770 stdout=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1771 cwd=procutil.tonativestr(repo.root), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1772 ) |
34461
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1773 src = proc.stdout |
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1774 else: |
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1775 # treat as a URL or file |
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1776 src = url.open(repo.ui, spec) |
34460
910adadf08e8
extdata: just use iterator to read lines one by one
Yuya Nishihara <yuya@tcha.org>
parents:
34459
diff
changeset
|
1777 for l in src: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1778 if b" " in l: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1779 k, v = l.strip().split(b" ", 1) |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1780 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1781 k, v = l.strip(), b"" |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1782 |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1783 k = encoding.tolocal(k) |
34459
d5c5cc767b7e
extdata: ignore ambiguous identifier as well
Yuya Nishihara <yuya@tcha.org>
parents:
34456
diff
changeset
|
1784 try: |
37360
d0d55980ffa7
extdatasource: use revsymbol() for converting to node
Martin von Zweigbergk <martinvonz@google.com>
parents:
37350
diff
changeset
|
1785 data[revsingle(repo, k).rev()] = encoding.tolocal(v) |
46115
be3d8178251e
errors: raise InputError if an ambiguous revision id prefix is used
Martin von Zweigbergk <martinvonz@google.com>
parents:
46096
diff
changeset
|
1786 except (error.LookupError, error.RepoLookupError, error.InputError): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1787 pass # we ignore data for nodes that don't exist locally |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1788 finally: |
34461
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1789 if proc: |
42576
ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents:
42503
diff
changeset
|
1790 try: |
ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents:
42503
diff
changeset
|
1791 proc.communicate() |
ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents:
42503
diff
changeset
|
1792 except ValueError: |
ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents:
42503
diff
changeset
|
1793 # This happens if we started iterating src and then |
ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents:
42503
diff
changeset
|
1794 # get a parse error on a line. It should be safe to ignore. |
ea6558db1011
extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents:
42503
diff
changeset
|
1795 pass |
34461
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1796 if src: |
c67db5dc131d
extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents:
34460
diff
changeset
|
1797 src.close() |
35412
b1959391a088
extdata: abort if external command exits with non-zero status (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
35308
diff
changeset
|
1798 if proc and proc.returncode != 0: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1799 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1800 _(b"extdata command '%s' failed: %s") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1801 % (cmd, procutil.explainexit(proc.returncode)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1802 ) |
34456
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1803 |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1804 return data |
7757cc48b766
extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents:
34367
diff
changeset
|
1805 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1806 |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1807 class progress(object): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1808 def __init__(self, ui, updatebar, topic, unit=b"", total=None): |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1809 self.ui = ui |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1810 self.pos = 0 |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1811 self.topic = topic |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1812 self.unit = unit |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1813 self.total = total |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1814 self.debug = ui.configbool(b'progress', b'debug') |
41145
963462786f6e
progress: check what type of progress bar to use only once per topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
41144
diff
changeset
|
1815 self._updatebar = updatebar |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1816 |
38374
800f5a2c869e
progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents:
38373
diff
changeset
|
1817 def __enter__(self): |
38503
077301ac69dc
scmutil: fix __enter__ in progress context manager
Danny Hooper <hooper@google.com>
parents:
38456
diff
changeset
|
1818 return self |
38374
800f5a2c869e
progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents:
38373
diff
changeset
|
1819 |
800f5a2c869e
progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents:
38373
diff
changeset
|
1820 def __exit__(self, exc_type, exc_value, exc_tb): |
800f5a2c869e
progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents:
38373
diff
changeset
|
1821 self.complete() |
800f5a2c869e
progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents:
38373
diff
changeset
|
1822 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1823 def update(self, pos, item=b"", total=None): |
38419
6dea017eb6ba
progress: enforce use of complete() on the helper class
Martin von Zweigbergk <martinvonz@google.com>
parents:
38374
diff
changeset
|
1824 assert pos is not None |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1825 if total: |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1826 self.total = total |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1827 self.pos = pos |
41209
b223fc1c6b4c
progress: change _updatebar() to take parameters as arguments
Yuya Nishihara <yuya@tcha.org>
parents:
41145
diff
changeset
|
1828 self._updatebar(self.topic, self.pos, item, self.unit, self.total) |
41144
3025fd3c2e71
progress: split up _print() method in bar-updating and debug-printing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41143
diff
changeset
|
1829 if self.debug: |
3025fd3c2e71
progress: split up _print() method in bar-updating and debug-printing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41143
diff
changeset
|
1830 self._printdebug(item) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1831 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1832 def increment(self, step=1, item=b"", total=None): |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1833 self.update(self.pos + step, item, total) |
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1834 |
38373
ef692614e601
progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
38345
diff
changeset
|
1835 def complete(self): |
41142
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
1836 self.pos = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1837 self.unit = b"" |
41142
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
1838 self.total = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1839 self._updatebar(self.topic, self.pos, b"", self.unit, self.total) |
38373
ef692614e601
progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
38345
diff
changeset
|
1840 |
41144
3025fd3c2e71
progress: split up _print() method in bar-updating and debug-printing
Martin von Zweigbergk <martinvonz@google.com>
parents:
41143
diff
changeset
|
1841 def _printdebug(self, item): |
44063
089255b1341e
scmutil: fix an unbound variable with progressbar debug enabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
44060
diff
changeset
|
1842 unit = b'' |
41142
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
1843 if self.unit: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1844 unit = b' ' + self.unit |
41142
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
1845 if item: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1846 item = b' ' + item |
41142
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
1847 |
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
1848 if self.total: |
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
1849 pct = 100.0 * self.pos / self.total |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1850 self.ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1851 b'%s:%s %d/%d%s (%4.2f%%)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1852 % (self.topic, item, self.pos, self.total, unit, pct) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1853 ) |
41142
8cf92ca92bfe
progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40884
diff
changeset
|
1854 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1855 self.ui.debug(b'%s:%s %d%s\n' % (self.topic, item, self.pos, unit)) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38331
diff
changeset
|
1856 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1857 |
26906
e40af07e518e
scmutil: extract general delta config handling in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26836
diff
changeset
|
1858 def gdinitconfig(ui): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1859 """helper function to know if a repo should be created as general delta""" |
26907
dfab6edb98e3
format: introduce 'format.usegeneraldelta`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26906
diff
changeset
|
1860 # experimental config: format.generaldelta |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1861 return ui.configbool(b'format', b'generaldelta') or ui.configbool( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1862 b'format', b'usegeneraldelta' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1863 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1864 |
26906
e40af07e518e
scmutil: extract general delta config handling in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26836
diff
changeset
|
1865 |
26907
dfab6edb98e3
format: introduce 'format.usegeneraldelta`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26906
diff
changeset
|
1866 def gddeltaconfig(ui): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45919
diff
changeset
|
1867 """helper function to know if incoming delta should be optimised""" |
26906
e40af07e518e
scmutil: extract general delta config handling in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26836
diff
changeset
|
1868 # experimental config: format.generaldelta |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1869 return ui.configbool(b'format', b'generaldelta') |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1870 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1871 |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1872 class simplekeyvaluefile(object): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1873 """A simple file with key=value lines |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1874 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1875 Keys must be alphanumerics and start with a letter, values must not |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1876 contain '\n' characters""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1877 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1878 firstlinekey = b'__firstline' |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1879 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1880 def __init__(self, vfs, path, keys=None): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1881 self.vfs = vfs |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1882 self.path = path |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1883 |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1884 def read(self, firstlinenonkeyval=False): |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1885 """Read the contents of a simple key-value file |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1886 |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1887 'firstlinenonkeyval' indicates whether the first line of file should |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1888 be treated as a key-value pair or reuturned fully under the |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1889 __firstline key.""" |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1890 lines = self.vfs.readlines(self.path) |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1891 d = {} |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1892 if firstlinenonkeyval: |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1893 if not lines: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1894 e = _(b"empty simplekeyvalue file") |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1895 raise error.CorruptedState(e) |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1896 # we don't want to include '\n' in the __firstline |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1897 d[self.firstlinekey] = lines[0][:-1] |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1898 del lines[0] |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1899 |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1900 try: |
32269
ed2c44741190
scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents:
32172
diff
changeset
|
1901 # the 'if line.strip()' part prevents us from failing on empty |
ed2c44741190
scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents:
32172
diff
changeset
|
1902 # lines which only contain '\n' therefore are not skipped |
ed2c44741190
scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents:
32172
diff
changeset
|
1903 # by 'if line' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1904 updatedict = dict( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1905 line[:-1].split(b'=', 1) for line in lines if line.strip() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1906 ) |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1907 if self.firstlinekey in updatedict: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1908 e = _(b"%r can't be used as a key") |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1909 raise error.CorruptedState(e % self.firstlinekey) |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1910 d.update(updatedict) |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1911 except ValueError as e: |
43365
899e55e2d375
py3: fix exception message encoding in scmutil.py's simplekeyvaluefile.read
Emmanuel Leblond <emmanuel.leblond@gmail.com>
parents:
43147
diff
changeset
|
1912 raise error.CorruptedState(stringutil.forcebytestr(e)) |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1913 return d |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1914 |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1915 def write(self, data, firstline=None): |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1916 """Write key=>value mapping to a file |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1917 data is a dict. Keys must be alphanumerical and start with a letter. |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1918 Values must not contain newline characters. |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1919 |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1920 If 'firstline' is not None, it is written to file before |
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1921 everything else, as it is, not in a key=value form""" |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1922 lines = [] |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1923 if firstline is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1924 lines.append(b'%s\n' % firstline) |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1925 |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1926 for k, v in data.items(): |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1927 if k == self.firstlinekey: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1928 e = b"key name '%s' is reserved" % self.firstlinekey |
32270
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32269
diff
changeset
|
1929 raise error.ProgrammingError(e) |
35913
558e01a23f40
py3: slice on bytes to prevent getting the ascii values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35888
diff
changeset
|
1930 if not k[0:1].isalpha(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1931 e = b"keys must start with a letter in a key-value file" |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1932 raise error.ProgrammingError(e) |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1933 if not k.isalnum(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1934 e = b"invalid key name in a simple key-value file" |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1935 raise error.ProgrammingError(e) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1936 if b'\n' in v: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1937 e = b"invalid value in a simple key-value file" |
31553
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
31419
diff
changeset
|
1938 raise error.ProgrammingError(e) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1939 lines.append(b"%s=%s\n" % (k, v)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1940 with self.vfs(self.path, mode=b'wb', atomictemp=True) as fp: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1941 fp.write(b''.join(lines)) |
33252
53b3a1968aa6
obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33246
diff
changeset
|
1942 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1943 |
33541
b47fef6d2365
transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents:
33511
diff
changeset
|
1944 _reportobsoletedsource = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1945 b'debugobsolete', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1946 b'pull', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1947 b'push', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1948 b'serve', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1949 b'unbundle', |
33541
b47fef6d2365
transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents:
33511
diff
changeset
|
1950 ] |
b47fef6d2365
transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents:
33511
diff
changeset
|
1951 |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
1952 _reportnewcssource = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1953 b'pull', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1954 b'unbundle', |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
1955 ] |
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
1956 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1957 |
45072
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1958 def prefetchfiles(repo, revmatches): |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37709
diff
changeset
|
1959 """Invokes the registered file prefetch functions, allowing extensions to |
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37709
diff
changeset
|
1960 ensure the corresponding files are available locally, before the command |
45072
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1961 uses them. |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1962 |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1963 Args: |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1964 revmatches: a list of (revision, match) tuples to indicate the files to |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1965 fetch at each revision. If any of the match elements is None, it matches |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1966 all files. |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1967 """ |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37709
diff
changeset
|
1968 |
45072
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1969 def _matcher(m): |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1970 if m: |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1971 assert isinstance(m, matchmod.basematcher) |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1972 # The command itself will complain about files that don't exist, so |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1973 # don't duplicate the message. |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1974 return matchmod.badmatch(m, lambda fn, msg: None) |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1975 else: |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1976 return matchall(repo) |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1977 |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1978 revbadmatches = [(rev, _matcher(match)) for (rev, match) in revmatches] |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1979 |
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44884
diff
changeset
|
1980 fileprefetchhooks(repo, revbadmatches) |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37709
diff
changeset
|
1981 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1982 |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37709
diff
changeset
|
1983 # a list of (repo, revs, match) prefetch functions |
36137
f52a9336ac5f
cmdutil: convert the prefetchfiles() hook to a callback mechanism (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35913
diff
changeset
|
1984 fileprefetchhooks = util.hooks() |
f52a9336ac5f
cmdutil: convert the prefetchfiles() hook to a callback mechanism (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35913
diff
changeset
|
1985 |
35709
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
1986 # A marker that tells the evolve extension to suppress its own reporting |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
1987 _reportstroubledchangesets = True |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
1988 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1989 |
44544
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
1990 def registersummarycallback(repo, otr, txnname=b'', as_validator=False): |
33252
53b3a1968aa6
obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33246
diff
changeset
|
1991 """register a callback to issue a summary after the transaction is closed |
44544
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
1992 |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
1993 If as_validator is true, then the callbacks are registered as transaction |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
1994 validators instead |
33252
53b3a1968aa6
obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33246
diff
changeset
|
1995 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
1996 |
34619
18309380fb88
scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34543
diff
changeset
|
1997 def txmatch(sources): |
18309380fb88
scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34543
diff
changeset
|
1998 return any(txnname.startswith(source) for source in sources) |
18309380fb88
scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34543
diff
changeset
|
1999 |
34620
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2000 categories = [] |
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2001 |
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2002 def reportsummary(func): |
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2003 """decorator for report callbacks.""" |
35035
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2004 # The repoview life cycle is shorter than the one of the actual |
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2005 # underlying repository. So the filtered object can die before the |
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2006 # weakref is used leading to troubles. We keep a reference to the |
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2007 # unfiltered object and restore the filtering when retrieving the |
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2008 # repository through the weakref. |
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2009 filtername = repo.filtername |
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2010 reporef = weakref.ref(repo.unfiltered()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2011 |
34620
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2012 def wrapped(tr): |
34619
18309380fb88
scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34543
diff
changeset
|
2013 repo = reporef() |
35035
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2014 if filtername: |
43727
5b90a050082b
scmutil: add assertions to help pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
43654
diff
changeset
|
2015 assert repo is not None # help pytype |
35035
96dcc78468e3
tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
35009
diff
changeset
|
2016 repo = repo.filtered(filtername) |
34620
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2017 func(repo, tr) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2018 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2019 newcat = b'%02i-txnreport' % len(categories) |
44544
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2020 if as_validator: |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2021 otr.addvalidator(newcat, wrapped) |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2022 else: |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2023 otr.addpostclose(newcat, wrapped) |
34620
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2024 categories.append(newcat) |
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2025 return wrapped |
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2026 |
42897
d7304434390f
changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42894
diff
changeset
|
2027 @reportsummary |
d7304434390f
changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42894
diff
changeset
|
2028 def reportchangegroup(repo, tr): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2029 cgchangesets = tr.changes.get(b'changegroup-count-changesets', 0) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2030 cgrevisions = tr.changes.get(b'changegroup-count-revisions', 0) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2031 cgfiles = tr.changes.get(b'changegroup-count-files', 0) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2032 cgheads = tr.changes.get(b'changegroup-count-heads', 0) |
42897
d7304434390f
changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42894
diff
changeset
|
2033 if cgchangesets or cgrevisions or cgfiles: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2034 htext = b"" |
42897
d7304434390f
changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42894
diff
changeset
|
2035 if cgheads: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2036 htext = _(b" (%+d heads)") % cgheads |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2037 msg = _(b"added %d changesets with %d changes to %d files%s\n") |
44544
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2038 if as_validator: |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2039 msg = _(b"adding %d changesets with %d changes to %d files%s\n") |
43727
5b90a050082b
scmutil: add assertions to help pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
43654
diff
changeset
|
2040 assert repo is not None # help pytype |
42897
d7304434390f
changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42894
diff
changeset
|
2041 repo.ui.status(msg % (cgchangesets, cgrevisions, cgfiles, htext)) |
d7304434390f
changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42894
diff
changeset
|
2042 |
34620
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2043 if txmatch(_reportobsoletedsource): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2044 |
34620
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2045 @reportsummary |
b799f11644d8
scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34619
diff
changeset
|
2046 def reportobsoleted(repo, tr): |
34619
18309380fb88
scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34543
diff
changeset
|
2047 obsoleted = obsutil.getobsoleted(repo, tr) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2048 newmarkers = len(tr.changes.get(b'obsmarkers', ())) |
42894
38392d5bde8e
transaction: issue "new obsmarkers" message at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42711
diff
changeset
|
2049 if newmarkers: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2050 repo.ui.status(_(b'%i new obsolescence markers\n') % newmarkers) |
34619
18309380fb88
scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34543
diff
changeset
|
2051 if obsoleted: |
44544
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2052 msg = _(b'obsoleted %i changesets\n') |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2053 if as_validator: |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2054 msg = _(b'obsoleting %i changesets\n') |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2055 repo.ui.status(msg % len(obsoleted)) |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2056 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2057 if obsolete.isenabled( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2058 repo, obsolete.createmarkersopt |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2059 ) and repo.ui.configbool( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2060 b'experimental', b'evolution.report-instabilities' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2061 ): |
35709
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2062 instabilitytypes = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2063 (b'orphan', b'orphan'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2064 (b'phase-divergent', b'phasedivergent'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2065 (b'content-divergent', b'contentdivergent'), |
35709
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2066 ] |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2067 |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2068 def getinstabilitycounts(repo): |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2069 filtered = repo.changelog.filteredrevs |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2070 counts = {} |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2071 for instability, revset in instabilitytypes: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2072 counts[instability] = len( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2073 set(obsolete.getrevs(repo, revset)) - filtered |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2074 ) |
35709
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2075 return counts |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2076 |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2077 oldinstabilitycounts = getinstabilitycounts(repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2078 |
35709
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2079 @reportsummary |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2080 def reportnewinstabilities(repo, tr): |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2081 newinstabilitycounts = getinstabilitycounts(repo) |
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2082 for instability, revset in instabilitytypes: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2083 delta = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2084 newinstabilitycounts[instability] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2085 - oldinstabilitycounts[instability] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2086 ) |
38456
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2087 msg = getinstabilitymessage(delta, instability) |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2088 if msg: |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2089 repo.ui.warn(msg) |
35709
1a09dad8b85a
evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents:
35499
diff
changeset
|
2090 |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2091 if txmatch(_reportnewcssource): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2092 |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2093 @reportsummary |
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2094 def reportnewcs(repo, tr): |
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2095 """Report the range of new revisions pulled/unbundled.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2096 origrepolen = tr.changes.get(b'origrepolen', len(repo)) |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2097 unfi = repo.unfiltered() |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2098 if origrepolen >= len(unfi): |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2099 return |
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2100 |
39897
a477679f6323
pullreport: skip filtered revs instead of obsolete ones
Boris Feld <boris.feld@octobus.net>
parents:
39894
diff
changeset
|
2101 # Compute the bounds of new visible revisions' range. |
a477679f6323
pullreport: skip filtered revs instead of obsolete ones
Boris Feld <boris.feld@octobus.net>
parents:
39894
diff
changeset
|
2102 revs = smartset.spanset(repo, start=origrepolen) |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2103 if revs: |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2104 minrev, maxrev = repo[revs.min()], repo[revs.max()] |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
34645
diff
changeset
|
2105 |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2106 if minrev == maxrev: |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2107 revrange = minrev |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2108 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2109 revrange = b'%s:%s' % (minrev, maxrev) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2110 draft = len(repo.revs(b'%ld and draft()', revs)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2111 secret = len(repo.revs(b'%ld and secret()', revs)) |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2112 if not (draft or secret): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2113 msg = _(b'new changesets %s\n') % revrange |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2114 elif draft and secret: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2115 msg = _(b'new changesets %s (%d drafts, %d secrets)\n') |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2116 msg %= (revrange, draft, secret) |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2117 elif draft: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2118 msg = _(b'new changesets %s (%d drafts)\n') |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2119 msg %= (revrange, draft) |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2120 elif secret: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2121 msg = _(b'new changesets %s (%d secrets)\n') |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2122 msg %= (revrange, secret) |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2123 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2124 errormsg = b'entered unreachable condition' |
39898
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2125 raise error.ProgrammingError(errormsg) |
b5e12039e6e0
pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents:
39897
diff
changeset
|
2126 repo.ui.status(msg) |
35177
9700cb9df140
convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents:
35035
diff
changeset
|
2127 |
39899
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2128 # search new changesets directly pulled as obsolete |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2129 duplicates = tr.changes.get(b'revduplicates', ()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2130 obsadded = unfi.revs( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2131 b'(%d: + %ld) and obsolete()', origrepolen, duplicates |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2132 ) |
39899
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2133 cl = repo.changelog |
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2134 extinctadded = [r for r in obsadded if r not in cl] |
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2135 if extinctadded: |
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2136 # They are not just obsolete, but obsolete and invisible |
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2137 # we call them "extinct" internally but the terms have not been |
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2138 # exposed to users. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2139 msg = b'(%d other changesets obsolete on arrival)\n' |
39899
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2140 repo.ui.status(msg % len(extinctadded)) |
f9232b0310ef
pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents:
39898
diff
changeset
|
2141 |
38171
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2142 @reportsummary |
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2143 def reportphasechanges(repo, tr): |
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2144 """Report statistics of phase changes for changesets pre-existing |
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2145 pull/unbundle. |
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2146 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2147 origrepolen = tr.changes.get(b'origrepolen', len(repo)) |
44548
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44544
diff
changeset
|
2148 published = [] |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44544
diff
changeset
|
2149 for revs, (old, new) in tr.changes.get(b'phases', []): |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44544
diff
changeset
|
2150 if new != phases.public: |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44544
diff
changeset
|
2151 continue |
fdc802f29b2c
transactions: convert changes['phases'] to list of ranges
Joerg Sonnenberger <joerg@bec.de>
parents:
44544
diff
changeset
|
2152 published.extend(rev for rev in revs if rev < origrepolen) |
38171
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2153 if not published: |
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2154 return |
44544
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2155 msg = _(b'%d local changesets published\n') |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2156 if as_validator: |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2157 msg = _(b'%d local changesets will be published\n') |
13da36d77a3f
scmutil: add option to register summary callbacks as transaction validators
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
2158 repo.ui.status(msg % len(published)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2159 |
38171
eb9835014d20
transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
38131
diff
changeset
|
2160 |
38456
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2161 def getinstabilitymessage(delta, instability): |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2162 """function to return the message to show warning about new instabilities |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2163 |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2164 exists as a separate function so that extension can wrap to show more |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2165 information like how to fix instabilities""" |
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2166 if delta > 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2167 return _(b'%i new %s changesets\n') % (delta, instability) |
38456
1cac2e8c7624
scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38432
diff
changeset
|
2168 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2169 |
35184
bc775b8cc020
scmutil: extra utility to display a reasonable amount of nodes
Boris Feld <boris.feld@octobus.net>
parents:
35177
diff
changeset
|
2170 def nodesummaries(repo, nodes, maxnumnodes=4): |
bc775b8cc020
scmutil: extra utility to display a reasonable amount of nodes
Boris Feld <boris.feld@octobus.net>
parents:
35177
diff
changeset
|
2171 if len(nodes) <= maxnumnodes or repo.ui.verbose: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2172 return b' '.join(short(h) for h in nodes) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2173 first = b' '.join(short(h) for h in nodes[:maxnumnodes]) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2174 return _(b"%s and %d others") % (first, len(nodes) - maxnumnodes) |
35184
bc775b8cc020
scmutil: extra utility to display a reasonable amount of nodes
Boris Feld <boris.feld@octobus.net>
parents:
35177
diff
changeset
|
2175 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2176 |
46096
4d5e2fd53707
singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents:
46042
diff
changeset
|
2177 def enforcesinglehead(repo, tr, desc, accountclosed, filtername): |
35185
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2178 """check that no named branch has multiple heads""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2179 if desc in (b'strip', b'repair'): |
35185
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2180 # skip the logic during strip |
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2181 return |
46096
4d5e2fd53707
singlehead: introduce option to restrict to public changes
Joerg Sonnenberger <joerg@bec.de>
parents:
46042
diff
changeset
|
2182 visible = repo.filtered(filtername) |
35185
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2183 # possible improvement: we could restrict the check to affected branch |
42969
76608f9f27f6
singlehead: introduce special handling of closed heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42926
diff
changeset
|
2184 bm = visible.branchmap() |
76608f9f27f6
singlehead: introduce special handling of closed heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42926
diff
changeset
|
2185 for name in bm: |
76608f9f27f6
singlehead: introduce special handling of closed heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42926
diff
changeset
|
2186 heads = bm.branchheads(name, closed=accountclosed) |
35185
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2187 if len(heads) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2188 msg = _(b'rejecting multiple heads on branch "%s"') |
35185
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2189 msg %= name |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2190 hint = _(b'%d heads: %s') |
35185
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2191 hint %= (len(heads), nodesummaries(repo, heads)) |
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2192 raise error.Abort(msg, hint=hint) |
66ecde8a704d
server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents:
35184
diff
changeset
|
2193 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2194 |
35177
9700cb9df140
convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents:
35035
diff
changeset
|
2195 def wrapconvertsink(sink): |
9700cb9df140
convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents:
35035
diff
changeset
|
2196 """Allow extensions to wrap the sink returned by convcmd.convertsink() |
9700cb9df140
convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents:
35035
diff
changeset
|
2197 before it is used, whether or not the convert extension was formally loaded. |
9700cb9df140
convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents:
35035
diff
changeset
|
2198 """ |
9700cb9df140
convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents:
35035
diff
changeset
|
2199 return sink |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2200 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2201 |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2202 def unhidehashlikerevs(repo, specs, hiddentype): |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2203 """parse the user specs and unhide changesets whose hash or revision number |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2204 is passed. |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2205 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2206 hiddentype can be: 1) 'warn': warn while unhiding changesets |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2207 2) 'nowarn': don't warn while unhiding changesets |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2208 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2209 returns a repo object with the required changesets unhidden |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2210 """ |
48460
c51408b92b88
directaccess: fix uses of commands.status() that don't go through flag parsing
Kyle Lippincott <spectral@google.com>
parents:
48368
diff
changeset
|
2211 if not specs: |
c51408b92b88
directaccess: fix uses of commands.status() that don't go through flag parsing
Kyle Lippincott <spectral@google.com>
parents:
48368
diff
changeset
|
2212 return repo |
c51408b92b88
directaccess: fix uses of commands.status() that don't go through flag parsing
Kyle Lippincott <spectral@google.com>
parents:
48368
diff
changeset
|
2213 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2214 if not repo.filtername or not repo.ui.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2215 b'experimental', b'directaccess' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2216 ): |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2217 return repo |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2218 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2219 if repo.filtername not in (b'visible', b'visible-hidden'): |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2220 return repo |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2221 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2222 symbols = set() |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2223 for spec in specs: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2224 try: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2225 tree = revsetlang.parse(spec) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2226 except error.ParseError: # will be reported by scmutil.revrange() |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2227 continue |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2228 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2229 symbols.update(revsetlang.gethashlikesymbols(tree)) |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2230 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2231 if not symbols: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2232 return repo |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2233 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2234 revs = _getrevsfromsymbols(repo, symbols) |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2235 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2236 if not revs: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2237 return repo |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2238 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2239 if hiddentype == b'warn': |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2240 unfi = repo.unfiltered() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2241 revstr = b", ".join([pycompat.bytestr(unfi[l]) for l in revs]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2242 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2243 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2244 b"warning: accessing hidden changesets for write " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2245 b"operation: %s\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2246 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2247 % revstr |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2248 ) |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2249 |
35499
b55a142f00c5
scmutil: use a tuple of possible values instead of using startswith()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35496
diff
changeset
|
2250 # we have to use new filtername to separate branch/tags cache until we can |
b55a142f00c5
scmutil: use a tuple of possible values instead of using startswith()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35496
diff
changeset
|
2251 # disbale these cache when revisions are dynamically pinned. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2252 return repo.filtered(b'visible-hidden', revs) |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2253 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2254 |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2255 def _getrevsfromsymbols(repo, symbols): |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2256 """parse the list of symbols and returns a set of revision numbers of hidden |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2257 changesets present in symbols""" |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2258 revs = set() |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2259 unfi = repo.unfiltered() |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2260 unficl = unfi.changelog |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2261 cl = repo.changelog |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2262 tiprev = len(unficl) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2263 allowrevnums = repo.ui.configbool(b'experimental', b'directaccess.revnums') |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2264 for s in symbols: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2265 try: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2266 n = int(s) |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2267 if n <= tiprev: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2268 if not allowrevnums: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2269 continue |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2270 else: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2271 if n not in cl: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2272 revs.add(n) |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2273 continue |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2274 except ValueError: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2275 pass |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2276 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2277 try: |
37868
69de3c3de036
directaccess: use resolvehexnodeidprefix() instead of _partialmatch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37865
diff
changeset
|
2278 s = resolvehexnodeidprefix(unfi, s) |
37094
7f025c9b7865
directaccess: do not abort by 'ff...' hash
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
2279 except (error.LookupError, error.WdirUnsupported): |
35496
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2280 s = None |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2281 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2282 if s is not None: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2283 rev = unficl.rev(s) |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2284 if rev not in cl: |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2285 revs.add(rev) |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2286 |
8bb90cc4668e
scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35412
diff
changeset
|
2287 return revs |
38131
46c2b19a1263
scmutil: move repair.stripbmrevset as scmutil.bookmarkrevs (API)
David Demelier <markand@malikania.fr>
parents:
37979
diff
changeset
|
2288 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2289 |
38131
46c2b19a1263
scmutil: move repair.stripbmrevset as scmutil.bookmarkrevs (API)
David Demelier <markand@malikania.fr>
parents:
37979
diff
changeset
|
2290 def bookmarkrevs(repo, mark): |
46039
b9ebe0bfed4e
scmutil: document that bookmarkrevs() ignores non-head bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
45942
diff
changeset
|
2291 """Select revisions reachable by a given bookmark |
b9ebe0bfed4e
scmutil: document that bookmarkrevs() ignores non-head bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
45942
diff
changeset
|
2292 |
b9ebe0bfed4e
scmutil: document that bookmarkrevs() ignores non-head bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
45942
diff
changeset
|
2293 If the bookmarked revision isn't a head, an empty set will be returned. |
38131
46c2b19a1263
scmutil: move repair.stripbmrevset as scmutil.bookmarkrevs (API)
David Demelier <markand@malikania.fr>
parents:
37979
diff
changeset
|
2294 """ |
46040
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2295 return repo.revs(format_bookmark_revspec(mark)) |
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2296 |
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2297 |
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2298 def format_bookmark_revspec(mark): |
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2299 """Build a revset expression to select revisions reachable by a given |
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2300 bookmark""" |
46042
1bf2b44c4007
log: do not accept string-matcher pattern as -u/-b/-B parameter
Yuya Nishihara <yuya@tcha.org>
parents:
46040
diff
changeset
|
2301 mark = b'literal:' + mark |
46040
9ee791f3278f
scmutil: extract function that builds revset expr to select bookmark branch
Yuya Nishihara <yuya@tcha.org>
parents:
46039
diff
changeset
|
2302 return revsetlang.formatspec( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2303 b"ancestors(bookmark(%s)) - " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2304 b"ancestors(head() and not bookmark(%s)) - " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2305 b"ancestors(bookmark() and not bookmark(%s))", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2306 mark, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2307 mark, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2308 mark, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42969
diff
changeset
|
2309 ) |