annotate mercurial/scmutil.py @ 43076:2372284d9457

formatting: blacken the codebase This is using my patch to black (https://github.com/psf/black/pull/826) so we don't un-wrap collection literals. Done with: hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**"' | xargs black -S # skip-blame mass-reformatting only # no-check-commit reformats foo_bar functions Differential Revision: https://phab.mercurial-scm.org/D6971
author Augie Fackler <augie@google.com>
date Sun, 06 Oct 2019 09:45:02 -0400
parents 76608f9f27f6
children 687b865b95ad
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 #
8b252e826c68 add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff changeset
3 # Copyright Matt Mackall <mpm@selenic.com>
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
29341
0d83ad967bf8 cleanup: replace uses of util.(md5|sha1|sha256|sha512) with hashlib.\1
Augie Fackler <raf@durin42.com>
parents: 29336
diff changeset
12 import hashlib
27482
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
13 import os
41661
f8b18583049f add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41660
diff changeset
14 import posixpath
27482
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
15 import re
34462
c67db5dc131d extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents: 34461
diff changeset
16 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
17 import weakref
27482
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
18
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
19 from .i18n import _
32678
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32676
diff changeset
20 from .node import (
37528
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
21 bin,
33100
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
22 hex,
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
23 nullid,
39899
d739f423bf06 repo: look up nullrev context by revnum, not symbolic name
Martin von Zweigbergk <martinvonz@google.com>
parents: 39896
diff changeset
24 nullrev,
34334
4647e0a8d3d7 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents: 34158
diff changeset
25 short,
32678
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32676
diff changeset
26 wdirid,
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32676
diff changeset
27 wdirrev,
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32676
diff changeset
28 )
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32676
diff changeset
29
27482
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
30 from . import (
41942
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
31 copies as copiesmod,
27482
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
32 encoding,
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
33 error,
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
34 match as matchmod,
33100
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
35 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
36 obsutil,
27482
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
37 pathutil,
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
38 phases,
39254
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
39 policy,
30318
af7c60988f6e py3: make scmutil.rcpath() return bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30109
diff changeset
40 pycompat,
31044
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30644
diff changeset
41 revsetlang,
27482
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
42 similar,
39902
a477679f6323 pullreport: skip filtered revs instead of obsolete ones
Boris Feld <boris.feld@octobus.net>
parents: 39899
diff changeset
43 smartset,
34457
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
44 url,
27482
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
45 util,
34543
6fad8059a970 scmutil: handle conflicting files and dirs in origbackuppath
Mark Thomas <mbthomas@fb.com>
parents: 34542
diff changeset
46 vfs,
27482
dde3da2246f1 scmutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27093
diff changeset
47 )
18690
4c6f7f0dadab scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents: 18678
diff changeset
48
37087
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36844
diff changeset
49 from .utils import (
37123
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37097
diff changeset
50 procutil,
37087
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36844
diff changeset
51 stringutil,
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36844
diff changeset
52 )
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36844
diff changeset
53
34645
75979c8d4572 codemod: use pycompat.iswindows
Jun Wu <quark@fb.com>
parents: 34620
diff changeset
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
39254
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
59 parsers = policy.importmod(r'parsers')
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
60
30327
365812902904 scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents: 30322
diff changeset
61 termsize = scmplatform.termsize
13962
8b252e826c68 add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff changeset
62
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
63
22913
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
64 class status(tuple):
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
65 '''Named tuple with a list of files per status. The 'deleted', 'unknown'
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
66 and 'ignored' properties are only relevant to the working copy.
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
67 '''
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
68
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
69 __slots__ = ()
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
70
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
71 def __new__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
72 cls, modified, added, removed, deleted, unknown, ignored, clean
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
73 ):
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
74 return tuple.__new__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
75 cls, (modified, added, removed, deleted, unknown, ignored, clean)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
76 )
22913
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
77
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
78 @property
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
79 def modified(self):
22915
4d680deb0d9e status: update and move documentation of status types to status class
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22913
diff changeset
80 '''files that have been modified'''
22913
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
81 return self[0]
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
82
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
83 @property
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
84 def added(self):
22915
4d680deb0d9e status: update and move documentation of status types to status class
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22913
diff changeset
85 '''files that have been added'''
22913
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
86 return self[1]
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
87
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
88 @property
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
89 def removed(self):
22915
4d680deb0d9e status: update and move documentation of status types to status class
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22913
diff changeset
90 '''files that have been removed'''
22913
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
91 return self[2]
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
92
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
93 @property
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
94 def deleted(self):
22915
4d680deb0d9e status: update and move documentation of status types to status class
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22913
diff changeset
95 '''files that are in the dirstate, but have been deleted from the
4d680deb0d9e status: update and move documentation of status types to status class
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22913
diff changeset
96 working copy (aka "missing")
4d680deb0d9e status: update and move documentation of status types to status class
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22913
diff changeset
97 '''
22913
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
98 return self[3]
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
99
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
100 @property
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
101 def unknown(self):
22915
4d680deb0d9e status: update and move documentation of status types to status class
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22913
diff changeset
102 '''files not in the dirstate that are not ignored'''
22913
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
103 return self[4]
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
104
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
105 @property
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
106 def ignored(self):
22915
4d680deb0d9e status: update and move documentation of status types to status class
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22913
diff changeset
107 '''files not in the dirstate that are ignored (by _dirignore())'''
22913
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
108 return self[5]
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
109
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
110 @property
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
111 def clean(self):
22915
4d680deb0d9e status: update and move documentation of status types to status class
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22913
diff changeset
112 '''files that have not been modified'''
22913
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
113 return self[6]
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
114
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
115 def __repr__(self, *args, **kwargs):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
116 return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
117 r'<status modified=%s, added=%s, removed=%s, deleted=%s, '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
118 r'unknown=%s, ignored=%s, clean=%s>'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
119 ) % tuple(pycompat.sysstr(stringutil.pprint(v)) for v in self)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
120
22913
cb4449921a1d status: create class for status lists
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22816
diff changeset
121
20392
d4f804caa0ed itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents: 20364
diff changeset
122 def itersubrepos(ctx1, ctx2):
d4f804caa0ed itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents: 20364
diff changeset
123 """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
124 # 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
125 # 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
126 # 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
127 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
128 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
129
c0995cd8ff6f scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25386
diff changeset
130 missing = set()
c0995cd8ff6f scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25386
diff changeset
131
c0995cd8ff6f scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25386
diff changeset
132 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
133 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
134 del subpaths[subpath]
c0995cd8ff6f scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25386
diff changeset
135 missing.add(subpath)
c0995cd8ff6f scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25386
diff changeset
136
20392
d4f804caa0ed itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents: 20364
diff changeset
137 for subpath, ctx in sorted(subpaths.iteritems()):
d4f804caa0ed itersubrepos: move to scmutil to break a direct import cycle
Augie Fackler <raf@durin42.com>
parents: 20364
diff changeset
138 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
139
25418
c0995cd8ff6f scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25386
diff changeset
140 # 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
141 # 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
142 # '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
143 # against itself.
c0995cd8ff6f scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25386
diff changeset
144 for subpath in missing:
c0995cd8ff6f scmutil: consistently return subrepos relative to ctx1 from itersubrepos()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25386
diff changeset
145 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
146
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
147
17248
6ffb35b2284c discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents: 17201
diff changeset
148 def nochangesfound(ui, repo, excluded=None):
6ffb35b2284c discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents: 17201
diff changeset
149 '''Report no changes for push/pull, excluded is None or a list of
6ffb35b2284c discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents: 17201
diff changeset
150 nodes excluded from the push/pull.
6ffb35b2284c discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents: 17201
diff changeset
151 '''
6ffb35b2284c discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents: 17201
diff changeset
152 secretlist = []
6ffb35b2284c discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents: 17201
diff changeset
153 if excluded:
6ffb35b2284c discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents: 17201
diff changeset
154 for n in excluded:
6ffb35b2284c discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents: 17201
diff changeset
155 ctx = repo[n]
6ffb35b2284c discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents: 17201
diff changeset
156 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
157 secretlist.append(n)
6ffb35b2284c discovery: add extinct changesets to outgoing.excluded
Patrick Mezard <patrick@mezard.eu>
parents: 17201
diff changeset
158
15993
0b05e0bfdc1c scmutil: unify some 'no changes found' messages
Matt Mackall <mpm@selenic.com>
parents: 15797
diff changeset
159 if secretlist:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
160 ui.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
161 _("no changes found (ignored %d secret changesets)\n")
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
162 % len(secretlist)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
163 )
15993
0b05e0bfdc1c scmutil: unify some 'no changes found' messages
Matt Mackall <mpm@selenic.com>
parents: 15797
diff changeset
164 else:
0b05e0bfdc1c scmutil: unify some 'no changes found' messages
Matt Mackall <mpm@selenic.com>
parents: 15797
diff changeset
165 ui.status(_("no changes found\n"))
0b05e0bfdc1c scmutil: unify some 'no changes found' messages
Matt Mackall <mpm@selenic.com>
parents: 15797
diff changeset
166
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
167
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
168 def callcatch(ui, func):
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
169 """call func() with global exception handling
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
170
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
171 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: 30427
diff changeset
172 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: 30427
diff changeset
173 """
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
174 try:
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31951
diff changeset
175 try:
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31951
diff changeset
176 return func()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
177 except: # re-raises
32041
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31951
diff changeset
178 ui.traceback()
38963a53ab0d dispatch: print traceback in scmutil.callcatch() if --traceback specified
Yuya Nishihara <yuya@tcha.org>
parents: 31951
diff changeset
179 raise
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
180 # Global exception handling, alphabetically
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
181 # Mercurial-specific first, followed by built-in and library exceptions
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
182 except error.LockHeld as inst:
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
183 if inst.errno == errno.ETIMEDOUT:
40167
c554dc0cc16e scmutil: wrap locker information in bytestr before repr()ing it
Augie Fackler <augie@google.com>
parents: 40088
diff changeset
184 reason = _('timed out waiting for lock held by %r') % (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
185 pycompat.bytestr(inst.locker)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
186 )
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
187 else:
32088
0d892d820a51 lock: avoid unintentional lock acquisition at failure of readlock
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32041
diff changeset
188 reason = _('lock held by %r') % inst.locker
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
189 ui.error(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
190 _("abort: %s: %s\n")
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
191 % (inst.desc or stringutil.forcebytestr(inst.filename), reason)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
192 )
32088
0d892d820a51 lock: avoid unintentional lock acquisition at failure of readlock
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 32041
diff changeset
193 if not inst.locker:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
194 ui.error(_("(lock might be very busy)\n"))
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
195 except error.LockUnavailable as inst:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
196 ui.error(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
197 _("abort: could not lock %s: %s\n")
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
198 % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
199 inst.desc or stringutil.forcebytestr(inst.filename),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
200 encoding.strtolocal(inst.strerror),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
201 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
202 )
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
203 except error.OutOfBandError as inst:
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
204 if inst.args:
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
205 msg = _("abort: remote error:\n")
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
206 else:
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
207 msg = _("abort: remote error\n")
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
208 ui.error(msg)
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
209 if inst.args:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
210 ui.error(''.join(inst.args))
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
211 if inst.hint:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
212 ui.error('(%s)\n' % inst.hint)
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
213 except error.RepoError as inst:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
214 ui.error(_("abort: %s!\n") % inst)
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
215 if inst.hint:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
216 ui.error(_("(%s)\n") % inst.hint)
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
217 except error.ResponseError as inst:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
218 ui.error(_("abort: %s") % inst.args[0])
36690
b76248e51605 scmutil: avoid using basestring and add explicit handling of unicodes
Augie Fackler <augie@google.com>
parents: 36687
diff changeset
219 msg = inst.args[1]
b76248e51605 scmutil: avoid using basestring and add explicit handling of unicodes
Augie Fackler <augie@google.com>
parents: 36687
diff changeset
220 if isinstance(msg, type(u'')):
b76248e51605 scmutil: avoid using basestring and add explicit handling of unicodes
Augie Fackler <augie@google.com>
parents: 36687
diff changeset
221 msg = pycompat.sysbytes(msg)
36720
c442c4a92ae8 scmutil: fix oversight in b76248e51605c6 where I forgot to use msg
Augie Fackler <augie@google.com>
parents: 36690
diff changeset
222 if not isinstance(msg, bytes):
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
223 ui.error(" %r\n" % (msg,))
36720
c442c4a92ae8 scmutil: fix oversight in b76248e51605c6 where I forgot to use msg
Augie Fackler <augie@google.com>
parents: 36690
diff changeset
224 elif not msg:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
225 ui.error(_(" empty string\n"))
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
226 else:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
227 ui.error("\n%r\n" % pycompat.bytestr(stringutil.ellipsis(msg)))
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
228 except error.CensoredNodeError as inst:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
229 ui.error(_("abort: file censored %s!\n") % inst)
39793
b63dee7bd0d9 global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39710
diff changeset
230 except error.StorageError as inst:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
231 ui.error(_("abort: %s!\n") % inst)
40699
4ec8bee15930 scmutil: display the optional hint when handling StorageError in catchall()
Matt Harbison <matt_harbison@yahoo.com>
parents: 40679
diff changeset
232 if inst.hint:
4ec8bee15930 scmutil: display the optional hint when handling StorageError in catchall()
Matt Harbison <matt_harbison@yahoo.com>
parents: 40679
diff changeset
233 ui.error(_("(%s)\n") % inst.hint)
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
234 except error.InterventionRequired as inst:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
235 ui.error("%s\n" % inst)
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
236 if inst.hint:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
237 ui.error(_("(%s)\n") % inst.hint)
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
238 return 1
32679
7b17f9de6d3e revlog: map rev(wdirid) to WdirUnsupported exception
Yuya Nishihara <yuya@tcha.org>
parents: 32678
diff changeset
239 except error.WdirUnsupported:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
240 ui.error(_("abort: working directory revision cannot be specified\n"))
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
241 except error.Abort as inst:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
242 ui.error(_("abort: %s\n") % inst)
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
243 if inst.hint:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
244 ui.error(_("(%s)\n") % inst.hint)
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
245 except ImportError as inst:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
246 ui.error(_("abort: %s!\n") % stringutil.forcebytestr(inst))
37087
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36844
diff changeset
247 m = stringutil.forcebytestr(inst).split()[-1]
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
248 if m in "mpatch bdiff".split():
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
249 ui.error(_("(did you forget to compile extensions?)\n"))
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
250 elif m in "zlib".split():
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
251 ui.error(_("(is your Python install correct?)\n"))
41443
f83b230b7fb3 dispatch: unify handler of IOError and OSError
Yuya Nishihara <yuya@tcha.org>
parents: 41442
diff changeset
252 except (IOError, OSError) as inst:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
253 if util.safehasattr(inst, "code"): # HTTPError
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
254 ui.error(_("abort: %s\n") % stringutil.forcebytestr(inst))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
255 elif util.safehasattr(inst, "reason"): # URLError or SSLError
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
256 try: # usually it is in the form (errno, strerror)
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
257 reason = inst.reason.args[1]
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
258 except (AttributeError, IndexError):
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
259 # it might be anything, for example a string
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
260 reason = inst.reason
38321
79dd61a4554f py3: replace `unicode` with pycompat.unicode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38262
diff changeset
261 if isinstance(reason, pycompat.unicode):
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
262 # SSLError of Python 2.7.9 contains a unicode
32201
994b0b1c77d6 py3: use encoding.unitolocal instead of .encode(encoding.encoding)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32169
diff changeset
263 reason = encoding.unitolocal(reason)
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
264 ui.error(_("abort: error: %s\n") % reason)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
265 elif (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
266 util.safehasattr(inst, "args")
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
267 and inst.args
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
268 and inst.args[0] == errno.EPIPE
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
269 ):
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
270 pass
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
271 elif getattr(inst, "strerror", None): # common IOError or OSError
41442
b6673e9bdcf6 dispatch: quote filename in IOError as well
Yuya Nishihara <yuya@tcha.org>
parents: 41441
diff changeset
272 if getattr(inst, "filename", None) is not None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
273 ui.error(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
274 _("abort: %s: '%s'\n")
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
275 % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
276 encoding.strtolocal(inst.strerror),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
277 stringutil.forcebytestr(inst.filename),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
278 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
279 )
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
280 else:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
281 ui.error(_("abort: %s\n") % encoding.strtolocal(inst.strerror))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
282 else: # suspicious IOError
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
283 raise
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
284 except MemoryError:
38809
afc4ad706f9c dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents: 38759
diff changeset
285 ui.error(_("abort: out of memory\n"))
30529
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
286 except SystemExit as inst:
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
287 # 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: 30427
diff changeset
288 # Just in case catch this and and pass exit code to caller.
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
289 return inst.code
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
290
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
291 return -1
4338f87dbf6f dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents: 30427
diff changeset
292
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
293
17821
361ab1e2086f scmutil: add bad character checking to checknewlabel
Kevin Bullock <kbullock@ringworld.org>
parents: 17817
diff changeset
294 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
295 # 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
296 # It makes strings difficult to translate.
17817
b17be267b59c scmutil: add function to validate new branch, tag, and bookmark names
Kevin Bullock <kbullock@ringworld.org>
parents: 17768
diff changeset
297 if lbl in ['tip', '.', 'null']:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26491
diff changeset
298 raise error.Abort(_("the name '%s' is reserved") % lbl)
17821
361ab1e2086f scmutil: add bad character checking to checknewlabel
Kevin Bullock <kbullock@ringworld.org>
parents: 17817
diff changeset
299 for c in (':', '\0', '\n', '\r'):
361ab1e2086f scmutil: add bad character checking to checknewlabel
Kevin Bullock <kbullock@ringworld.org>
parents: 17817
diff changeset
300 if c in lbl:
36598
bb5f5c1c3c1b scmutil: fix a repr in an error message on Python 3
Augie Fackler <augie@google.com>
parents: 36452
diff changeset
301 raise error.Abort(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
302 _("%r cannot be used in a name") % pycompat.bytestr(c)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
303 )
18566
341868ef0cf6 bookmark: don't allow integers as bookmark/branch/tag names
Durham Goode <durham@fb.com>
parents: 18560
diff changeset
304 try:
341868ef0cf6 bookmark: don't allow integers as bookmark/branch/tag names
Durham Goode <durham@fb.com>
parents: 18560
diff changeset
305 int(lbl)
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26491
diff changeset
306 raise error.Abort(_("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
307 except ValueError:
341868ef0cf6 bookmark: don't allow integers as bookmark/branch/tag names
Durham Goode <durham@fb.com>
parents: 18560
diff changeset
308 pass
36183
4f3e989536c3 label: enforce the lack of leading or trailing white space
Boris Feld <boris.feld@octobus.net>
parents: 36175
diff changeset
309 if lbl.strip() != lbl:
4f3e989536c3 label: enforce the lack of leading or trailing white space
Boris Feld <boris.feld@octobus.net>
parents: 36175
diff changeset
310 raise error.Abort(_("leading or trailing whitespace in name %r") % lbl)
17817
b17be267b59c scmutil: add function to validate new branch, tag, and bookmark names
Kevin Bullock <kbullock@ringworld.org>
parents: 17768
diff changeset
311
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
312
13974
23f2736abce3 move checkfilename from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13973
diff changeset
313 def checkfilename(f):
23f2736abce3 move checkfilename from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13973
diff changeset
314 '''Check that the filename f is an acceptable filename for a tracked file'''
23f2736abce3 move checkfilename from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13973
diff changeset
315 if '\r' in f or '\n' in f:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
316 raise error.Abort(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
317 _("'\\n' and '\\r' disallowed in filenames: %r")
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
318 % pycompat.bytestr(f)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
319 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
320
13974
23f2736abce3 move checkfilename from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13973
diff changeset
321
13962
8b252e826c68 add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff changeset
322 def checkportable(ui, f):
8b252e826c68 add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff changeset
323 '''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
324 checkfilename(f)
14138
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14097
diff changeset
325 abort, warn = checkportabilityalert(ui)
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14097
diff changeset
326 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
327 msg = util.checkwinfilename(f)
8b252e826c68 add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff changeset
328 if msg:
37123
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37097
diff changeset
329 msg = "%s: %s" % (msg, procutil.shellquote(f))
14138
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14097
diff changeset
330 if abort:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26491
diff changeset
331 raise error.Abort(msg)
14138
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14097
diff changeset
332 ui.warn(_("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
333
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
334
14067
e88a4958a6b7 scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents: 13986
diff changeset
335 def checkportabilityalert(ui):
e88a4958a6b7 scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents: 13986
diff changeset
336 '''check if the user's config requests nothing, a warning, or abort for
e88a4958a6b7 scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents: 13986
diff changeset
337 non-portable filenames'''
33499
0407a51b9d8c codemod: register core configitems using a script
Jun Wu <quark@fb.com>
parents: 33352
diff changeset
338 val = ui.config('ui', 'portablefilenames')
14067
e88a4958a6b7 scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents: 13986
diff changeset
339 lval = val.lower()
37087
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36844
diff changeset
340 bval = stringutil.parsebool(val)
34645
75979c8d4572 codemod: use pycompat.iswindows
Jun Wu <quark@fb.com>
parents: 34620
diff changeset
341 abort = pycompat.iswindows or lval == 'abort'
14067
e88a4958a6b7 scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents: 13986
diff changeset
342 warn = bval or lval == 'warn'
e88a4958a6b7 scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents: 13986
diff changeset
343 if bval is None and not (warn or abort or lval == 'ignore'):
13962
8b252e826c68 add: introduce a warning message for non-portable filenames (issue2756) (BC)
Adrian Buehlmann <adrian@cadifra.com>
parents:
diff changeset
344 raise error.ConfigError(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
345 _("ui.portablefilenames value is invalid ('%s')") % val
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
346 )
14067
e88a4958a6b7 scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents: 13986
diff changeset
347 return abort, warn
e88a4958a6b7 scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents: 13986
diff changeset
348
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
349
14138
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14097
diff changeset
350 class casecollisionauditor(object):
17201
afd75476939e scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents: 17161
diff changeset
351 def __init__(self, ui, abort, dirstate):
14138
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14097
diff changeset
352 self._ui = ui
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14097
diff changeset
353 self._abort = abort
42930
34ed651ba7e4 cleanup: fix leakage of dirstate._map to client code
Augie Fackler <augie@google.com>
parents: 42903
diff changeset
354 allfiles = '\0'.join(dirstate)
17201
afd75476939e scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents: 17161
diff changeset
355 self._loweredfiles = set(encoding.lower(allfiles).split('\0'))
afd75476939e scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents: 17161
diff changeset
356 self._dirstate = dirstate
afd75476939e scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents: 17161
diff changeset
357 # 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
358 # 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
359 # same filename twice.
afd75476939e scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents: 17161
diff changeset
360 self._newfiles = set()
14067
e88a4958a6b7 scmutil: refactor ui.portablefilenames processing
Kevin Gessner <kevin@kevingessner.com>
parents: 13986
diff changeset
361
14138
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14097
diff changeset
362 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
363 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
364 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
365 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
366 if fl in self._loweredfiles and f not in self._dirstate:
14138
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14097
diff changeset
367 msg = _('possible case-folding collision for %s') % f
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14097
diff changeset
368 if self._abort:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26491
diff changeset
369 raise error.Abort(msg)
14138
c18204fd35b0 scmutil: introduce casecollisionauditor
Adrian Buehlmann <adrian@cadifra.com>
parents: 14097
diff changeset
370 self._ui.warn(_("warning: %s\n") % msg)
17201
afd75476939e scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents: 17161
diff changeset
371 self._loweredfiles.add(fl)
afd75476939e scmutil: 25% speedup in casecollisionauditor
Joshua Redstone <joshua.redstone@fb.com>
parents: 17161
diff changeset
372 self._newfiles.add(f)
13970
d13913355390 move opener from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13962
diff changeset
373
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
374
24723
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
375 def filteredhash(repo, maxrev):
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
376 """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
377
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
378 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
379 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
380 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
381 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
382 tipnode changing.
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
383
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
384 This function hashes all the revs filtered from the view and returns
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
385 that SHA-1 digest.
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
386 """
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
387 cl = repo.changelog
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
388 if not cl.filteredrevs:
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
389 return None
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
390 key = None
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
391 revs = sorted(r for r in cl.filteredrevs if r <= maxrev)
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
392 if revs:
29341
0d83ad967bf8 cleanup: replace uses of util.(md5|sha1|sha256|sha512) with hashlib.\1
Augie Fackler <raf@durin42.com>
parents: 29336
diff changeset
393 s = hashlib.sha1()
24723
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
394 for rev in revs:
31358
719e64bf9ec2 scmutil: fix key generation to portably bytestringify integer
Augie Fackler <augie@google.com>
parents: 31294
diff changeset
395 s.update('%d;' % rev)
24723
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
396 key = s.digest()
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
397 return key
467a33142425 repoview: move function for computing filtered hash
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24693
diff changeset
398
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
399
13975
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
400 def walkrepos(path, followsym=False, seen_dirs=None, recurse=False):
17104
5a9acb0b2086 help: improve hgweb help
Mads Kiilerich <mads@kiilerich.com>
parents: 17037
diff changeset
401 '''yield every hg repository under path, always recursively.
5a9acb0b2086 help: improve hgweb help
Mads Kiilerich <mads@kiilerich.com>
parents: 17037
diff changeset
402 The recurse flag will only control recursion into repo working dirs'''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
403
13975
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
404 def errhandler(err):
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
405 if err.filename == path:
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
406 raise err
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
407
14961
5523529bd1af walkrepos: use getattr instead of hasattr for samestat
Augie Fackler <durin42@gmail.com>
parents: 14928
diff changeset
408 samestat = getattr(os.path, 'samestat', None)
5523529bd1af walkrepos: use getattr instead of hasattr for samestat
Augie Fackler <durin42@gmail.com>
parents: 14928
diff changeset
409 if followsym and samestat is not None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
410
14227
94985b5a8278 scmutil: rename local function _add_dir_if_not_there
Adrian Buehlmann <adrian@cadifra.com>
parents: 14226
diff changeset
411 def adddir(dirlst, dirname):
13975
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
412 dirstat = os.stat(dirname)
36371
ddd9474d2e08 walkrepos: don't reimplement any()
Martin von Zweigbergk <martinvonz@google.com>
parents: 36346
diff changeset
413 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
414 if not match:
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
415 dirlst.append(dirstat)
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
416 return not match
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
417
13975
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
418 else:
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
419 followsym = False
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
420
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
421 if (seen_dirs is None) and followsym:
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
422 seen_dirs = []
14227
94985b5a8278 scmutil: rename local function _add_dir_if_not_there
Adrian Buehlmann <adrian@cadifra.com>
parents: 14226
diff changeset
423 adddir(seen_dirs, path)
13975
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
424 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
425 dirs.sort()
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
426 if '.hg' in dirs:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
427 yield root # found a repository
13975
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
428 qroot = os.path.join(root, '.hg', 'patches')
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
429 if os.path.isdir(os.path.join(qroot, '.hg')):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
430 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
431 if recurse:
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
432 # avoid recursing inside the .hg directory
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
433 dirs.remove('.hg')
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
434 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
435 dirs[:] = [] # don't descend further
13975
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
436 elif followsym:
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
437 newdirs = []
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
438 for d in dirs:
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
439 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
440 if adddir(seen_dirs, fname):
13975
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
441 if os.path.islink(fname):
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
442 for hgname in walkrepos(fname, True, seen_dirs):
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
443 yield hgname
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
444 else:
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
445 newdirs.append(d)
938fbeacac84 move walkrepos from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13974
diff changeset
446 dirs[:] = newdirs
13984
af60153b5e3b move rcpath from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents: 13975
diff changeset
447
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
448
32678
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32676
diff changeset
449 def binnode(ctx):
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32676
diff changeset
450 """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: 32676
diff changeset
451 node = ctx.node()
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32676
diff changeset
452 if node is None:
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32676
diff changeset
453 return wdirid
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32676
diff changeset
454 return node
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32676
diff changeset
455
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
456
32676
4bec8cce6a09 scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents: 32310
diff changeset
457 def intrev(ctx):
4bec8cce6a09 scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents: 32310
diff changeset
458 """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
459 arithmetic operation"""
32676
4bec8cce6a09 scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents: 32310
diff changeset
460 rev = ctx.rev()
24582
56fff44cce98 scmutil: add function to help handling workingctx in arithmetic operation
Yuya Nishihara <yuya@tcha.org>
parents: 24447
diff changeset
461 if rev is None:
25739
3dabc9b7494a changeset_printer: use node.wdirrev to calculate meaningful parentrevs
Yuya Nishihara <yuya@tcha.org>
parents: 25660
diff changeset
462 return wdirrev
24582
56fff44cce98 scmutil: add function to help handling workingctx in arithmetic operation
Yuya Nishihara <yuya@tcha.org>
parents: 24447
diff changeset
463 return rev
56fff44cce98 scmutil: add function to help handling workingctx in arithmetic operation
Yuya Nishihara <yuya@tcha.org>
parents: 24447
diff changeset
464
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
465
34334
4647e0a8d3d7 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents: 34158
diff changeset
466 def formatchangeid(ctx):
4647e0a8d3d7 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents: 34158
diff changeset
467 """Format changectx as '{rev}:{node|formatnode}', which is the default
35928
c8e2d6ed1f9e cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35748
diff changeset
468 template provided by logcmdutil.changesettemplater"""
34334
4647e0a8d3d7 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents: 34158
diff changeset
469 repo = ctx.repo()
4647e0a8d3d7 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents: 34158
diff changeset
470 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: 34158
diff changeset
471
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
472
34334
4647e0a8d3d7 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents: 34158
diff changeset
473 def formatrevnode(ui, rev, node):
4647e0a8d3d7 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents: 34158
diff changeset
474 """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: 34158
diff changeset
475 if ui.debugflag:
4647e0a8d3d7 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents: 34158
diff changeset
476 hexfunc = hex
4647e0a8d3d7 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents: 34158
diff changeset
477 else:
4647e0a8d3d7 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents: 34158
diff changeset
478 hexfunc = short
4647e0a8d3d7 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents: 34158
diff changeset
479 return '%d:%s' % (rev, hexfunc(node))
4647e0a8d3d7 scmutil: extract helper functions that returns human-readable change id
Yuya Nishihara <yuya@tcha.org>
parents: 34158
diff changeset
480
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
481
37678
5f8f013e7d52 scmutil: rename resolvepartialhexnodeid() to resolvehexnodeidprefix()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37677
diff changeset
482 def resolvehexnodeidprefix(repo, prefix):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
483 if prefix.startswith('x') and repo.ui.configbool(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
484 'experimental', 'revisions.prefixhexnode'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
485 ):
38894
7848f284b211 revisions: allow "x123" to refer to nodeid prefix "123"
Martin von Zweigbergk <martinvonz@google.com>
parents: 38893
diff changeset
486 prefix = prefix[1:]
38881
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
487 try:
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
488 # 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: 38880
diff changeset
489 # This matches the shortesthexnodeidprefix() function below.
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
490 node = repo.unfiltered().changelog._partialmatch(prefix)
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
491 except error.AmbiguousPrefixLookupError:
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
492 revset = repo.ui.config('experimental', 'revisions.disambiguatewithin')
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
493 if revset:
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
494 # Clear config to avoid infinite recursion
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
495 configoverrides = {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
496 ('experimental', 'revisions.disambiguatewithin'): None
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
497 }
38881
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
498 with repo.ui.configoverride(configoverrides):
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
499 revs = repo.anyrevs([revset], user=True)
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
500 matches = []
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
501 for rev in revs:
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
502 node = repo.changelog.node(rev)
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
503 if hex(node).startswith(prefix):
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
504 matches.append(node)
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
505 if len(matches) == 1:
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
506 return matches[0]
503f936489dd lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38880
diff changeset
507 raise
37504
901e749ca0e1 context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 37463
diff changeset
508 if node is None:
901e749ca0e1 context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 37463
diff changeset
509 return
901e749ca0e1 context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 37463
diff changeset
510 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
511 return node
901e749ca0e1 context: extract partial nodeid lookup method to scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 37463
diff changeset
512
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
513
38893
531b86cc8fb3 shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents: 38892
diff changeset
514 def mayberevnum(repo, prefix):
531b86cc8fb3 shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents: 38892
diff changeset
515 """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: 38892
diff changeset
516 try:
531b86cc8fb3 shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents: 38892
diff changeset
517 i = int(prefix)
531b86cc8fb3 shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents: 38892
diff changeset
518 # 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: 38892
diff changeset
519 # 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
520 # 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
521 # 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
522 if (prefix != b'0' and prefix[0:1] == b'0') or i >= len(repo):
38893
531b86cc8fb3 shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents: 38892
diff changeset
523 return False
531b86cc8fb3 shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents: 38892
diff changeset
524 return True
531b86cc8fb3 shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents: 38892
diff changeset
525 except ValueError:
531b86cc8fb3 shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents: 38892
diff changeset
526 return False
531b86cc8fb3 shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents: 38892
diff changeset
527
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
528
38892
3588e41f796d shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38882
diff changeset
529 def shortesthexnodeidprefix(repo, node, minlength=1, cache=None):
3588e41f796d shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38882
diff changeset
530 """Find the shortest unambiguous prefix that matches hexnode.
3588e41f796d shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38882
diff changeset
531
3588e41f796d shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38882
diff changeset
532 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: 38882
diff changeset
533 caching between calls to this method.
3588e41f796d shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38882
diff changeset
534 """
37708
8e8541610d85 scmutil: make shortesthexnodeidprefix() use unfiltered repo
Martin von Zweigbergk <martinvonz@google.com>
parents: 37680
diff changeset
535 # _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
536 # 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
537 # unfiltered space, which means some hashes may be slightly longer.
38015
3ac950cd5978 shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents: 38004
diff changeset
538
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
539 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
540
38015
3ac950cd5978 shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents: 38004
diff changeset
541 def disambiguate(prefix):
3ac950cd5978 shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents: 38004
diff changeset
542 """Disambiguate against revnums."""
38895
a01200b25da6 shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 38894
diff changeset
543 if repo.ui.configbool('experimental', 'revisions.prefixhexnode'):
a01200b25da6 shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 38894
diff changeset
544 if mayberevnum(repo, prefix):
a01200b25da6 shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 38894
diff changeset
545 return 'x' + prefix
a01200b25da6 shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 38894
diff changeset
546 else:
a01200b25da6 shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 38894
diff changeset
547 return prefix
a01200b25da6 shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 38894
diff changeset
548
38015
3ac950cd5978 shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents: 38004
diff changeset
549 hexnode = hex(node)
38023
5ac72e07692a shortest: avoid magic number "41"
Martin von Zweigbergk <martinvonz@google.com>
parents: 38015
diff changeset
550 for length in range(len(prefix), len(hexnode) + 1):
38015
3ac950cd5978 shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents: 38004
diff changeset
551 prefix = hexnode[:length]
38893
531b86cc8fb3 shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents: 38892
diff changeset
552 if not mayberevnum(repo, prefix):
38015
3ac950cd5978 shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents: 38004
diff changeset
553 return prefix
3ac950cd5978 shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents: 38004
diff changeset
554
38893
531b86cc8fb3 shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com>
parents: 38892
diff changeset
555 cl = repo.unfiltered().changelog
38882
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
556 revset = repo.ui.config('experimental', 'revisions.disambiguatewithin')
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
557 if revset:
38892
3588e41f796d shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38882
diff changeset
558 revs = None
3588e41f796d shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38882
diff changeset
559 if cache is not None:
3588e41f796d shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38882
diff changeset
560 revs = cache.get('disambiguationrevset')
3588e41f796d shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38882
diff changeset
561 if revs is None:
3588e41f796d shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38882
diff changeset
562 revs = repo.anyrevs([revset], user=True)
3588e41f796d shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38882
diff changeset
563 if cache is not None:
3588e41f796d shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38882
diff changeset
564 cache['disambiguationrevset'] = revs
38882
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
565 if cl.rev(node) in revs:
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
566 hexnode = hex(node)
39254
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
567 nodetree = None
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
568 if cache is not None:
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
569 nodetree = cache.get('disambiguationnodetree')
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
570 if not nodetree:
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
571 try:
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
572 nodetree = parsers.nodetree(cl.index, len(revs))
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
573 except AttributeError:
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
574 # no native nodetree
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
575 pass
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
576 else:
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
577 for r in revs:
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
578 nodetree.insert(r)
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
579 if cache is not None:
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
580 cache['disambiguationnodetree'] = nodetree
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
581 if nodetree is not None:
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
582 length = max(nodetree.shortest(node), minlength)
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
583 prefix = hexnode[:length]
7a759ad2d06d shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 39125
diff changeset
584 return disambiguate(prefix)
38882
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
585 for length in range(minlength, len(hexnode) + 1):
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
586 matches = []
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
587 prefix = hexnode[:length]
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
588 for rev in revs:
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
589 otherhexnode = repo[rev].hex()
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
590 if prefix == otherhexnode[:length]:
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
591 matches.append(otherhexnode)
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
592 if len(matches) == 1:
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
593 return disambiguate(prefix)
6f7c9527030b scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 38881
diff changeset
594
37909
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
595 try:
38015
3ac950cd5978 shortest: move revnum-disambiguation out of revlog
Martin von Zweigbergk <martinvonz@google.com>
parents: 38004
diff changeset
596 return disambiguate(cl.shortest(node, minlength))
37909
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
597 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
598 raise error.RepoLookupError()
37680
e743b8524d60 scmutil: introduce shortesthexnodeidprefix()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37679
diff changeset
599
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
600
37350
e32dfff71529 revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents: 37306
diff changeset
601 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
602 """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
603
38880
df0873ab5c14 revlog: use specialized exception for ambiguous prefix lookup
Martin von Zweigbergk <martinvonz@google.com>
parents: 38839
diff changeset
604 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: 38839
diff changeset
605 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
606 """
37350
e32dfff71529 revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents: 37306
diff changeset
607 try:
e32dfff71529 revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents: 37306
diff changeset
608 revsymbol(repo, symbol)
e32dfff71529 revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents: 37306
diff changeset
609 return True
e32dfff71529 revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents: 37306
diff changeset
610 except error.RepoLookupError:
e32dfff71529 revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents: 37306
diff changeset
611 return False
e32dfff71529 revset: use revsymbol() for checking if a symbol is valid
Martin von Zweigbergk <martinvonz@google.com>
parents: 37306
diff changeset
612
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
613
37273
0194dac77c93 scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents: 37271
diff changeset
614 def revsymbol(repo, symbol):
0194dac77c93 scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents: 37271
diff changeset
615 """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: 37271
diff changeset
616
0194dac77c93 scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents: 37271
diff changeset
617 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: 37271
diff changeset
618 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: 37271
diff changeset
619 not "max(public())".
0194dac77c93 scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents: 37271
diff changeset
620 """
0194dac77c93 scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents: 37271
diff changeset
621 if not isinstance(symbol, bytes):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
622 msg = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
623 "symbol (%s of type %s) was not a string, did you mean "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
624 "repo[symbol]?" % (symbol, type(symbol))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
625 )
37273
0194dac77c93 scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents: 37271
diff changeset
626 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
627 try:
37527
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
628 if symbol in ('.', 'tip', 'null'):
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
629 return repo[symbol]
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
630
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
631 try:
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
632 r = int(symbol)
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
633 if '%d' % r != symbol:
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
634 raise ValueError
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
635 l = len(repo.changelog)
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
636 if r < 0:
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
637 r += l
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
638 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
639 raise ValueError
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
640 return repo[r]
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
641 except error.FilteredIndexError:
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
642 raise
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
643 except (ValueError, OverflowError, IndexError):
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
644 pass
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
645
37528
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
646 if len(symbol) == 40:
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
647 try:
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
648 node = bin(symbol)
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
649 rev = repo.changelog.rev(node)
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
650 return repo[rev]
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
651 except error.FilteredLookupError:
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
652 raise
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
653 except (TypeError, LookupError):
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
654 pass
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
655
37529
45667439439e context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37528
diff changeset
656 # look up bookmarks through the name interface
45667439439e context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37528
diff changeset
657 try:
45667439439e context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37528
diff changeset
658 node = repo.names.singlenode(repo, symbol)
45667439439e context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37528
diff changeset
659 rev = repo.changelog.rev(node)
45667439439e context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37528
diff changeset
660 return repo[rev]
45667439439e context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37528
diff changeset
661 except KeyError:
45667439439e context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37528
diff changeset
662 pass
45667439439e context: handle namespaces in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37528
diff changeset
663
37679
ab828755e1ea scmutil: use resolvehexnodeidprefix() from revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37678
diff changeset
664 node = resolvehexnodeidprefix(repo, symbol)
37530
35b34202dd3b context: handle partial nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37529
diff changeset
665 if node is not None:
35b34202dd3b context: handle partial nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37529
diff changeset
666 rev = repo.changelog.rev(node)
35b34202dd3b context: handle partial nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37529
diff changeset
667 return repo[rev]
35b34202dd3b context: handle partial nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37529
diff changeset
668
37531
6639ac97ec3b revsymbol: stop delegating to repo.__getitem__ for unhandled symbols (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37530
diff changeset
669 raise error.RepoLookupError(_("unknown revision '%s'") % symbol)
37527
1c09481acdcc context: handle stringified ints in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37504
diff changeset
670
37528
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
671 except error.WdirUnsupported:
d2b484eed1ec scmutil: handle full hex nodeids in revsymbol()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37527
diff changeset
672 return repo[None]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
673 except (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
674 error.FilteredIndexError,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
675 error.FilteredLookupError,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
676 error.FilteredRepoLookupError,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
677 ):
37385
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
678 raise _filterederror(repo, symbol)
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
679
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
680
37385
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
681 def _filterederror(repo, changeid):
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
682 """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
683
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
684 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
685 experiment with various message variants."""
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
686 if repo.filtername.startswith('visible'):
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
687
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
688 # 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
689 unfilteredrepo = repo.unfiltered()
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
690 ctx = revsymbol(unfilteredrepo, changeid)
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
691
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
692 # 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
693 # 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
694 if ctx.obsolete():
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
695 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
696 else:
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
697 msg = _("hidden revision '%s'") % changeid
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
698
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
699 hint = _('use --hidden to access hidden revisions')
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
700
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
701 return error.FilteredRepoLookupError(msg, hint=hint)
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
702 msg = _("filtered revision '%s' (not in '%s' subset)")
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
703 msg %= (changeid, repo.filtername)
ecd3f6909184 context: move handling of filtering error to revsymbol() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37360
diff changeset
704 return error.FilteredRepoLookupError(msg)
37273
0194dac77c93 scmutil: add method for looking up a context given a revision symbol
Martin von Zweigbergk <martinvonz@google.com>
parents: 37271
diff changeset
705
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
706
34023
5e83a8fe6bc4 rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents: 33819
diff changeset
707 def revsingle(repo, revspec, default='.', localalias=None):
19509
8963a706e075 revsingle: fix silly API issue (issue2992)
Matt Mackall <mpm@selenic.com>
parents: 19154
diff changeset
708 if not revspec and revspec != 0:
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14261
diff changeset
709 return repo[default]
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14261
diff changeset
710
34023
5e83a8fe6bc4 rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents: 33819
diff changeset
711 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
712 if not l:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26491
diff changeset
713 raise error.Abort(_('empty revision set'))
22815
4f81470e83bf revsingle: use `last` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22814
diff changeset
714 return repo[l.last()]
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14261
diff changeset
715
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
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 def _pairspec(revspec):
31044
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30644
diff changeset
718 tree = revsetlang.parse(revspec)
26020
cc3a30ff9490 revpair: restrict odd-range handling to top-level x:y expression (issue4774)
Yuya Nishihara <yuya@tcha.org>
parents: 25928
diff changeset
719 return tree and tree[0] in ('range', 'rangepre', 'rangepost', 'rangeall')
cc3a30ff9490 revpair: restrict odd-range handling to top-level x:y expression (issue4774)
Yuya Nishihara <yuya@tcha.org>
parents: 25928
diff changeset
720
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
721
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14261
diff changeset
722 def revpair(repo, revs):
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14261
diff changeset
723 if not revs:
37254
e9ee540af434 scmutil: make revpair() return context objects (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37253
diff changeset
724 return repo['.'], repo[None]
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14261
diff changeset
725
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14261
diff changeset
726 l = revrange(repo, revs)
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14261
diff changeset
727
41392
a728ef2f9b15 revpair: clarify check for empty revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 41391
diff changeset
728 if not l:
a728ef2f9b15 revpair: clarify check for empty revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 41391
diff changeset
729 raise error.Abort(_('empty revision range'))
a728ef2f9b15 revpair: clarify check for empty revset
Martin von Zweigbergk <martinvonz@google.com>
parents: 41391
diff changeset
730
41391
5079242abef9 revpair: simplify revpair by always relying on smartset.first/last
Martin von Zweigbergk <martinvonz@google.com>
parents: 41288
diff changeset
731 first = l.first()
5079242abef9 revpair: simplify revpair by always relying on smartset.first/last
Martin von Zweigbergk <martinvonz@google.com>
parents: 41288
diff changeset
732 second = l.last()
20862
97b2f26dfc43 revpair: smartset compatibility
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20820
diff changeset
733
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
734 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
735 first == second
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
736 and len(revs) >= 2
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
737 and not all(revrange(repo, [r]) for r in revs)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
738 ):
26836
88c4e97b9669 scmutil: abort if an empty revision is given to revpair()
Matt Harbison <matt_harbison@yahoo.com>
parents: 26587
diff changeset
739 raise error.Abort(_('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
740
26020
cc3a30ff9490 revpair: restrict odd-range handling to top-level x:y expression (issue4774)
Yuya Nishihara <yuya@tcha.org>
parents: 25928
diff changeset
741 # 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
742 if first == second and len(revs) == 1 and not _pairspec(revs[0]):
37254
e9ee540af434 scmutil: make revpair() return context objects (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37253
diff changeset
743 return repo[first], repo[None]
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14261
diff changeset
744
37254
e9ee540af434 scmutil: make revpair() return context objects (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37253
diff changeset
745 return repo[first], repo[second]
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14261
diff changeset
746
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
747
34023
5e83a8fe6bc4 rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents: 33819
diff changeset
748 def revrange(repo, specs, localalias=None):
29417
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29389
diff changeset
749 """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
750
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29389
diff changeset
751 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
752 config options, such as revset aliases.
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 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
755 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
756
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29389
diff changeset
757 ``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
758 revision numbers.
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29389
diff changeset
759
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29389
diff changeset
760 It is assumed the revsets are already formatted. If you have arguments
31044
0b8356705de6 revset: split language services to revsetlang module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30644
diff changeset
761 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
762 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
763
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29389
diff changeset
764 Specifying a single revset is allowed.
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29389
diff changeset
765
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29389
diff changeset
766 Returns a ``revset.abstractsmartset`` which is a list-like interface over
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29389
diff changeset
767 integer revisions.
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29389
diff changeset
768 """
25928
4ee4f7415095 revrange: evaluate all revset specs at once
Yuya Nishihara <yuya@tcha.org>
parents: 25904
diff changeset
769 allspecs = []
29417
526b027b0130 scmutil: improve documentation of revset APIs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29389
diff changeset
770 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
771 if isinstance(spec, int):
41218
24a1f67bb75a revset: enforce "%d" to be interpreted as literal revision number (API) (BC)
Boris Feld <boris.feld@octobus.net>
parents: 41210
diff changeset
772 spec = revsetlang.formatspec('%d', spec)
25928
4ee4f7415095 revrange: evaluate all revset specs at once
Yuya Nishihara <yuya@tcha.org>
parents: 25904
diff changeset
773 allspecs.append(spec)
34023
5e83a8fe6bc4 rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents: 33819
diff changeset
774 return repo.anyrevs(allspecs, user=True, localalias=localalias)
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
775
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
776
26433
3ad41638b4b4 changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents: 26421
diff changeset
777 def meaningfulparents(repo, ctx):
3ad41638b4b4 changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents: 26421
diff changeset
778 """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
779
3ad41638b4b4 changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents: 26421
diff changeset
780 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
781 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
782 is not the preceding revision.
3ad41638b4b4 changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents: 26421
diff changeset
783 """
3ad41638b4b4 changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents: 26421
diff changeset
784 parents = ctx.parents()
3ad41638b4b4 changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents: 26421
diff changeset
785 if len(parents) > 1:
3ad41638b4b4 changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents: 26421
diff changeset
786 return parents
3ad41638b4b4 changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents: 26421
diff changeset
787 if repo.ui.debugflag:
39899
d739f423bf06 repo: look up nullrev context by revnum, not symbolic name
Martin von Zweigbergk <martinvonz@google.com>
parents: 39896
diff changeset
788 return [parents[0], repo[nullrev]]
32676
4bec8cce6a09 scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents: 32310
diff changeset
789 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
790 return []
3ad41638b4b4 changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents: 26421
diff changeset
791 return parents
3ad41638b4b4 changeset_printer: move _meaningful_parentrevs() to scmutil
Yuya Nishihara <yuya@tcha.org>
parents: 26421
diff changeset
792
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
793
41589
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
794 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: 41506
diff changeset
795 """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: 41506
diff changeset
796
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
797 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: 41506
diff changeset
798 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: 41506
diff changeset
799
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
800 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: 41506
diff changeset
801 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: 41506
diff changeset
802
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
803 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: 41506
diff changeset
804
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
805 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: 41506
diff changeset
806 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: 41506
diff changeset
807 """
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
808 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: 41506
diff changeset
809 relative = forcerelativevalue
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
810 else:
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
811 config = repo.ui.config('ui', 'relative-paths')
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
812 if config == 'legacy':
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
813 relative = legacyrelativevalue
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
814 else:
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
815 relative = stringutil.parsebool(config)
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
816 if relative is None:
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
817 raise error.ConfigError(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
818 _("ui.relative-paths is not a boolean ('%s')") % config
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
819 )
41589
aec185af621e config: introduce a new value for ui.relative-paths getting old behavior
Martin von Zweigbergk <martinvonz@google.com>
parents: 41506
diff changeset
820
41505
e6ec0737b706 status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents: 41443
diff changeset
821 if relative:
e6ec0737b706 status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents: 41443
diff changeset
822 cwd = repo.getcwd()
e6ec0737b706 status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents: 41443
diff changeset
823 pathto = repo.pathto
e6ec0737b706 status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents: 41443
diff changeset
824 return lambda f: pathto(f, cwd)
41695
a8d3a4be066e windows: use util.localpath for repo-relative paths in getuipathfn()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41687
diff changeset
825 elif repo.ui.configbool('ui', 'slash'):
a8d3a4be066e windows: use util.localpath for repo-relative paths in getuipathfn()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41687
diff changeset
826 return lambda f: f
41505
e6ec0737b706 status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents: 41443
diff changeset
827 else:
41695
a8d3a4be066e windows: use util.localpath for repo-relative paths in getuipathfn()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41687
diff changeset
828 return util.localpath
41505
e6ec0737b706 status: extract helper for producing relative or absolute path for UI
Martin von Zweigbergk <martinvonz@google.com>
parents: 41443
diff changeset
829
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
830
41661
f8b18583049f add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41660
diff changeset
831 def subdiruipathfn(subpath, uipathfn):
f8b18583049f add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41660
diff changeset
832 '''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: 41660
diff changeset
833 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: 41660
diff changeset
834
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
835
41663
6a447a3d1bd0 addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41661
diff changeset
836 def anypats(pats, opts):
6a447a3d1bd0 addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41661
diff changeset
837 '''Checks if any patterns, including --include and --exclude were given.
6a447a3d1bd0 addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41661
diff changeset
838
6a447a3d1bd0 addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41661
diff changeset
839 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: 41661
diff changeset
840 print absolute or relative paths.
6a447a3d1bd0 addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41661
diff changeset
841 '''
6a447a3d1bd0 addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41661
diff changeset
842 return bool(pats or opts.get('include') or opts.get('exclude'))
6a447a3d1bd0 addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41661
diff changeset
843
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
844
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
845 def expandpats(pats):
21111
9d28fd795215 match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents: 20980
diff changeset
846 '''Expand bare globs when running on windows.
9d28fd795215 match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents: 20980
diff changeset
847 On posix we assume it already has already been done by sh.'''
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
848 if not util.expandglobs:
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
849 return list(pats)
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
850 ret = []
21111
9d28fd795215 match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents: 20980
diff changeset
851 for kindpat in pats:
9d28fd795215 match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents: 20980
diff changeset
852 kind, pat = matchmod._patsplit(kindpat, None)
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
853 if kind is None:
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
854 try:
21111
9d28fd795215 match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents: 20980
diff changeset
855 globbed = glob.glob(pat)
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
856 except re.error:
21111
9d28fd795215 match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents: 20980
diff changeset
857 globbed = [pat]
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
858 if globbed:
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
859 ret.extend(globbed)
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
860 continue
21111
9d28fd795215 match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents: 20980
diff changeset
861 ret.append(kindpat)
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
862 return ret
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
863
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
864
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
865 def matchandpats(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
866 ctx, pats=(), opts=None, globbed=False, default='relpath', badfn=None
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
867 ):
21111
9d28fd795215 match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents: 20980
diff changeset
868 '''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
869 The matcher will warn about bad matches, unless an alternate badfn callback
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25466
diff changeset
870 is provided.'''
26326
58218b0e6005 match: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26325
diff changeset
871 if opts is None:
58218b0e6005 match: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26325
diff changeset
872 opts = {}
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
873 if not globbed and default == 'relpath':
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
874 pats = expandpats(pats or [])
14670
19197fa4c41c scmutil: match now accepts a context or a repo
Matt Mackall <mpm@selenic.com>
parents: 14669
diff changeset
875
41676
0ed7a8ac5711 scmutil: respect ui.relative-paths in default match.badfn
Martin von Zweigbergk <martinvonz@google.com>
parents: 41673
diff changeset
876 uipathfn = getuipathfn(ctx.repo(), legacyrelativevalue=True)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
877
25467
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25466
diff changeset
878 def bad(f, msg):
41676
0ed7a8ac5711 scmutil: respect ui.relative-paths in default match.badfn
Martin von Zweigbergk <martinvonz@google.com>
parents: 41673
diff changeset
879 ctx.repo().ui.warn("%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
880
25467
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25466
diff changeset
881 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
882 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
883
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
884 m = ctx.match(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
885 pats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
886 opts.get('include'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
887 opts.get('exclude'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
888 default,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
889 listsubrepos=opts.get('subrepos'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
890 badfn=badfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
891 )
25466
007a1d53f7c3 scmutil: use the optional badfn argument when building a matcher
Matt Harbison <matt_harbison@yahoo.com>
parents: 25434
diff changeset
892
24447
d44d53bc9a1e matcher: make e.g. 'relpath:.' lead to fast paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 24338
diff changeset
893 if m.always():
d44d53bc9a1e matcher: make e.g. 'relpath:.' lead to fast paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 24338
diff changeset
894 pats = []
16171
336e61875335 graphlog: restore FILE glob expansion on Windows
Patrick Mezard <patrick@mezard.eu>
parents: 16167
diff changeset
895 return m, pats
336e61875335 graphlog: restore FILE glob expansion on Windows
Patrick Mezard <patrick@mezard.eu>
parents: 16167
diff changeset
896
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
897
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
898 def match(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
899 ctx, pats=(), opts=None, globbed=False, default='relpath', badfn=None
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
900 ):
21111
9d28fd795215 match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents: 20980
diff changeset
901 '''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
902 return matchandpats(ctx, pats, opts, globbed, default, badfn=badfn)[0]
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
903
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
904
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
905 def matchall(repo):
21111
9d28fd795215 match: improve documentation - docstrings and more descriptive variable naming
Mads Kiilerich <madski@unity3d.com>
parents: 20980
diff changeset
906 '''Return a matcher that will efficiently match everything.'''
41687
0531dff73d0b match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41677
diff changeset
907 return matchmod.always()
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
908
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
909
25467
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25466
diff changeset
910 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
911 '''Return a matcher that will efficiently match exactly these files.'''
41687
0531dff73d0b match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41677
diff changeset
912 return matchmod.exact(files, badfn=badfn)
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
913
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
914
34854
39b094e4ae2c revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34793
diff changeset
915 def parsefollowlinespattern(repo, rev, pat, msg):
39b094e4ae2c revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34793
diff changeset
916 """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
917 logic.
39b094e4ae2c revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34793
diff changeset
918 """
39b094e4ae2c revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34793
diff changeset
919 if not matchmod.patkind(pat):
39b094e4ae2c revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34793
diff changeset
920 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
921 else:
39b094e4ae2c revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34793
diff changeset
922 ctx = repo[rev]
39b094e4ae2c revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34793
diff changeset
923 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
924 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
925 if len(files) != 1:
39b094e4ae2c revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34793
diff changeset
926 raise error.ParseError(msg)
39b094e4ae2c revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34793
diff changeset
927 return files[0]
39b094e4ae2c revset: extract a parsefollowlinespattern helper function
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34793
diff changeset
928
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
929
40786
65591a513b9c revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents: 40699
diff changeset
930 def getorigvfs(ui, repo):
65591a513b9c revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents: 40699
diff changeset
931 """return a vfs suitable to save 'orig' file
65591a513b9c revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents: 40699
diff changeset
932
65591a513b9c revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents: 40699
diff changeset
933 return None if no special directory is configured"""
65591a513b9c revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents: 40699
diff changeset
934 origbackuppath = ui.config('ui', 'origbackuppath')
65591a513b9c revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents: 40699
diff changeset
935 if not origbackuppath:
65591a513b9c revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents: 40699
diff changeset
936 return None
65591a513b9c revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents: 40699
diff changeset
937 return vfs.vfs(repo.wvfs.join(origbackuppath))
65591a513b9c revert: extract origvfs logic in a sub-function
Boris Feld <boris.feld@octobus.net>
parents: 40699
diff changeset
938
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
939
41608
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
940 def backuppath(ui, repo, filepath):
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
941 '''customize where working copy backup files (.orig files) are created
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
942
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
943 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: 41589
diff changeset
944 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: 41589
diff changeset
945
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
946 filepath is repo-relative
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
947
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
948 Returns an absolute path
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
949 '''
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
950 origvfs = getorigvfs(ui, repo)
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
951 if origvfs is None:
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
952 return repo.wjoin(filepath + ".orig")
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
953
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
954 origbackupdir = origvfs.dirname(filepath)
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
955 if not origvfs.isdir(origbackupdir) or origvfs.islink(origbackupdir):
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
956 ui.note(_('creating directory: %s\n') % origvfs.join(origbackupdir))
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
957
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
958 # Remove any files that conflict with the backup file's path
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
959 for f in reversed(list(util.finddirs(filepath))):
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
960 if origvfs.isfileorlink(f):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
961 ui.note(_('removing conflicting file: %s\n') % origvfs.join(f))
41608
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
962 origvfs.unlink(f)
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
963 break
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
964
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
965 origvfs.makedirs(origbackupdir)
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
966
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
967 if origvfs.isdir(filepath) and not origvfs.islink(filepath):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
968 ui.note(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
969 _('removing conflicting directory: %s\n') % origvfs.join(filepath)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
970 )
41608
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
971 origvfs.rmtree(filepath, forcibly=True)
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
972
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
973 return origvfs.join(filepath)
8785188d1915 scmutil: introduce a new backuppath() to replace origpath()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41589
diff changeset
974
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
975
33331
4bae3c117b57 scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents: 33330
diff changeset
976 class _containsnode(object):
4bae3c117b57 scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents: 33330
diff changeset
977 """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
978
4bae3c117b57 scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents: 33330
diff changeset
979 def __init__(self, repo, revcontainer):
4bae3c117b57 scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents: 33330
diff changeset
980 self._torev = repo.changelog.rev
4bae3c117b57 scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents: 33330
diff changeset
981 self._revcontains = revcontainer.__contains__
4bae3c117b57 scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents: 33330
diff changeset
982
4bae3c117b57 scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents: 33330
diff changeset
983 def __contains__(self, node):
4bae3c117b57 scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents: 33330
diff changeset
984 return self._revcontains(self._torev(node))
4bae3c117b57 scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents: 33330
diff changeset
985
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
986
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
987 def cleanupnodes(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
988 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
989 replacements,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
990 operation,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
991 moves=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
992 metadata=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
993 fixphase=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
994 targetphase=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
995 backup=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
996 ):
33100
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
997 """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: 32679
diff changeset
998
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
999 That includes writing obsmarkers or stripping nodes, and moving bookmarks.
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1000 (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: 32679
diff changeset
1001
33686
2f427b57bf90 rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents: 33685
diff changeset
1002 By default, bookmark moves are calculated automatically from 'replacements',
2f427b57bf90 rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents: 33685
diff changeset
1003 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: 33685
diff changeset
1004 additional bookmark moves that should not have associated obsmarkers.
2f427b57bf90 rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents: 33685
diff changeset
1005
33685
2dbd6d259cd2 cleanupnodes: rename "mapping" to "replacements"
Martin von Zweigbergk <martinvonz@google.com>
parents: 33684
diff changeset
1006 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: 33684
diff changeset
1007 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
1008
3df59451cdec scmutil: add capability to cleanupnodes to take obsmarker metadata
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34737
diff changeset
1009 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
1010 obsolescence is enabled.
33100
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1011 """
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1012 assert fixphase or targetphase is None
33686
2f427b57bf90 rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents: 33685
diff changeset
1013 if not replacements and not moves:
2f427b57bf90 rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents: 33685
diff changeset
1014 return
2f427b57bf90 rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents: 33685
diff changeset
1015
2f427b57bf90 rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents: 33685
diff changeset
1016 # translate mapping's other forms
33685
2dbd6d259cd2 cleanupnodes: rename "mapping" to "replacements"
Martin von Zweigbergk <martinvonz@google.com>
parents: 33684
diff changeset
1017 if not util.safehasattr(replacements, 'items'):
39896
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1018 replacements = {(n,): () for n in replacements}
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1019 else:
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1020 # upgrading non tuple "source" to tuple ones for BC
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1021 repls = {}
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1022 for key, value in replacements.items():
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1023 if not isinstance(key, tuple):
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1024 key = (key,)
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1025 repls[key] = value
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1026 replacements = repls
33100
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1027
40873
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1028 # 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: 40786
diff changeset
1029 unfi = repo.unfiltered()
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1030
33684
033a5befbaf7 cleanupnodes: separate out bookmark destination calculation from actual update
Martin von Zweigbergk <martinvonz@google.com>
parents: 33647
diff changeset
1031 # Calculate bookmark movements
33686
2f427b57bf90 rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents: 33685
diff changeset
1032 if moves is None:
2f427b57bf90 rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents: 33685
diff changeset
1033 moves = {}
40873
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1034 for oldnodes, newnodes in replacements.items():
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1035 for oldnode in oldnodes:
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1036 if oldnode in moves:
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1037 continue
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1038 if len(newnodes) > 1:
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1039 # usually a split, take the one with biggest rev number
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1040 newnode = next(unfi.set('max(%ln)', newnodes)).node()
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1041 elif len(newnodes) == 0:
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1042 # move bookmark backwards
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1043 allreplaced = []
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1044 for rep in replacements:
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1045 allreplaced.extend(rep)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1046 roots = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1047 unfi.set('max((::%n) - %ln)', oldnode, allreplaced)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1048 )
40873
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1049 if roots:
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1050 newnode = roots[0].node()
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1051 else:
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1052 newnode = nullid
39896
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1053 else:
40873
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1054 newnode = newnodes[0]
b7823bd59b07 cleanupnodes: trust caller when "moves" is not None
Martin von Zweigbergk <martinvonz@google.com>
parents: 40786
diff changeset
1055 moves[oldnode] = newnode
33684
033a5befbaf7 cleanupnodes: separate out bookmark destination calculation from actual update
Martin von Zweigbergk <martinvonz@google.com>
parents: 33647
diff changeset
1056
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1057 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: 38425
diff changeset
1058 toretract = {}
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1059 toadvance = {}
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1060 if fixphase:
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1061 precursors = {}
39896
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1062 for oldnodes, newnodes in replacements.items():
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1063 for oldnode in oldnodes:
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1064 for newnode in newnodes:
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1065 precursors.setdefault(newnode, []).append(oldnode)
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1066
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1067 allnewnodes.sort(key=lambda n: unfi[n].rev())
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1068 newphases = {}
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1069
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1070 def phase(ctx):
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1071 return newphases.get(ctx.node(), ctx.phase())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1072
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1073 for newnode in allnewnodes:
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1074 ctx = unfi[newnode]
38437
05b7dd11918e cleanupnodes: preserve phase of parents of new nodes
Martin von Zweigbergk <martinvonz@google.com>
parents: 38429
diff changeset
1075 parentphase = max(phase(p) for p in ctx.parents())
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1076 if targetphase is None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1077 oldphase = max(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1078 unfi[oldnode].phase() for oldnode in precursors[newnode]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1079 )
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1080 newphase = max(oldphase, parentphase)
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1081 else:
38437
05b7dd11918e cleanupnodes: preserve phase of parents of new nodes
Martin von Zweigbergk <martinvonz@google.com>
parents: 38429
diff changeset
1082 newphase = max(targetphase, parentphase)
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1083 newphases[newnode] = newphase
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1084 if newphase > ctx.phase():
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1085 toretract.setdefault(newphase, []).append(newnode)
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1086 elif newphase < ctx.phase():
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1087 toadvance.setdefault(newphase, []).append(newnode)
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1088
33100
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1089 with repo.transaction('cleanup') as tr:
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1090 # Move bookmarks
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1091 bmarks = repo._bookmarks
33511
9689239d7c2b bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents: 33505
diff changeset
1092 bmarkchanges = []
33684
033a5befbaf7 cleanupnodes: separate out bookmark destination calculation from actual update
Martin von Zweigbergk <martinvonz@google.com>
parents: 33647
diff changeset
1093 for oldnode, newnode in moves.items():
33100
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1094 oldbmarks = repo.nodebookmarks(oldnode)
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1095 if not oldbmarks:
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1096 continue
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1097 from . import bookmarks # avoid import cycle
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1098
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1099 repo.ui.debug(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1100 'moving bookmarks %r from %s to %s\n'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1101 % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1102 pycompat.rapply(pycompat.maybebytestr, oldbmarks),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1103 hex(oldnode),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1104 hex(newnode),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1105 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1106 )
33331
4bae3c117b57 scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents: 33330
diff changeset
1107 # Delete divergent bookmarks being parents of related newnodes
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1108 deleterevs = repo.revs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1109 'parents(roots(%ln & (::%n))) - parents(%n)',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1110 allnewnodes,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1111 newnode,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1112 oldnode,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1113 )
33331
4bae3c117b57 scmutil: make cleanupnodes delete divergent bookmarks
Jun Wu <quark@fb.com>
parents: 33330
diff changeset
1114 deletenodes = _containsnode(repo, deleterevs)
33100
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1115 for name in oldbmarks:
33511
9689239d7c2b bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents: 33505
diff changeset
1116 bmarkchanges.append((name, newnode))
9689239d7c2b bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents: 33505
diff changeset
1117 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
1118 bmarkchanges.append((b, None))
9689239d7c2b bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents: 33505
diff changeset
1119
9689239d7c2b bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents: 33505
diff changeset
1120 if bmarkchanges:
9689239d7c2b bookmark: use 'divergent2delete' in 'scmutil.cleanupnode'
Boris Feld <boris.feld@octobus.net>
parents: 33505
diff changeset
1121 bmarks.applychanges(repo, tr, bmarkchanges)
33100
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1122
38429
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1123 for phase, nodes in toretract.items():
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1124 phases.retractboundary(repo, tr, phase, nodes)
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1125 for phase, nodes in toadvance.items():
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1126 phases.advanceboundary(repo, tr, phase, nodes)
32fba6fe893d scmutil: make cleanupnodes optionally also fix the phase
Martin von Zweigbergk <martinvonz@google.com>
parents: 38425
diff changeset
1127
41804
64de5f44eec3 rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents: 41790
diff changeset
1128 mayusearchived = repo.ui.config('experimental', 'cleanup-as-archived')
33100
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1129 # Obsolete or strip nodes
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1130 if obsolete.isenabled(repo, obsolete.createmarkersopt):
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1131 # 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: 32679
diff changeset
1132 # without a successor, skip that obssolete request since it's
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1133 # 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: 32679
diff changeset
1134 # 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: 32679
diff changeset
1135 # some obsstore logic.
40042
ca9d0c93acea cleanupnodes: update comment to drop mention of filtering
Boris Feld <boris.feld@octobus.net>
parents: 39928
diff changeset
1136 # NOTE: the sorting might belong to createmarkers.
33330
ba43e5ee9c6d scmutil: make cleanupnodes handle filtered node
Jun Wu <quark@fb.com>
parents: 33252
diff changeset
1137 torev = unfi.changelog.rev
39896
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1138 sortfunc = lambda ns: torev(ns[0][0])
39895
1c3f1491965f scmutil: expand long "one-liner"
Boris Feld <boris.feld@octobus.net>
parents: 39841
diff changeset
1139 rels = []
39896
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1140 for ns, s in sorted(replacements.items(), key=sortfunc):
39928
61f39a892168 cleanupnodes: pass multiple predecessors to `createmarkers` directly
Boris Feld <boris.feld@octobus.net>
parents: 39921
diff changeset
1141 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: 39921
diff changeset
1142 rels.append(rel)
33686
2f427b57bf90 rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents: 33685
diff changeset
1143 if rels:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1144 obsolete.createmarkers(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1145 repo, rels, operation=operation, metadata=metadata
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1146 )
41804
64de5f44eec3 rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents: 41790
diff changeset
1147 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: 41790
diff changeset
1148 # 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: 41790
diff changeset
1149 allreplaced = set()
64de5f44eec3 rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents: 41790
diff changeset
1150 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: 41790
diff changeset
1151 allreplaced.update(ns)
64de5f44eec3 rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents: 41790
diff changeset
1152 if backup:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1153 from . import repair # avoid import cycle
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1154
41804
64de5f44eec3 rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents: 41790
diff changeset
1155 node = min(allreplaced, key=repo.changelog.rev)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1156 repair.backupbundle(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1157 repo, allreplaced, allreplaced, node, operation
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1158 )
41804
64de5f44eec3 rewriting: add an option for rewrite commands to use the archived phase
Boris Feld <boris.feld@octobus.net>
parents: 41790
diff changeset
1159 phases.retractboundary(repo, tr, phases.archived, allreplaced)
33100
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1160 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1161 from . import repair # avoid import cycle
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1162
39896
b99903534e06 scmutil: accept multiple predecessors in 'replacements' (API)
Boris Feld <boris.feld@octobus.net>
parents: 39895
diff changeset
1163 tostrip = list(n for ns in replacements for n in ns)
33686
2f427b57bf90 rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents: 33685
diff changeset
1164 if tostrip:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1165 repair.delayedstrip(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1166 repo.ui, repo, tostrip, operation, backup=backup
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1167 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1168
33100
65cadeea6c22 scmutil: add a cleanupnodes method for developers
Jun Wu <quark@fb.com>
parents: 32679
diff changeset
1169
41663
6a447a3d1bd0 addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41661
diff changeset
1170 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
1171 if opts is None:
d9537ce64f3a addremove: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26328
diff changeset
1172 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
1173 m = matcher
37271
14cd5290c4e6 addremove: remove dry_run, similarity from scmutil.addremove (API)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37261
diff changeset
1174 dry_run = opts.get('dry_run')
37306
6942c73f0733 addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents: 37273
diff changeset
1175 try:
6942c73f0733 addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents: 37273
diff changeset
1176 similarity = float(opts.get('similarity') or 0)
6942c73f0733 addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents: 37273
diff changeset
1177 except ValueError:
6942c73f0733 addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents: 37273
diff changeset
1178 raise error.Abort(_('similarity must be a number'))
6942c73f0733 addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents: 37273
diff changeset
1179 if similarity < 0 or similarity > 100:
6942c73f0733 addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents: 37273
diff changeset
1180 raise error.Abort(_('similarity must be between 0 and 100'))
6942c73f0733 addremove: pass command-level similarity value down to scmutil.addremove()
Yuya Nishihara <yuya@tcha.org>
parents: 37273
diff changeset
1181 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
1182
23537
f1b06a8aad42 commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
1183 ret = 0
f1b06a8aad42 commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
1184
f1b06a8aad42 commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
1185 wctx = repo[None]
f1b06a8aad42 commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
1186 for subpath in sorted(wctx.substate):
29813
35560189677c subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents: 29782
diff changeset
1187 submatch = matchmod.subdirmatcher(subpath, m)
35560189677c subrepo: cleanup of subrepo filematcher logic
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com>
parents: 29782
diff changeset
1188 if opts.get('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
1189 sub = wctx.sub(subpath)
41640
5ee3c49fc9cd subrepo: adjust subrepo prefix before calling subrepo.addremove() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41617
diff changeset
1190 subprefix = repo.wvfs.reljoin(prefix, subpath)
41663
6a447a3d1bd0 addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41661
diff changeset
1191 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
1192 try:
41663
6a447a3d1bd0 addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41661
diff changeset
1193 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
1194 ret = 1
f1b06a8aad42 commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
1195 except error.LookupError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1196 repo.ui.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1197 _("skipping missing subrepository: %s\n")
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1198 % uipathfn(subpath)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1199 )
23537
f1b06a8aad42 commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
1200
16167
94a8396c9305 addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents: 16115
diff changeset
1201 rejected = []
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1202
23534
83bbedc16b3f addremove: warn when addremove fails to operate on a named path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23533
diff changeset
1203 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
1204 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
1205 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
1206 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
1207
25434
5984dd42e140 addremove: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25418
diff changeset
1208 badmatch = matchmod.badmatch(m, badfn)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1209 added, unknown, deleted, removed, forgotten = _interestingfiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1210 repo, badmatch
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1211 )
18863
1b70e5941ad7 scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents: 18862
diff changeset
1212
23259
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23142
diff changeset
1213 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
1214 toprint = unknownset.copy()
1b70e5941ad7 scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents: 18862
diff changeset
1215 toprint.update(deleted)
1b70e5941ad7 scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents: 18862
diff changeset
1216 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
1217 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
1218 if abs in unknownset:
41663
6a447a3d1bd0 addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41661
diff changeset
1219 status = _('adding %s\n') % uipathfn(abs)
40367
824b687ff6af addremove: add "ui." prefix to message color keys
Yuya Nishihara <yuya@tcha.org>
parents: 40341
diff changeset
1220 label = 'ui.addremove.added'
18863
1b70e5941ad7 scmutil.addremove: pull ui.status printing out of the loop
Siddharth Agarwal <sid0@fb.com>
parents: 18862
diff changeset
1221 else:
41663
6a447a3d1bd0 addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41661
diff changeset
1222 status = _('removing %s\n') % uipathfn(abs)
40367
824b687ff6af addremove: add "ui." prefix to message color keys
Yuya Nishihara <yuya@tcha.org>
parents: 40341
diff changeset
1223 label = 'ui.addremove.removed'
39125
ad88726d6982 addremove: add labels for messages about added and removed files
Boris Feld <boris.feld@octobus.net>
parents: 38895
diff changeset
1224 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
1225
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1226 renames = _findrenames(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1227 repo, m, added + unknown, removed + deleted, similarity, uipathfn
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1228 )
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1229
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1230 if not dry_run:
23259
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23142
diff changeset
1231 _markchanges(repo, unknown + forgotten, deleted, renames)
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1232
16167
94a8396c9305 addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents: 16115
diff changeset
1233 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
1234 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
1235 return 1
23537
f1b06a8aad42 commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
1236 return ret
16167
94a8396c9305 addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com>
parents: 16115
diff changeset
1237
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1238
19154
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1239 def marktouched(repo, files, similarity=0.0):
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1240 '''Assert that files have somehow been operated upon. files are relative to
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1241 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
1242 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
1243 rejected = []
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1244
23259
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23142
diff changeset
1245 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
1246
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1247 if repo.ui.verbose:
23259
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23142
diff changeset
1248 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
1249 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
1250 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
1251 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
1252 if abs in unknownset:
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1253 status = _('adding %s\n') % abs
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1254 else:
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1255 status = _('removing %s\n') % abs
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1256 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
1257
41673
0a5a6675c86c addremove: use uipathfn instead of m.rel() for recorded similatity message
Martin von Zweigbergk <martinvonz@google.com>
parents: 41663
diff changeset
1258 # TODO: We should probably have the caller pass in uipathfn and apply it to
41708
e21183db2259 scmutil: fix a comment that doesn't match the code
Martin von Zweigbergk <martinvonz@google.com>
parents: 41696
diff changeset
1259 # the messages above too. legacyrelativevalue=True is consistent with how
41673
0a5a6675c86c addremove: use uipathfn instead of m.rel() for recorded similatity message
Martin von Zweigbergk <martinvonz@google.com>
parents: 41663
diff changeset
1260 # it used to work.
41696
b81ecf3571d5 addremove: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents: 41695
diff changeset
1261 uipathfn = getuipathfn(repo, legacyrelativevalue=True)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1262 renames = _findrenames(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1263 repo, m, added + unknown, removed + deleted, similarity, uipathfn
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1264 )
19154
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1265
23259
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23142
diff changeset
1266 _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
1267
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1268 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
1269 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
1270 return 1
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1271 return 0
0c7cf411b390 scmutil: add a function to mark that files have been operated on
Siddharth Agarwal <sid0@fb.com>
parents: 19153
diff changeset
1272
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1273
19150
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1274 def _interestingfiles(repo, matcher):
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1275 '''Walk dirstate with matcher, looking for files that addremove would care
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1276 about.
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1277
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1278 This is different from dirstate.status because it doesn't care about
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1279 whether files are modified or clean.'''
23259
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23142
diff changeset
1280 added, unknown, deleted, removed, forgotten = [], [], [], [], []
33647
377e8ddaebef pathauditor: disable cache of audited paths by default (issue5628)
Yuya Nishihara <yuya@tcha.org>
parents: 33542
diff changeset
1281 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
1282
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1283 ctx = repo[None]
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1284 dirstate = repo.dirstate
40088
1d09ba0d2ed3 narrow: move remaining narrow-limited dirstate walks to core
Martin von Zweigbergk <martinvonz@google.com>
parents: 40042
diff changeset
1285 matcher = repo.narrowmatch(matcher, includeexact=True)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1286 walkresults = dirstate.walk(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1287 matcher,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1288 subrepos=sorted(ctx.substate),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1289 unknown=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1290 ignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1291 full=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1292 )
19150
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1293 for abs, st in walkresults.iteritems():
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1294 dstate = dirstate[abs]
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1295 if dstate == '?' and audit_path.check(abs):
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1296 unknown.append(abs)
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1297 elif dstate != 'r' and not st:
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1298 deleted.append(abs)
23259
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23142
diff changeset
1299 elif dstate == 'r' and st:
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23142
diff changeset
1300 forgotten.append(abs)
19150
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1301 # for finding renames
23259
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23142
diff changeset
1302 elif dstate == 'r' and not st:
19150
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1303 removed.append(abs)
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1304 elif dstate == 'a':
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1305 added.append(abs)
7a4eab2456de scmutil.addremove: factor out dirstate walk into another function
Siddharth Agarwal <sid0@fb.com>
parents: 19070
diff changeset
1306
23259
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23142
diff changeset
1307 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
1308
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1309
41673
0a5a6675c86c addremove: use uipathfn instead of m.rel() for recorded similatity message
Martin von Zweigbergk <martinvonz@google.com>
parents: 41663
diff changeset
1310 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
1311 '''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
1312 renames = {}
7a1292523db3 scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents: 19151
diff changeset
1313 if similarity > 0:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1314 for old, new, score in similar.findrenames(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1315 repo, added, removed, similarity
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1316 ):
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1317 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1318 repo.ui.verbose
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1319 or not matcher.exact(old)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1320 or not matcher.exact(new)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1321 ):
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1322 repo.ui.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1323 _(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1324 'recording removal of %s as rename to %s '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1325 '(%d%% similar)\n'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1326 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1327 % (uipathfn(old), uipathfn(new), score * 100)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1328 )
19152
7a1292523db3 scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents: 19151
diff changeset
1329 renames[new] = old
7a1292523db3 scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents: 19151
diff changeset
1330 return renames
7a1292523db3 scmutil.addremove: factor out code to find renames
Siddharth Agarwal <sid0@fb.com>
parents: 19151
diff changeset
1331
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1332
19153
9a4e219bda89 scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents: 19152
diff changeset
1333 def _markchanges(repo, unknown, deleted, renames):
9a4e219bda89 scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents: 19152
diff changeset
1334 '''Marks the files in unknown as added, the files in deleted as removed,
9a4e219bda89 scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents: 19152
diff changeset
1335 and the files in renames as copied.'''
9a4e219bda89 scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents: 19152
diff changeset
1336 wctx = repo[None]
27851
4133a306606c with: use context manager in _markchanges
Bryan O'Sullivan <bryano@fb.com>
parents: 27706
diff changeset
1337 with repo.wlock():
19153
9a4e219bda89 scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents: 19152
diff changeset
1338 wctx.forget(deleted)
9a4e219bda89 scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents: 19152
diff changeset
1339 wctx.add(unknown)
9a4e219bda89 scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents: 19152
diff changeset
1340 for new, old in renames.iteritems():
9a4e219bda89 scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents: 19152
diff changeset
1341 wctx.copy(old, new)
9a4e219bda89 scmutil.addremove: factor out code to mark added/removed/renames
Siddharth Agarwal <sid0@fb.com>
parents: 19152
diff changeset
1342
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1343
41790
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1344 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
1345 if copiesmod.usechangesetcentricalgo(repo):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1346
42114
aa84bc48c2f7 getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 41943
diff changeset
1347 def getrenamed(fn, rev):
aa84bc48c2f7 getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 41943
diff changeset
1348 ctx = repo[rev]
aa84bc48c2f7 getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 41943
diff changeset
1349 p1copies = ctx.p1copies()
aa84bc48c2f7 getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 41943
diff changeset
1350 if fn in p1copies:
aa84bc48c2f7 getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 41943
diff changeset
1351 return p1copies[fn]
aa84bc48c2f7 getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 41943
diff changeset
1352 p2copies = ctx.p2copies()
aa84bc48c2f7 getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 41943
diff changeset
1353 if fn in p2copies:
aa84bc48c2f7 getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 41943
diff changeset
1354 return p2copies[fn]
aa84bc48c2f7 getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 41943
diff changeset
1355 return None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1356
42114
aa84bc48c2f7 getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 41943
diff changeset
1357 return getrenamed
aa84bc48c2f7 getrenamedfn: get copy data from context object if configured
Martin von Zweigbergk <martinvonz@google.com>
parents: 41943
diff changeset
1358
41790
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1359 rcache = {}
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1360 if endrev is None:
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1361 endrev = len(repo)
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1362
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1363 def getrenamed(fn, rev):
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1364 '''looks up all renames for a file (up to endrev) the first
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1365 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: 41708
diff changeset
1366 parses the manifest if linkrev != changerev.
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1367 Returns rename info for fn at changerev rev.'''
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1368 if fn not in rcache:
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1369 rcache[fn] = {}
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1370 fl = repo.file(fn)
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1371 for i in fl:
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1372 lr = fl.linkrev(i)
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1373 renamed = fl.renamed(fl.node(i))
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1374 rcache[fn][lr] = renamed and renamed[0]
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1375 if lr >= endrev:
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1376 break
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1377 if rev in rcache[fn]:
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1378 return rcache[fn][rev]
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1379
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1380 # 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: 41708
diff changeset
1381 # filectx logic.
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1382 try:
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1383 return repo[rev][fn].copysource()
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1384 except error.LookupError:
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1385 return None
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1386
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1387 return getrenamed
e9b9ee9af4a9 templatekw: move getrenamedfn() to scmutil (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41708
diff changeset
1388
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1389
42518
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1390 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
1391 if copiesmod.usechangesetcentricalgo(repo):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1392
42518
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1393 def copiesfn(ctx):
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1394 if ctx.p2copies():
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1395 allcopies = ctx.p1copies().copy()
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1396 # 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
1397 allcopies.update(ctx.p2copies())
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1398 return sorted(allcopies.items())
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1399 else:
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1400 return sorted(ctx.p1copies().items())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1401
42518
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1402 else:
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1403 getrenamed = getrenamedfn(repo, endrev)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1404
42518
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1405 def copiesfn(ctx):
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1406 copies = []
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1407 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
1408 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
1409 if rename:
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1410 copies.append((fn, rename))
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1411 return copies
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1412
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1413 return copiesfn
88ba0ff94605 copies: create helper for getting all copies for changeset
Martin von Zweigbergk <martinvonz@google.com>
parents: 42115
diff changeset
1414
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1415
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1416 def dirstatecopy(ui, repo, wctx, src, dst, dryrun=False, cwd=None):
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1417 """Update the dirstate to reflect the intent of copying src to dst. For
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1418 different reasons it might not end with dst being marked as copied from src.
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1419 """
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1420 origsrc = repo.dirstate.copied(src) or src
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1421 if dst == origsrc: # copying back a copy?
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1422 if repo.dirstate[dst] not in 'mn' and not dryrun:
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1423 repo.dirstate.normallookup(dst)
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1424 else:
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1425 if repo.dirstate[origsrc] == 'a' and origsrc == src:
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1426 if not ui.quiet:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1427 ui.warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1428 _(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1429 "%s has not been committed yet, so no copy "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1430 "data will be stored for %s.\n"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1431 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1432 % (repo.pathto(origsrc, cwd), repo.pathto(dst, cwd))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1433 )
14320
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1434 if repo.dirstate[dst] in '?r' and not dryrun:
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1435 wctx.add([dst])
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1436 elif not dryrun:
3438417a6657 scmutil: fold in wdutil
Matt Mackall <mpm@selenic.com>
parents: 14319
diff changeset
1437 wctx.copy(origsrc, dst)
14482
58b36e9ea783 introduce new function scmutil.readrequires
Adrian Buehlmann <adrian@cadifra.com>
parents: 14435
diff changeset
1438
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1439
41942
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1440 def movedirstate(repo, newctx, match=None):
41943
ad4a3e2eedb3 scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41942
diff changeset
1441 """Move the dirstate to newctx and adjust it as necessary.
ad4a3e2eedb3 scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41942
diff changeset
1442
ad4a3e2eedb3 scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41942
diff changeset
1443 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: 41942
diff changeset
1444 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: 41942
diff changeset
1445 working copy and newctx.
ad4a3e2eedb3 scmutil: document matcher argument of movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41942
diff changeset
1446 """
41942
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1447 oldctx = repo['.']
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1448 ds = repo.dirstate
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1449 ds.setparents(newctx.node(), nullid)
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1450 copies = dict(ds.copies())
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1451 s = newctx.status(oldctx, match=match)
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1452 for f in s.modified:
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1453 if ds[f] == 'r':
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1454 # modified + removed -> removed
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1455 continue
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1456 ds.normallookup(f)
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1457
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1458 for f in s.added:
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1459 if ds[f] == 'r':
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1460 # added + removed -> unknown
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1461 ds.drop(f)
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1462 elif ds[f] != 'a':
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1463 ds.add(f)
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1464
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1465 for f in s.removed:
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1466 if ds[f] == 'a':
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1467 # removed + added -> normal
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1468 ds.normallookup(f)
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1469 elif ds[f] != 'r':
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1470 ds.remove(f)
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1471
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1472 # Merge old parent and old working dir copies
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1473 oldcopies = copiesmod.pathcopies(newctx, oldctx, match)
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1474 oldcopies.update(copies)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1475 copies = dict(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1476 (dst, oldcopies.get(src, src)) for dst, src in oldcopies.iteritems()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1477 )
41942
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1478 # Adjust the dirstate copies
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1479 for dst, src in copies.iteritems():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1480 if src not in newctx or dst in newctx or ds[dst] != 'a':
41942
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1481 src = None
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1482 ds.copy(src, dst)
232d4b9d391a uncommit: move _movedirstate() to scmutil for reuse
Martin von Zweigbergk <martinvonz@google.com>
parents: 41804
diff changeset
1483
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1484
24934
5abd0a76bc8f requires: move requires file writing func from localrepo to scmutil
Drew Gottlieb <drgott@google.com>
parents: 24755
diff changeset
1485 def writerequires(opener, requirements):
40679
acd17caa699a requires: use atomictemp=True when writing .hg/requires
Martin von Zweigbergk <martinvonz@google.com>
parents: 40493
diff changeset
1486 with opener('requires', 'w', atomictemp=True) as fp:
27706
22e362da27cf scmutil: use context managers for file handles
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27651
diff changeset
1487 for r in sorted(requirements):
22e362da27cf scmutil: use context managers for file handles
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27651
diff changeset
1488 fp.write("%s\n" % r)
24934
5abd0a76bc8f requires: move requires file writing func from localrepo to scmutil
Drew Gottlieb <drgott@google.com>
parents: 24755
diff changeset
1489
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1490
20043
88bd8df008f2 scmutil: rename filecacheentry to filecachesubentry
Siddharth Agarwal <sid0@fb.com>
parents: 20042
diff changeset
1491 class filecachesubentry(object):
20042
9a72d3886888 scmutil.filecacheentry: make stat argument to constructor mandatory
Siddharth Agarwal <sid0@fb.com>
parents: 20033
diff changeset
1492 def __init__(self, path, stat):
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1493 self.path = path
18315
216230643ae2 filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents: 18213
diff changeset
1494 self.cachestat = None
216230643ae2 filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents: 18213
diff changeset
1495 self._cacheable = None
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1496
18315
216230643ae2 filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents: 18213
diff changeset
1497 if stat:
20043
88bd8df008f2 scmutil: rename filecacheentry to filecachesubentry
Siddharth Agarwal <sid0@fb.com>
parents: 20042
diff changeset
1498 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
1499
216230643ae2 filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents: 18213
diff changeset
1500 if self.cachestat:
216230643ae2 filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents: 18213
diff changeset
1501 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
1502 else:
216230643ae2 filecache: allow filecacheentry to be created without stating in __init__
Idan Kamara <idankk86@gmail.com>
parents: 18213
diff changeset
1503 # 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
1504 self._cacheable = None
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1505
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1506 def refresh(self):
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1507 if self.cacheable():
20043
88bd8df008f2 scmutil: rename filecacheentry to filecachesubentry
Siddharth Agarwal <sid0@fb.com>
parents: 20042
diff changeset
1508 self.cachestat = filecachesubentry.stat(self.path)
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1509
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1510 def cacheable(self):
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1511 if self._cacheable is not None:
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1512 return self._cacheable
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1513
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1514 # we don't know yet, assume it is for now
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1515 return True
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1516
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1517 def changed(self):
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1518 # no point in going further if we can't cache it
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1519 if not self.cacheable():
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1520 return True
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1521
20043
88bd8df008f2 scmutil: rename filecacheentry to filecachesubentry
Siddharth Agarwal <sid0@fb.com>
parents: 20042
diff changeset
1522 newstat = filecachesubentry.stat(self.path)
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1523
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1524 # 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
1525 if newstat and self._cacheable is None:
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1526 self._cacheable = newstat.cacheable()
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1527
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1528 # check again
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1529 if not self._cacheable:
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1530 return True
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1531
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1532 if self.cachestat != newstat:
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1533 self.cachestat = newstat
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1534 return True
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1535 else:
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1536 return False
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1537
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1538 @staticmethod
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1539 def stat(path):
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1540 try:
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1541 return util.cachestat(path)
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25658
diff changeset
1542 except OSError as e:
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1543 if e.errno != errno.ENOENT:
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1544 raise
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1545
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1546
20044
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1547 class filecacheentry(object):
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1548 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
1549 self._entries = []
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1550 for path in paths:
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1551 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
1552
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1553 def changed(self):
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1554 '''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
1555 for entry in self._entries:
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1556 if entry.changed():
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1557 return True
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1558 return False
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1559
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1560 def refresh(self):
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1561 for entry in self._entries:
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1562 entry.refresh()
d38de18d187a scmutil: introduce a filecacheentry that can watch multiple paths
Siddharth Agarwal <sid0@fb.com>
parents: 20043
diff changeset
1563
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1564
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1565 class filecache(object):
38676
3b072388ca78 scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38659
diff changeset
1566 """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
1567
38676
3b072388ca78 scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38659
diff changeset
1568 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
1569 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
1570 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
1571
40493
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40492
diff changeset
1572 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: 40492
diff changeset
1573 instance dictionary.
38676
3b072388ca78 scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38659
diff changeset
1574
40493
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40492
diff changeset
1575 On external property set/delete operations, the caller must update the
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40492
diff changeset
1576 corresponding _filecache entry appropriately. Use __class__.<attr>.set()
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40492
diff changeset
1577 instead of directly setting <attr>.
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1578
40493
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40492
diff changeset
1579 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: 40492
diff changeset
1580 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
1581
38676
3b072388ca78 scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38659
diff changeset
1582 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
1583 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
1584 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
1585 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
1586 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
1587 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
1588 remove the ``filecacheentry``.
3b072388ca78 scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38659
diff changeset
1589 """
3b072388ca78 scmutil: rewrite docstring for filecache
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38659
diff changeset
1590
20045
b3684fd2ff1a scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents: 20044
diff changeset
1591 def __init__(self, *paths):
b3684fd2ff1a scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents: 20044
diff changeset
1592 self.paths = paths
16198
fa8488565afd filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents: 16115
diff changeset
1593
fa8488565afd filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents: 16115
diff changeset
1594 def join(self, obj, fname):
20045
b3684fd2ff1a scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents: 20044
diff changeset
1595 """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
1596
fa8488565afd filecache: refactor path join logic to a function
Idan Kamara <idankk86@gmail.com>
parents: 16115
diff changeset
1597 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
1598 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
1599 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
1600 """
31294
1937671105bc filecache: make 'join' abstract
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31227
diff changeset
1601 raise NotImplementedError
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1602
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1603 def __call__(self, func):
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1604 self.func = func
37913
73a74f29eb87 scmutil: clean up bytes/string cache decorator mess on Python 3 again
Augie Fackler <augie@google.com>
parents: 37912
diff changeset
1605 self.sname = func.__name__
73a74f29eb87 scmutil: clean up bytes/string cache decorator mess on Python 3 again
Augie Fackler <augie@google.com>
parents: 37912
diff changeset
1606 self.name = pycompat.sysbytes(self.sname)
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1607 return self
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 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
1610 # 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
1611 if obj is None:
36fbd72c2f39 scmutil: allow access to filecache descriptor on class
Martijn Pieters <mjpieters@fb.com>
parents: 29367
diff changeset
1612 return self
40493
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40492
diff changeset
1613
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40492
diff changeset
1614 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
1615
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1616 entry = obj._filecache.get(self.name)
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1617
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1618 if entry:
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1619 if entry.changed():
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1620 entry.obj = self.func(obj)
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1621 else:
20045
b3684fd2ff1a scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents: 20044
diff changeset
1622 paths = [self.join(obj, path) for path in self.paths]
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1623
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1624 # 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
1625 # 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
1626 entry = filecacheentry(paths, True)
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1627 entry.obj = self.func(obj)
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1628
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1629 obj._filecache[self.name] = entry
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1630
37913
73a74f29eb87 scmutil: clean up bytes/string cache decorator mess on Python 3 again
Augie Fackler <augie@google.com>
parents: 37912
diff changeset
1631 obj.__dict__[self.sname] = entry.obj
14928
dca59d5be12d scmutil: introduce filecache
Idan Kamara <idankk86@gmail.com>
parents: 14861
diff changeset
1632 return entry.obj
16115
236bb604dc39 scmutil: update cached copy when filecached attribute is assigned (issue3263)
Idan Kamara <idankk86@gmail.com>
parents: 16068
diff changeset
1633
40493
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40492
diff changeset
1634 # 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: 40492
diff changeset
1635 # function call.
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40492
diff changeset
1636
7caf632e30c3 filecache: unimplement __set__() and __delete__() (API)
Yuya Nishihara <yuya@tcha.org>
parents: 40492
diff changeset
1637 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
1638 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
1639 # 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
1640 # implies X in _filecache
20045
b3684fd2ff1a scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents: 20044
diff changeset
1641 paths = [self.join(obj, path) for path in self.paths]
b3684fd2ff1a scmutil.filecache: support watching over multiple files
Siddharth Agarwal <sid0@fb.com>
parents: 20044
diff changeset
1642 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
1643 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
1644 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
1645 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
1646
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1647 ce.obj = value # update cached copy
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1648 obj.__dict__[self.sname] = value # update copy returned by obj.x
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1649
16115
236bb604dc39 scmutil: update cached copy when filecached attribute is assigned (issue3263)
Idan Kamara <idankk86@gmail.com>
parents: 16068
diff changeset
1650
34457
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1651 def extdatasource(repo, source):
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1652 """Gather a map of rev -> value dict from the specified source
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1653
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1654 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: 34368
diff changeset
1655 for parsing the output from a shell command.
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1656
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1657 The data is parsed as a series of newline-separated records where
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1658 each record is a revision specifier optionally followed by a space
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1659 and a freeform string value. If the revision is known locally, it
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1660 is converted to a rev, otherwise the record is skipped.
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1661
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1662 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: 34368
diff changeset
1663 the local encoding. This allows uniformity between local and
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1664 remote data sources.
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1665 """
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1666
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1667 spec = repo.ui.config("extdata", source)
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1668 if not spec:
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1669 raise error.Abort(_("unknown extdata source '%s'") % source)
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1670
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1671 data = {}
34462
c67db5dc131d extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents: 34461
diff changeset
1672 src = proc = None
34457
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1673 try:
34462
c67db5dc131d extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents: 34461
diff changeset
1674 if spec.startswith("shell:"):
c67db5dc131d extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents: 34461
diff changeset
1675 # 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: 34461
diff changeset
1676 cmd = spec[6:]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1677 proc = subprocess.Popen(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1678 procutil.tonativestr(cmd),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1679 shell=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1680 bufsize=-1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1681 close_fds=procutil.closefds,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1682 stdout=subprocess.PIPE,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1683 cwd=procutil.tonativestr(repo.root),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1684 )
34462
c67db5dc131d extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents: 34461
diff changeset
1685 src = proc.stdout
c67db5dc131d extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents: 34461
diff changeset
1686 else:
c67db5dc131d extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents: 34461
diff changeset
1687 # treat as a URL or file
c67db5dc131d extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents: 34461
diff changeset
1688 src = url.open(repo.ui, spec)
34461
910adadf08e8 extdata: just use iterator to read lines one by one
Yuya Nishihara <yuya@tcha.org>
parents: 34460
diff changeset
1689 for l in src:
34457
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1690 if " " in l:
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1691 k, v = l.strip().split(" ", 1)
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1692 else:
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1693 k, v = l.strip(), ""
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1694
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1695 k = encoding.tolocal(k)
34460
d5c5cc767b7e extdata: ignore ambiguous identifier as well
Yuya Nishihara <yuya@tcha.org>
parents: 34457
diff changeset
1696 try:
37360
d0d55980ffa7 extdatasource: use revsymbol() for converting to node
Martin von Zweigbergk <martinvonz@google.com>
parents: 37350
diff changeset
1697 data[revsingle(repo, k).rev()] = encoding.tolocal(v)
34460
d5c5cc767b7e extdata: ignore ambiguous identifier as well
Yuya Nishihara <yuya@tcha.org>
parents: 34457
diff changeset
1698 except (error.LookupError, error.RepoLookupError):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1699 pass # we ignore data for nodes that don't exist locally
34457
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1700 finally:
34462
c67db5dc131d extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents: 34461
diff changeset
1701 if proc:
42576
ea6558db1011 extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents: 42518
diff changeset
1702 try:
ea6558db1011 extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents: 42518
diff changeset
1703 proc.communicate()
ea6558db1011 extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents: 42518
diff changeset
1704 except ValueError:
ea6558db1011 extdata: avoid crashing inside subprocess when we get a revset parse error
Augie Fackler <augie@google.com>
parents: 42518
diff changeset
1705 # 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: 42518
diff changeset
1706 # 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: 42518
diff changeset
1707 pass
34462
c67db5dc131d extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents: 34461
diff changeset
1708 if src:
c67db5dc131d extdata: use subprocess so we don't have to chdir() manually
Yuya Nishihara <yuya@tcha.org>
parents: 34461
diff changeset
1709 src.close()
35419
b1959391a088 extdata: abort if external command exits with non-zero status (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 35317
diff changeset
1710 if proc and proc.returncode != 0:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1711 raise error.Abort(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1712 _("extdata command '%s' failed: %s")
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1713 % (cmd, procutil.explainexit(proc.returncode))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1714 )
34457
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1715
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1716 return data
7757cc48b766 extdata: add extdatasource reader
Matt Mackall <mpm@selenic.com>
parents: 34368
diff changeset
1717
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1718
26490
f0d730efb02f scmutil: add a way for a subprocess to be run with an inheritable lock
Siddharth Agarwal <sid0@fb.com>
parents: 26433
diff changeset
1719 def _locksub(repo, lock, envvar, cmd, environ=None, *args, **kwargs):
f0d730efb02f scmutil: add a way for a subprocess to be run with an inheritable lock
Siddharth Agarwal <sid0@fb.com>
parents: 26433
diff changeset
1720 if lock is None:
f0d730efb02f scmutil: add a way for a subprocess to be run with an inheritable lock
Siddharth Agarwal <sid0@fb.com>
parents: 26433
diff changeset
1721 raise error.LockInheritanceContractViolation(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1722 'lock can only be inherited while held'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1723 )
26490
f0d730efb02f scmutil: add a way for a subprocess to be run with an inheritable lock
Siddharth Agarwal <sid0@fb.com>
parents: 26433
diff changeset
1724 if environ is None:
f0d730efb02f scmutil: add a way for a subprocess to be run with an inheritable lock
Siddharth Agarwal <sid0@fb.com>
parents: 26433
diff changeset
1725 environ = {}
f0d730efb02f scmutil: add a way for a subprocess to be run with an inheritable lock
Siddharth Agarwal <sid0@fb.com>
parents: 26433
diff changeset
1726 with lock.inherit() as locker:
f0d730efb02f scmutil: add a way for a subprocess to be run with an inheritable lock
Siddharth Agarwal <sid0@fb.com>
parents: 26433
diff changeset
1727 environ[envvar] = locker
f0d730efb02f scmutil: add a way for a subprocess to be run with an inheritable lock
Siddharth Agarwal <sid0@fb.com>
parents: 26433
diff changeset
1728 return repo.ui.system(cmd, environ=environ, *args, **kwargs)
26491
366d489295ca scmutil: add a way for a repo's wlock to be inherited by a subprocess
Siddharth Agarwal <sid0@fb.com>
parents: 26490
diff changeset
1729
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1730
26491
366d489295ca scmutil: add a way for a repo's wlock to be inherited by a subprocess
Siddharth Agarwal <sid0@fb.com>
parents: 26490
diff changeset
1731 def wlocksub(repo, cmd, *args, **kwargs):
366d489295ca scmutil: add a way for a repo's wlock to be inherited by a subprocess
Siddharth Agarwal <sid0@fb.com>
parents: 26490
diff changeset
1732 """run cmd as a subprocess that allows inheriting repo's wlock
366d489295ca scmutil: add a way for a repo's wlock to be inherited by a subprocess
Siddharth Agarwal <sid0@fb.com>
parents: 26490
diff changeset
1733
366d489295ca scmutil: add a way for a repo's wlock to be inherited by a subprocess
Siddharth Agarwal <sid0@fb.com>
parents: 26490
diff changeset
1734 This can only be called while the wlock is held. This takes all the
366d489295ca scmutil: add a way for a repo's wlock to be inherited by a subprocess
Siddharth Agarwal <sid0@fb.com>
parents: 26490
diff changeset
1735 arguments that ui.system does, and returns the exit code of the
366d489295ca scmutil: add a way for a repo's wlock to be inherited by a subprocess
Siddharth Agarwal <sid0@fb.com>
parents: 26490
diff changeset
1736 subprocess."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1737 return _locksub(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1738 repo, repo.currentwlock(), 'HG_WLOCK_LOCKER', cmd, *args, **kwargs
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1739 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1740
26906
e40af07e518e scmutil: extract general delta config handling in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26836
diff changeset
1741
38351
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1742 class progress(object):
41210
929999d963b8 progress: specify updatebar() function by constructor argument
Yuya Nishihara <yuya@tcha.org>
parents: 41209
diff changeset
1743 def __init__(self, ui, updatebar, topic, unit="", total=None):
38351
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1744 self.ui = ui
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1745 self.pos = 0
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1746 self.topic = topic
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1747 self.unit = unit
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1748 self.total = total
41144
7b80406b8271 progress: move cached debug flag from progress.progbar to scmutil.progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 41143
diff changeset
1749 self.debug = ui.configbool('progress', 'debug')
41146
963462786f6e progress: check what type of progress bar to use only once per topic
Martin von Zweigbergk <martinvonz@google.com>
parents: 41145
diff changeset
1750 self._updatebar = updatebar
38351
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1751
38380
800f5a2c869e progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents: 38379
diff changeset
1752 def __enter__(self):
38507
077301ac69dc scmutil: fix __enter__ in progress context manager
Danny Hooper <hooper@google.com>
parents: 38460
diff changeset
1753 return self
38380
800f5a2c869e progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents: 38379
diff changeset
1754
800f5a2c869e progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents: 38379
diff changeset
1755 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: 38379
diff changeset
1756 self.complete()
800f5a2c869e progress: make the progress helper a context manager
Martin von Zweigbergk <martinvonz@google.com>
parents: 38379
diff changeset
1757
38351
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1758 def update(self, pos, item="", total=None):
38425
6dea017eb6ba progress: enforce use of complete() on the helper class
Martin von Zweigbergk <martinvonz@google.com>
parents: 38380
diff changeset
1759 assert pos is not None
38351
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1760 if total:
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1761 self.total = total
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1762 self.pos = pos
41209
b223fc1c6b4c progress: change _updatebar() to take parameters as arguments
Yuya Nishihara <yuya@tcha.org>
parents: 41146
diff changeset
1763 self._updatebar(self.topic, self.pos, item, self.unit, self.total)
41145
3025fd3c2e71 progress: split up _print() method in bar-updating and debug-printing
Martin von Zweigbergk <martinvonz@google.com>
parents: 41144
diff changeset
1764 if self.debug:
3025fd3c2e71 progress: split up _print() method in bar-updating and debug-printing
Martin von Zweigbergk <martinvonz@google.com>
parents: 41144
diff changeset
1765 self._printdebug(item)
38351
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1766
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1767 def increment(self, step=1, item="", total=None):
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1768 self.update(self.pos + step, item, total)
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1769
38379
ef692614e601 progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents: 38351
diff changeset
1770 def complete(self):
41143
8cf92ca92bfe progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40902
diff changeset
1771 self.pos = None
8cf92ca92bfe progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40902
diff changeset
1772 self.unit = ""
8cf92ca92bfe progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40902
diff changeset
1773 self.total = None
41209
b223fc1c6b4c progress: change _updatebar() to take parameters as arguments
Yuya Nishihara <yuya@tcha.org>
parents: 41146
diff changeset
1774 self._updatebar(self.topic, self.pos, "", self.unit, self.total)
38379
ef692614e601 progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents: 38351
diff changeset
1775
41145
3025fd3c2e71 progress: split up _print() method in bar-updating and debug-printing
Martin von Zweigbergk <martinvonz@google.com>
parents: 41144
diff changeset
1776 def _printdebug(self, item):
41143
8cf92ca92bfe progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40902
diff changeset
1777 if self.unit:
8cf92ca92bfe progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40902
diff changeset
1778 unit = ' ' + self.unit
8cf92ca92bfe progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40902
diff changeset
1779 if item:
8cf92ca92bfe progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40902
diff changeset
1780 item = ' ' + item
8cf92ca92bfe progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40902
diff changeset
1781
8cf92ca92bfe progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40902
diff changeset
1782 if self.total:
8cf92ca92bfe progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40902
diff changeset
1783 pct = 100.0 * self.pos / self.total
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1784 self.ui.debug(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1785 '%s:%s %d/%d%s (%4.2f%%)\n'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1786 % (self.topic, item, self.pos, self.total, unit, pct)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1787 )
41143
8cf92ca92bfe progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40902
diff changeset
1788 else:
8cf92ca92bfe progress: write ui.progress() in terms of ui.makeprogress()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40902
diff changeset
1789 self.ui.debug('%s:%s %d%s\n' % (self.topic, item, self.pos, unit))
38351
bec1212eceaa progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents: 38340
diff changeset
1790
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1791
26906
e40af07e518e scmutil: extract general delta config handling in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26836
diff changeset
1792 def gdinitconfig(ui):
e40af07e518e scmutil: extract general delta config handling in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26836
diff changeset
1793 """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
1794 """
dfab6edb98e3 format: introduce 'format.usegeneraldelta`
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26906
diff changeset
1795 # experimental config: format.generaldelta
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1796 return ui.configbool('format', 'generaldelta') or ui.configbool(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1797 'format', 'usegeneraldelta'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1798 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1799
26906
e40af07e518e scmutil: extract general delta config handling in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26836
diff changeset
1800
26907
dfab6edb98e3 format: introduce 'format.usegeneraldelta`
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26906
diff changeset
1801 def gddeltaconfig(ui):
dfab6edb98e3 format: introduce 'format.usegeneraldelta`
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26906
diff changeset
1802 """helper function to know if incoming delta should be optimised
dfab6edb98e3 format: introduce 'format.usegeneraldelta`
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26906
diff changeset
1803 """
26906
e40af07e518e scmutil: extract general delta config handling in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26836
diff changeset
1804 # experimental config: format.generaldelta
33238
784f2bd96d43 configitems: register the 'format.generaldelta' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33100
diff changeset
1805 return ui.configbool('format', 'generaldelta')
31559
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1806
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1807
31559
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1808 class simplekeyvaluefile(object):
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1809 """A simple file with key=value lines
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1810
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1811 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: 31428
diff changeset
1812 contain '\n' characters"""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1813
32310
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1814 firstlinekey = '__firstline'
31559
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1815
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1816 def __init__(self, vfs, path, keys=None):
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1817 self.vfs = vfs
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1818 self.path = path
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1819
32310
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1820 def read(self, firstlinenonkeyval=False):
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1821 """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: 32309
diff changeset
1822
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1823 '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: 32309
diff changeset
1824 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: 32309
diff changeset
1825 __firstline key."""
31559
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1826 lines = self.vfs.readlines(self.path)
32310
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1827 d = {}
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1828 if firstlinenonkeyval:
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1829 if not lines:
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1830 e = _("empty simplekeyvalue file")
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1831 raise error.CorruptedState(e)
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1832 # 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: 32309
diff changeset
1833 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: 32309
diff changeset
1834 del lines[0]
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1835
31559
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1836 try:
32309
ed2c44741190 scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents: 32221
diff changeset
1837 # the 'if line.strip()' part prevents us from failing on empty
ed2c44741190 scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents: 32221
diff changeset
1838 # lines which only contain '\n' therefore are not skipped
ed2c44741190 scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents: 32221
diff changeset
1839 # by 'if line'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1840 updatedict = dict(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1841 line[:-1].split('=', 1) for line in lines if line.strip()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1842 )
32310
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1843 if self.firstlinekey in updatedict:
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1844 e = _("%r can't be used as a key")
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1845 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: 32309
diff changeset
1846 d.update(updatedict)
31559
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1847 except ValueError as e:
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1848 raise error.CorruptedState(str(e))
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1849 return d
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1850
32310
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1851 def write(self, data, firstline=None):
31559
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1852 """Write key=>value mapping to a file
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1853 data is a dict. Keys must be alphanumerical and start with a letter.
32310
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1854 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: 32309
diff changeset
1855
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1856 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: 32309
diff changeset
1857 everything else, as it is, not in a key=value form"""
31559
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1858 lines = []
32310
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1859 if firstline is not None:
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1860 lines.append('%s\n' % firstline)
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1861
31559
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1862 for k, v in data.items():
32310
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1863 if k == self.firstlinekey:
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1864 e = "key name '%s' is reserved" % self.firstlinekey
218ca8526ec0 scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents: 32309
diff changeset
1865 raise error.ProgrammingError(e)
35953
558e01a23f40 py3: slice on bytes to prevent getting the ascii values
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35928
diff changeset
1866 if not k[0:1].isalpha():
31559
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1867 e = "keys must start with a letter in a key-value file"
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1868 raise error.ProgrammingError(e)
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1869 if not k.isalnum():
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1870 e = "invalid key name in a simple key-value file"
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1871 raise error.ProgrammingError(e)
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1872 if '\n' in v:
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1873 e = "invalid value in a simple key-value file"
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1874 raise error.ProgrammingError(e)
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1875 lines.append("%s=%s\n" % (k, v))
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1876 with self.vfs(self.path, mode='wb', atomictemp=True) as fp:
56acc4250900 scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents: 31428
diff changeset
1877 fp.write(''.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
1878
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1879
33541
b47fef6d2365 transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents: 33511
diff changeset
1880 _reportobsoletedsource = [
33542
b11e8c67fb0f debugobsolete: also report the number of obsoleted changesets
Boris Feld <boris.feld@octobus.net>
parents: 33541
diff changeset
1881 'debugobsolete',
33541
b47fef6d2365 transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents: 33511
diff changeset
1882 'pull',
b47fef6d2365 transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents: 33511
diff changeset
1883 'push',
b47fef6d2365 transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents: 33511
diff changeset
1884 'serve',
b47fef6d2365 transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents: 33511
diff changeset
1885 'unbundle',
b47fef6d2365 transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents: 33511
diff changeset
1886 ]
b47fef6d2365 transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents: 33511
diff changeset
1887
34661
eb586ed5d8ce transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34645
diff changeset
1888 _reportnewcssource = [
eb586ed5d8ce transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34645
diff changeset
1889 'pull',
eb586ed5d8ce transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34645
diff changeset
1890 'unbundle',
eb586ed5d8ce transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34645
diff changeset
1891 ]
eb586ed5d8ce transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34645
diff changeset
1892
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1893
37762
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1894 def prefetchfiles(repo, revs, match):
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1895 """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
1896 ensure the corresponding files are available locally, before the command
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1897 uses them."""
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1898 if match:
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1899 # The command itself will complain about files that don't exist, so
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1900 # don't duplicate the message.
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1901 match = matchmod.badmatch(match, lambda fn, msg: None)
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1902 else:
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1903 match = matchall(repo)
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1904
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1905 fileprefetchhooks(repo, revs, match)
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1906
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1907
37762
7269b87f817c scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents: 37709
diff changeset
1908 # a list of (repo, revs, match) prefetch functions
36175
f52a9336ac5f cmdutil: convert the prefetchfiles() hook to a callback mechanism (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 35953
diff changeset
1909 fileprefetchhooks = util.hooks()
f52a9336ac5f cmdutil: convert the prefetchfiles() hook to a callback mechanism (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 35953
diff changeset
1910
35709
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1911 # 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: 35503
diff changeset
1912 _reportstroubledchangesets = True
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1913
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1914
33541
b47fef6d2365 transaction-summary: display the summary for all transactions
Boris Feld <boris.feld@octobus.net>
parents: 33511
diff changeset
1915 def registersummarycallback(repo, otr, txnname=''):
33252
53b3a1968aa6 obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33246
diff changeset
1916 """register a callback to issue a summary after the transaction is closed
53b3a1968aa6 obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 33246
diff changeset
1917 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1918
34619
18309380fb88 scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34543
diff changeset
1919 def txmatch(sources):
18309380fb88 scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34543
diff changeset
1920 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
1921
34620
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1922 categories = []
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1923
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1924 def reportsummary(func):
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1925 """decorator for report callbacks."""
34987
96dcc78468e3 tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents: 34972
diff changeset
1926 # 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: 34972
diff changeset
1927 # 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: 34972
diff changeset
1928 # 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: 34972
diff changeset
1929 # 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: 34972
diff changeset
1930 # repository through the weakref.
96dcc78468e3 tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents: 34972
diff changeset
1931 filtername = repo.filtername
96dcc78468e3 tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents: 34972
diff changeset
1932 reporef = weakref.ref(repo.unfiltered())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1933
34620
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1934 def wrapped(tr):
34619
18309380fb88 scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34543
diff changeset
1935 repo = reporef()
34987
96dcc78468e3 tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents: 34972
diff changeset
1936 if filtername:
96dcc78468e3 tr-summary: keep a weakref to the unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents: 34972
diff changeset
1937 repo = repo.filtered(filtername)
34620
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1938 func(repo, tr)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1939
35748
963a611b2f39 scmutil: 0-pad transaction report callback category
Martin von Zweigbergk <martinvonz@google.com>
parents: 35710
diff changeset
1940 newcat = '%02i-txnreport' % len(categories)
34620
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1941 otr.addpostclose(newcat, wrapped)
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1942 categories.append(newcat)
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1943 return wrapped
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1944
42903
d7304434390f changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42900
diff changeset
1945 @reportsummary
d7304434390f changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42900
diff changeset
1946 def reportchangegroup(repo, tr):
d7304434390f changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42900
diff changeset
1947 cgchangesets = tr.changes.get('changegroup-count-changesets', 0)
d7304434390f changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42900
diff changeset
1948 cgrevisions = tr.changes.get('changegroup-count-revisions', 0)
d7304434390f changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42900
diff changeset
1949 cgfiles = tr.changes.get('changegroup-count-files', 0)
d7304434390f changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42900
diff changeset
1950 cgheads = tr.changes.get('changegroup-count-heads', 0)
d7304434390f changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42900
diff changeset
1951 if cgchangesets or cgrevisions or cgfiles:
d7304434390f changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42900
diff changeset
1952 htext = ""
d7304434390f changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42900
diff changeset
1953 if cgheads:
d7304434390f changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42900
diff changeset
1954 htext = _(" (%+d heads)") % cgheads
d7304434390f changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42900
diff changeset
1955 msg = _("added %d changesets with %d changes to %d files%s\n")
d7304434390f changegroup: move message about added changes to transaction summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42900
diff changeset
1956 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: 42900
diff changeset
1957
34620
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1958 if txmatch(_reportobsoletedsource):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1959
34620
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1960 @reportsummary
b799f11644d8 scmutil: factor out building of transaction summary callback
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34619
diff changeset
1961 def reportobsoleted(repo, tr):
34619
18309380fb88 scmutil: factor out transaction name lookup in registersummarycallback()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34543
diff changeset
1962 obsoleted = obsutil.getobsoleted(repo, tr)
42900
38392d5bde8e transaction: issue "new obsmarkers" message at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42731
diff changeset
1963 newmarkers = len(tr.changes.get('obsmarkers', ()))
38392d5bde8e transaction: issue "new obsmarkers" message at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42731
diff changeset
1964 if newmarkers:
38392d5bde8e transaction: issue "new obsmarkers" message at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42731
diff changeset
1965 repo.ui.status(_('%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
1966 if obsoleted:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1967 repo.ui.status(_('obsoleted %i changesets\n') % 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
1968
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1969 if obsolete.isenabled(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1970 repo, obsolete.createmarkersopt
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1971 ) and repo.ui.configbool('experimental', 'evolution.report-instabilities'):
35709
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1972 instabilitytypes = [
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1973 ('orphan', 'orphan'),
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1974 ('phase-divergent', 'phasedivergent'),
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1975 ('content-divergent', 'contentdivergent'),
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1976 ]
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1977
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1978 def getinstabilitycounts(repo):
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1979 filtered = repo.changelog.filteredrevs
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1980 counts = {}
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1981 for instability, revset in instabilitytypes:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1982 counts[instability] = len(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1983 set(obsolete.getrevs(repo, revset)) - filtered
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1984 )
35709
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1985 return counts
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1986
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1987 oldinstabilitycounts = getinstabilitycounts(repo)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1988
35709
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1989 @reportsummary
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1990 def reportnewinstabilities(repo, tr):
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1991 newinstabilitycounts = getinstabilitycounts(repo)
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
1992 for instability, revset in instabilitytypes:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1993 delta = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1994 newinstabilitycounts[instability]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1995 - oldinstabilitycounts[instability]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1996 )
38460
1cac2e8c7624 scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38437
diff changeset
1997 msg = getinstabilitymessage(delta, instability)
1cac2e8c7624 scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38437
diff changeset
1998 if msg:
1cac2e8c7624 scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38437
diff changeset
1999 repo.ui.warn(msg)
35709
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35503
diff changeset
2000
34661
eb586ed5d8ce transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34645
diff changeset
2001 if txmatch(_reportnewcssource):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2002
34661
eb586ed5d8ce transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34645
diff changeset
2003 @reportsummary
eb586ed5d8ce transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34645
diff changeset
2004 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
2005 """Report the range of new revisions pulled/unbundled."""
39328
5763216ba311 transaction: remember original len(repo) instead of tracking added revs (API)
Yuya Nishihara <yuya@tcha.org>
parents: 39292
diff changeset
2006 origrepolen = tr.changes.get('origrepolen', len(repo))
39903
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2007 unfi = repo.unfiltered()
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2008 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
2009 return
eb586ed5d8ce transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 34645
diff changeset
2010
39902
a477679f6323 pullreport: skip filtered revs instead of obsolete ones
Boris Feld <boris.feld@octobus.net>
parents: 39899
diff changeset
2011 # Compute the bounds of new visible revisions' range.
a477679f6323 pullreport: skip filtered revs instead of obsolete ones
Boris Feld <boris.feld@octobus.net>
parents: 39899
diff changeset
2012 revs = smartset.spanset(repo, start=origrepolen)
39903
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2013 if revs:
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2014 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
2015
39903
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2016 if minrev == maxrev:
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2017 revrange = minrev
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2018 else:
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2019 revrange = '%s:%s' % (minrev, maxrev)
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2020 draft = len(repo.revs('%ld and draft()', revs))
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2021 secret = len(repo.revs('%ld and secret()', revs))
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2022 if not (draft or secret):
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2023 msg = _('new changesets %s\n') % revrange
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2024 elif draft and secret:
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2025 msg = _('new changesets %s (%d drafts, %d secrets)\n')
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2026 msg %= (revrange, draft, secret)
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2027 elif draft:
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2028 msg = _('new changesets %s (%d drafts)\n')
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2029 msg %= (revrange, draft)
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2030 elif secret:
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2031 msg = _('new changesets %s (%d secrets)\n')
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2032 msg %= (revrange, secret)
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2033 else:
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2034 errormsg = 'entered unreachable condition'
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2035 raise error.ProgrammingError(errormsg)
b5e12039e6e0 pullreport: skip or rework some early return
Boris Feld <boris.feld@octobus.net>
parents: 39902
diff changeset
2036 repo.ui.status(msg)
35188
9700cb9df140 convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents: 34987
diff changeset
2037
39904
f9232b0310ef pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents: 39903
diff changeset
2038 # search new changesets directly pulled as obsolete
39905
a89dd6d01df0 pullreport: rev duplicated and extinct into account
Boris Feld <boris.feld@octobus.net>
parents: 39904
diff changeset
2039 duplicates = tr.changes.get('revduplicates', ())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2040 obsadded = unfi.revs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2041 '(%d: + %ld) and obsolete()', origrepolen, duplicates
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2042 )
39904
f9232b0310ef pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents: 39903
diff changeset
2043 cl = repo.changelog
f9232b0310ef pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents: 39903
diff changeset
2044 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: 39903
diff changeset
2045 if extinctadded:
f9232b0310ef pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents: 39903
diff changeset
2046 # 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: 39903
diff changeset
2047 # 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: 39903
diff changeset
2048 # exposed to users.
f9232b0310ef pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents: 39903
diff changeset
2049 msg = '(%d other changesets obsolete on arrival)\n'
f9232b0310ef pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents: 39903
diff changeset
2050 repo.ui.status(msg % len(extinctadded))
f9232b0310ef pullreport: issue a message about "extinct" pulled changesets
Boris Feld <boris.feld@octobus.net>
parents: 39903
diff changeset
2051
38204
eb9835014d20 transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 38164
diff changeset
2052 @reportsummary
eb9835014d20 transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 38164
diff changeset
2053 def reportphasechanges(repo, tr):
eb9835014d20 transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 38164
diff changeset
2054 """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: 38164
diff changeset
2055 pull/unbundle.
eb9835014d20 transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 38164
diff changeset
2056 """
39328
5763216ba311 transaction: remember original len(repo) instead of tracking added revs (API)
Yuya Nishihara <yuya@tcha.org>
parents: 39292
diff changeset
2057 origrepolen = tr.changes.get('origrepolen', len(repo))
38204
eb9835014d20 transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 38164
diff changeset
2058 phasetracking = tr.changes.get('phases', {})
eb9835014d20 transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 38164
diff changeset
2059 if not phasetracking:
eb9835014d20 transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 38164
diff changeset
2060 return
eb9835014d20 transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 38164
diff changeset
2061 published = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2062 rev
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2063 for rev, (old, new) in phasetracking.iteritems()
39328
5763216ba311 transaction: remember original len(repo) instead of tracking added revs (API)
Yuya Nishihara <yuya@tcha.org>
parents: 39292
diff changeset
2064 if new == phases.public and rev < origrepolen
38204
eb9835014d20 transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 38164
diff changeset
2065 ]
eb9835014d20 transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 38164
diff changeset
2066 if not published:
eb9835014d20 transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 38164
diff changeset
2067 return
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2068 repo.ui.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2069 _('%d local changesets published\n') % len(published)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2070 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2071
38204
eb9835014d20 transaction-summary: show phase changes statistics in pull/unbundle
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 38164
diff changeset
2072
38460
1cac2e8c7624 scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38437
diff changeset
2073 def getinstabilitymessage(delta, instability):
1cac2e8c7624 scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38437
diff changeset
2074 """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: 38437
diff changeset
2075
1cac2e8c7624 scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38437
diff changeset
2076 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: 38437
diff changeset
2077 information like how to fix instabilities"""
1cac2e8c7624 scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38437
diff changeset
2078 if delta > 0:
1cac2e8c7624 scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38437
diff changeset
2079 return _('%i new %s changesets\n') % (delta, instability)
1cac2e8c7624 scmutil: move construction of instability count message to separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents: 38437
diff changeset
2080
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2081
35195
bc775b8cc020 scmutil: extra utility to display a reasonable amount of nodes
Boris Feld <boris.feld@octobus.net>
parents: 35188
diff changeset
2082 def nodesummaries(repo, nodes, maxnumnodes=4):
bc775b8cc020 scmutil: extra utility to display a reasonable amount of nodes
Boris Feld <boris.feld@octobus.net>
parents: 35188
diff changeset
2083 if len(nodes) <= maxnumnodes or repo.ui.verbose:
bc775b8cc020 scmutil: extra utility to display a reasonable amount of nodes
Boris Feld <boris.feld@octobus.net>
parents: 35188
diff changeset
2084 return ' '.join(short(h) for h in nodes)
bc775b8cc020 scmutil: extra utility to display a reasonable amount of nodes
Boris Feld <boris.feld@octobus.net>
parents: 35188
diff changeset
2085 first = ' '.join(short(h) for h in nodes[:maxnumnodes])
35216
278f1feee73a scmutil: improve format pattern used in nodesummaries
Boris Feld <boris.feld@octobus.net>
parents: 35196
diff changeset
2086 return _("%s and %d others") % (first, len(nodes) - maxnumnodes)
35195
bc775b8cc020 scmutil: extra utility to display a reasonable amount of nodes
Boris Feld <boris.feld@octobus.net>
parents: 35188
diff changeset
2087
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2088
42971
76608f9f27f6 singlehead: introduce special handling of closed heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42930
diff changeset
2089 def enforcesinglehead(repo, tr, desc, accountclosed=False):
35196
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2090 """check that no named branch has multiple heads"""
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2091 if desc in ('strip', 'repair'):
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2092 # skip the logic during strip
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2093 return
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2094 visible = repo.filtered('visible')
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2095 # possible improvement: we could restrict the check to affected branch
42971
76608f9f27f6 singlehead: introduce special handling of closed heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42930
diff changeset
2096 bm = visible.branchmap()
76608f9f27f6 singlehead: introduce special handling of closed heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42930
diff changeset
2097 for name in bm:
76608f9f27f6 singlehead: introduce special handling of closed heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42930
diff changeset
2098 heads = bm.branchheads(name, closed=accountclosed)
35196
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2099 if len(heads) > 1:
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2100 msg = _('rejecting multiple heads on branch "%s"')
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2101 msg %= name
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2102 hint = _('%d heads: %s')
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2103 hint %= (len(heads), nodesummaries(repo, heads))
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2104 raise error.Abort(msg, hint=hint)
66ecde8a704d server: introduce a 'experimental.single-head-per-branch' option
Boris Feld <boris.feld@octobus.net>
parents: 35195
diff changeset
2105
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2106
35188
9700cb9df140 convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents: 34987
diff changeset
2107 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: 34987
diff changeset
2108 """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: 34987
diff changeset
2109 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: 34987
diff changeset
2110 """
9700cb9df140 convert: allow the sink object to be wrapped when the extension isn't loaded
Matt Harbison <matt_harbison@yahoo.com>
parents: 34987
diff changeset
2111 return sink
35500
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2112
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2113
35500
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2114 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: 35419
diff changeset
2115 """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: 35419
diff changeset
2116 is passed.
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2117
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2118 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: 35419
diff changeset
2119 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: 35419
diff changeset
2120
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2121 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: 35419
diff changeset
2122 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2123 if not repo.filtername or not repo.ui.configbool(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2124 'experimental', 'directaccess'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2125 ):
35500
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2126 return repo
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2127
35503
b55a142f00c5 scmutil: use a tuple of possible values instead of using startswith()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35500
diff changeset
2128 if repo.filtername not in ('visible', 'visible-hidden'):
35500
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2129 return repo
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2130
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2131 symbols = set()
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2132 for spec in specs:
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2133 try:
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2134 tree = revsetlang.parse(spec)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2135 except error.ParseError: # will be reported by scmutil.revrange()
35500
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2136 continue
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2137
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2138 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: 35419
diff changeset
2139
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2140 if not symbols:
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2141 return repo
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2142
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2143 revs = _getrevsfromsymbols(repo, symbols)
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2144
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2145 if not revs:
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2146 return repo
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2147
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2148 if hiddentype == 'warn':
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2149 unfi = repo.unfiltered()
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2150 revstr = ", ".join([pycompat.bytestr(unfi[l]) for l in revs])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2151 repo.ui.warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2152 _(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2153 "warning: accessing hidden changesets for write "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2154 "operation: %s\n"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2155 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2156 % revstr
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2157 )
35500
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2158
35503
b55a142f00c5 scmutil: use a tuple of possible values instead of using startswith()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35500
diff changeset
2159 # 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: 35500
diff changeset
2160 # disbale these cache when revisions are dynamically pinned.
35500
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2161 return repo.filtered('visible-hidden', revs)
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2162
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2163
35500
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2164 def _getrevsfromsymbols(repo, symbols):
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2165 """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: 35419
diff changeset
2166 changesets present in symbols"""
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2167 revs = set()
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2168 unfi = repo.unfiltered()
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2169 unficl = unfi.changelog
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2170 cl = repo.changelog
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2171 tiprev = len(unficl)
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2172 allowrevnums = repo.ui.configbool('experimental', 'directaccess.revnums')
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2173 for s in symbols:
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2174 try:
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2175 n = int(s)
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2176 if n <= tiprev:
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2177 if not allowrevnums:
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2178 continue
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2179 else:
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2180 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: 35419
diff changeset
2181 revs.add(n)
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2182 continue
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2183 except ValueError:
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2184 pass
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2185
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2186 try:
37912
69de3c3de036 directaccess: use resolvehexnodeidprefix() instead of _partialmatch()
Martin von Zweigbergk <martinvonz@google.com>
parents: 37909
diff changeset
2187 s = resolvehexnodeidprefix(unfi, s)
37097
7f025c9b7865 directaccess: do not abort by 'ff...' hash
Yuya Nishihara <yuya@tcha.org>
parents: 37087
diff changeset
2188 except (error.LookupError, error.WdirUnsupported):
35500
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2189 s = None
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2190
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2191 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: 35419
diff changeset
2192 rev = unficl.rev(s)
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2193 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: 35419
diff changeset
2194 revs.add(rev)
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2195
8bb90cc4668e scmutil: add utility fn to return repo object with user passed revs unhidden
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35419
diff changeset
2196 return revs
38164
46c2b19a1263 scmutil: move repair.stripbmrevset as scmutil.bookmarkrevs (API)
David Demelier <markand@malikania.fr>
parents: 38023
diff changeset
2197
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2198
38164
46c2b19a1263 scmutil: move repair.stripbmrevset as scmutil.bookmarkrevs (API)
David Demelier <markand@malikania.fr>
parents: 38023
diff changeset
2199 def bookmarkrevs(repo, mark):
46c2b19a1263 scmutil: move repair.stripbmrevset as scmutil.bookmarkrevs (API)
David Demelier <markand@malikania.fr>
parents: 38023
diff changeset
2200 """
46c2b19a1263 scmutil: move repair.stripbmrevset as scmutil.bookmarkrevs (API)
David Demelier <markand@malikania.fr>
parents: 38023
diff changeset
2201 Select revisions reachable by a given bookmark
46c2b19a1263 scmutil: move repair.stripbmrevset as scmutil.bookmarkrevs (API)
David Demelier <markand@malikania.fr>
parents: 38023
diff changeset
2202 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2203 return repo.revs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2204 "ancestors(bookmark(%s)) - "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2205 "ancestors(head() and not bookmark(%s)) - "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2206 "ancestors(bookmark() and not bookmark(%s))",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2207 mark,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2208 mark,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2209 mark,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2210 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2211
42730
87c4cd89b539 changectx: extract explicit computechangesetfilesadded method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42576
diff changeset
2212
87c4cd89b539 changectx: extract explicit computechangesetfilesadded method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42576
diff changeset
2213 def computechangesetfilesadded(ctx):
87c4cd89b539 changectx: extract explicit computechangesetfilesadded method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42576
diff changeset
2214 """return the list of files added in a changeset
87c4cd89b539 changectx: extract explicit computechangesetfilesadded method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42576
diff changeset
2215 """
87c4cd89b539 changectx: extract explicit computechangesetfilesadded method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42576
diff changeset
2216 added = []
87c4cd89b539 changectx: extract explicit computechangesetfilesadded method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42576
diff changeset
2217 for f in ctx.files():
87c4cd89b539 changectx: extract explicit computechangesetfilesadded method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42576
diff changeset
2218 if not any(f in p for p in ctx.parents()):
87c4cd89b539 changectx: extract explicit computechangesetfilesadded method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42576
diff changeset
2219 added.append(f)
87c4cd89b539 changectx: extract explicit computechangesetfilesadded method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42576
diff changeset
2220 return added
42731
53c07f08fea1 changectx: extract explicit computechangesetfilesremoved method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42730
diff changeset
2221
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
2222
42731
53c07f08fea1 changectx: extract explicit computechangesetfilesremoved method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42730
diff changeset
2223 def computechangesetfilesremoved(ctx):
53c07f08fea1 changectx: extract explicit computechangesetfilesremoved method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42730
diff changeset
2224 """return the list of files removed in a changeset
53c07f08fea1 changectx: extract explicit computechangesetfilesremoved method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42730
diff changeset
2225 """
53c07f08fea1 changectx: extract explicit computechangesetfilesremoved method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42730
diff changeset
2226 removed = []
53c07f08fea1 changectx: extract explicit computechangesetfilesremoved method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42730
diff changeset
2227 for f in ctx.files():
53c07f08fea1 changectx: extract explicit computechangesetfilesremoved method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42730
diff changeset
2228 if f not in ctx:
53c07f08fea1 changectx: extract explicit computechangesetfilesremoved method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42730
diff changeset
2229 removed.append(f)
53c07f08fea1 changectx: extract explicit computechangesetfilesremoved method from context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42730
diff changeset
2230 return removed