Mercurial > hg
annotate mercurial/sparse.py @ 48778:c4149a110b5f
sparse: add timing block for parsing sparse configs
This was showing up in an operation I was doing today, and I'd like to
be able to get trace spans for it instead of just profiler samples.
Differential Revision: https://phab.mercurial-scm.org/D12186
author | Augie Fackler <augie@google.com> |
---|---|
date | Tue, 15 Feb 2022 13:32:30 -0500 |
parents | a6efb9180764 |
children | 6000f5b25c9b |
rev | line source |
---|---|
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1 # sparse.py - functionality for sparse checkouts |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
2 # |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
3 # Copyright 2014 Facebook, Inc. |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
4 # |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
7 |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
8 from __future__ import absolute_import |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
9 |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
10 import os |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
11 |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
12 from .i18n import _ |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
45525
diff
changeset
|
13 from .node import hex |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
14 from . import ( |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
15 error, |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
16 match as matchmod, |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
17 merge as mergemod, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44060
diff
changeset
|
18 mergestate as mergestatemod, |
33685
e1c56486d1aa
sparse: treat paths as cwd-relative
Kostia Balytskyi <ikostia@fb.com>
parents:
33683
diff
changeset
|
19 pathutil, |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
20 pycompat, |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45355
diff
changeset
|
21 requirements, |
33556
22371eabb3b1
sparse: add a requirement when a repository uses sparse (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33555
diff
changeset
|
22 scmutil, |
33371
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
23 util, |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
24 ) |
44060
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
25 from .utils import hashutil |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
26 |
45355
a1f51c7dce0f
repository: introduce constant for sparse repo requirement and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45346
diff
changeset
|
27 |
33299
41448fc51510
sparse: variable to track if sparse is enabled
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33298
diff
changeset
|
28 # Whether sparse features are enabled. This variable is intended to be |
41448fc51510
sparse: variable to track if sparse is enabled
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33298
diff
changeset
|
29 # temporary to facilitate porting sparse to core. It should eventually be |
41448fc51510
sparse: variable to track if sparse is enabled
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33298
diff
changeset
|
30 # a per-repo option, possibly a repo requirement. |
41448fc51510
sparse: variable to track if sparse is enabled
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33298
diff
changeset
|
31 enabled = False |
41448fc51510
sparse: variable to track if sparse is enabled
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33298
diff
changeset
|
32 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
33 |
38838
8fe62ad9f4ff
sparse: add an action argument to parseconfig()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
37576
diff
changeset
|
34 def parseconfig(ui, raw, action): |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
35 """Parse sparse config file content. |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
36 |
38838
8fe62ad9f4ff
sparse: add an action argument to parseconfig()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
37576
diff
changeset
|
37 action is the command which is trigerring this read, can be narrow, sparse |
8fe62ad9f4ff
sparse: add an action argument to parseconfig()
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
37576
diff
changeset
|
38 |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
39 Returns a tuple of includes, excludes, and profiles. |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
40 """ |
48778
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
41 with util.timedcm( |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
42 'sparse.parseconfig(ui, %d bytes, action=%s)', len(raw), action |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
43 ): |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
44 includes = set() |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
45 excludes = set() |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
46 profiles = set() |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
47 current = None |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
48 havesection = False |
33551
1d1779734c99
sparse: require [section] in sparse config files (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33550
diff
changeset
|
49 |
48778
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
50 for line in raw.split(b'\n'): |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
51 line = line.strip() |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
52 if not line or line.startswith(b'#'): |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
53 # empty or comment line, skip |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
54 continue |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
55 elif line.startswith(b'%include '): |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
56 line = line[9:].strip() |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
57 if line: |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
58 profiles.add(line) |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
59 elif line == b'[include]': |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
60 if havesection and current != includes: |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
61 # TODO pass filename into this API so we can report it. |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
62 raise error.Abort( |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
63 _( |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
64 b'%(action)s config cannot have includes ' |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
65 b'after excludes' |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
66 ) |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
67 % {b'action': action} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
68 ) |
48778
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
69 havesection = True |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
70 current = includes |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
71 continue |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
72 elif line == b'[exclude]': |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
73 havesection = True |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
74 current = excludes |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
75 elif line: |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
76 if current is None: |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
77 raise error.Abort( |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
78 _( |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
79 b'%(action)s config entry outside of ' |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
80 b'section: %(line)s' |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
81 ) |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
82 % {b'action': action, b'line': line}, |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
83 hint=_( |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
84 b'add an [include] or [exclude] line ' |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
85 b'to declare the entry type' |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
86 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
87 ) |
33551
1d1779734c99
sparse: require [section] in sparse config files (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33550
diff
changeset
|
88 |
48778
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
89 if line.strip().startswith(b'/'): |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
90 ui.warn( |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
91 _( |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
92 b'warning: %(action)s profile cannot use' |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
93 b' paths starting with /, ignoring %(line)s\n' |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
94 ) |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
95 % {b'action': action, b'line': line} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
96 ) |
48778
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
97 continue |
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
98 current.add(line) |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
99 |
48778
c4149a110b5f
sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com>
parents:
48737
diff
changeset
|
100 return includes, excludes, profiles |
33298
f41a99c45956
sparse: move profile reading into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33297
diff
changeset
|
101 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
102 |
33298
f41a99c45956
sparse: move profile reading into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33297
diff
changeset
|
103 # Exists as separate function to facilitate monkeypatching. |
f41a99c45956
sparse: move profile reading into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33297
diff
changeset
|
104 def readprofile(repo, profile, changeid): |
f41a99c45956
sparse: move profile reading into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33297
diff
changeset
|
105 """Resolve the raw content of a sparse profile file.""" |
f41a99c45956
sparse: move profile reading into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33297
diff
changeset
|
106 # TODO add some kind of cache here because this incurs a manifest |
f41a99c45956
sparse: move profile reading into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33297
diff
changeset
|
107 # resolve and can be slow. |
f41a99c45956
sparse: move profile reading into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33297
diff
changeset
|
108 return repo.filectx(profile, changeid=changeid).data() |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
109 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
110 |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
111 def patternsforrev(repo, rev): |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
112 """Obtain sparse checkout patterns for the given rev. |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
113 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
114 Returns a tuple of iterables representing includes, excludes, and |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
115 patterns. |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
116 """ |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
117 # Feature isn't enabled. No-op. |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
118 if not enabled: |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
119 return set(), set(), set() |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
120 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
121 raw = repo.vfs.tryread(b'sparse') |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
122 if not raw: |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
123 return set(), set(), set() |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
124 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
125 if rev is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
126 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
127 _(b'cannot parse sparse patterns from working directory') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
128 ) |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
129 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
130 includes, excludes, profiles = parseconfig(repo.ui, raw, b'sparse') |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
131 ctx = repo[rev] |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
132 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
133 if profiles: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
134 visited = set() |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
135 while profiles: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
136 profile = profiles.pop() |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
137 if profile in visited: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
138 continue |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
139 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
140 visited.add(profile) |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
141 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
142 try: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
143 raw = readprofile(repo, profile, rev) |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
144 except error.ManifestLookupError: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
145 msg = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
146 b"warning: sparse profile '%s' not found " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
147 b"in rev %s - ignoring it\n" % (profile, ctx) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
148 ) |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
149 # experimental config: sparse.missingwarning |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
150 if repo.ui.configbool(b'sparse', b'missingwarning'): |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
151 repo.ui.warn(msg) |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
152 else: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
153 repo.ui.debug(msg) |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
154 continue |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
155 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
156 pincludes, pexcludes, subprofs = parseconfig( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
157 repo.ui, raw, b'sparse' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
158 ) |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
159 includes.update(pincludes) |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
160 excludes.update(pexcludes) |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
161 profiles.update(subprofs) |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
162 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
163 profiles = visited |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
164 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
165 if includes: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
166 includes.add(b'.hg*') |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
167 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
168 return includes, excludes, profiles |
33301
ca4b78eb11e7
sparse: move active profiles function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33300
diff
changeset
|
169 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
170 |
33370
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
171 def activeconfig(repo): |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
172 """Determine the active sparse config rules. |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
173 |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
174 Rules are constructed by reading the current sparse config and bringing in |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
175 referenced profiles from parents of the working directory. |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
176 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
177 revs = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
178 repo.changelog.rev(node) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
179 for node in repo.dirstate.parents() |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
45525
diff
changeset
|
180 if node != repo.nullid |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
181 ] |
33301
ca4b78eb11e7
sparse: move active profiles function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33300
diff
changeset
|
182 |
33370
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
183 allincludes = set() |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
184 allexcludes = set() |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
185 allprofiles = set() |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
186 |
33301
ca4b78eb11e7
sparse: move active profiles function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33300
diff
changeset
|
187 for rev in revs: |
33370
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
188 includes, excludes, profiles = patternsforrev(repo, rev) |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
189 allincludes |= includes |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
190 allexcludes |= excludes |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
191 allprofiles |= profiles |
33301
ca4b78eb11e7
sparse: move active profiles function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33300
diff
changeset
|
192 |
33370
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
193 return allincludes, allexcludes, allprofiles |
33302
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33301
diff
changeset
|
194 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
195 |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
196 def configsignature(repo, includetemp=True): |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
197 """Obtain the signature string for the current sparse configuration. |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
198 |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
199 This is used to construct a cache key for matchers. |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
200 """ |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
201 cache = repo._sparsesignaturecache |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
202 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
203 signature = cache.get(b'signature') |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
204 |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
205 if includetemp: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
206 tempsignature = cache.get(b'tempsignature') |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
207 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
208 tempsignature = b'0' |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
209 |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
210 if signature is None or (includetemp and tempsignature is None): |
44060
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
211 signature = hex(hashutil.sha1(repo.vfs.tryread(b'sparse')).digest()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
212 cache[b'signature'] = signature |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
213 |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
214 if includetemp: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
215 raw = repo.vfs.tryread(b'tempsparse') |
44060
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
216 tempsignature = hex(hashutil.sha1(raw).digest()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
217 cache[b'tempsignature'] = tempsignature |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
218 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
219 return b'%s %s' % (signature, tempsignature) |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
220 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
221 |
33303
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
222 def writeconfig(repo, includes, excludes, profiles): |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
223 """Write the sparse config file given a sparse configuration.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
224 with repo.vfs(b'sparse', b'wb') as fh: |
33303
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
225 for p in sorted(profiles): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
226 fh.write(b'%%include %s\n' % p) |
33303
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
227 |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
228 if includes: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
229 fh.write(b'[include]\n') |
33303
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
230 for i in sorted(includes): |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
231 fh.write(i) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
232 fh.write(b'\n') |
33303
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
233 |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
234 if excludes: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
235 fh.write(b'[exclude]\n') |
33303
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
236 for e in sorted(excludes): |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
237 fh.write(e) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
238 fh.write(b'\n') |
33303
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
239 |
33325
38df146d0697
sparse: inline signature cache clearing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33324
diff
changeset
|
240 repo._sparsesignaturecache.clear() |
33304
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
241 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
242 |
33304
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
243 def readtemporaryincludes(repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
244 raw = repo.vfs.tryread(b'tempsparse') |
33304
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
245 if not raw: |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
246 return set() |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
247 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
248 return set(raw.split(b'\n')) |
33304
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
249 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
250 |
33304
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
251 def writetemporaryincludes(repo, includes): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
252 repo.vfs.write(b'tempsparse', b'\n'.join(sorted(includes))) |
33325
38df146d0697
sparse: inline signature cache clearing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33324
diff
changeset
|
253 repo._sparsesignaturecache.clear() |
33304
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
254 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
255 |
33304
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
256 def addtemporaryincludes(repo, additional): |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
257 includes = readtemporaryincludes(repo) |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
258 for i in additional: |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
259 includes.add(i) |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
260 writetemporaryincludes(repo, includes) |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
261 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
262 |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
263 def prunetemporaryincludes(repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
264 if not enabled or not repo.vfs.exists(b'tempsparse'): |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
265 return |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
266 |
33356
ccb3e5399921
sparse: access status fields by name instead of deconstructing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
33355
diff
changeset
|
267 s = repo.status() |
ccb3e5399921
sparse: access status fields by name instead of deconstructing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
33355
diff
changeset
|
268 if s.modified or s.added or s.removed or s.deleted: |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
269 # Still have pending changes. Don't bother trying to prune. |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
270 return |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
271 |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
272 sparsematch = matcher(repo, includetemp=False) |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
273 dirstate = repo.dirstate |
45334
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45295
diff
changeset
|
274 mresult = mergemod.mergeresult() |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
275 dropped = [] |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
276 tempincludes = readtemporaryincludes(repo) |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
277 for file in tempincludes: |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
278 if file in dirstate and not sparsematch(file): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
279 message = _(b'dropping temporarily included sparse files') |
45339
9320f66854f6
sparse: replace merge action values with mergestate.ACTION_* constants
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45334
diff
changeset
|
280 mresult.addfile(file, mergestatemod.ACTION_REMOVE, None, message) |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
281 dropped.append(file) |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
282 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
283 mergemod.applyupdates( |
45334
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45295
diff
changeset
|
284 repo, mresult, repo[None], repo[b'.'], False, wantfiledata=False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
285 ) |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
286 |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
287 # Fix dirstate |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
288 for file in dropped: |
47748
000ea893aad3
sparse: use `update_file` instead of `drop`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47747
diff
changeset
|
289 dirstate.update_file(file, p1_tracked=False, wc_tracked=False) |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
290 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
291 repo.vfs.unlink(b'tempsparse') |
33325
38df146d0697
sparse: inline signature cache clearing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33324
diff
changeset
|
292 repo._sparsesignaturecache.clear() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
293 msg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
294 b'cleaned up %d temporarily added file(s) from the ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
295 b'sparse checkout\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
296 ) |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
297 repo.ui.status(msg % len(tempincludes)) |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
298 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
299 |
33447
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
300 def forceincludematcher(matcher, includes): |
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
301 """Returns a matcher that returns true for any of the forced includes |
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
302 before testing against the actual matcher.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
303 kindpats = [(b'path', include, b'') for include in includes] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
304 includematcher = matchmod.includematcher(b'', kindpats) |
33447
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
305 return matchmod.unionmatcher([includematcher, matcher]) |
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
306 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
307 |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
308 def matcher(repo, revs=None, includetemp=True): |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
309 """Obtain a matcher for sparse working directories for the given revs. |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
310 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
311 If multiple revisions are specified, the matcher is the union of all |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
312 revs. |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
313 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
314 ``includetemp`` indicates whether to use the temporary sparse profile. |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
315 """ |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
316 # If sparse isn't enabled, sparse matcher matches everything. |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
317 if not enabled: |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41675
diff
changeset
|
318 return matchmod.always() |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
319 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
320 if not revs or revs == [None]: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
321 revs = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
322 repo.changelog.rev(node) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
323 for node in repo.dirstate.parents() |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
45525
diff
changeset
|
324 if node != repo.nullid |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
325 ] |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
326 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
327 signature = configsignature(repo, includetemp=includetemp) |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
328 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
329 key = b'%s %s' % (signature, b' '.join(map(pycompat.bytestr, revs))) |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
330 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
331 result = repo._sparsematchercache.get(key) |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
332 if result: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
333 return result |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
334 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
335 matchers = [] |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
336 for rev in revs: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
337 try: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
338 includes, excludes, profiles = patternsforrev(repo, rev) |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
339 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
340 if includes or excludes: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
341 matcher = matchmod.match( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
342 repo.root, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
343 b'', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
344 [], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
345 include=includes, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
346 exclude=excludes, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
347 default=b'relpath', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
348 ) |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
349 matchers.append(matcher) |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
350 except IOError: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
351 pass |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
352 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
353 if not matchers: |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41675
diff
changeset
|
354 result = matchmod.always() |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
355 elif len(matchers) == 1: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
356 result = matchers[0] |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
357 else: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
358 result = matchmod.unionmatcher(matchers) |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
359 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
360 if includetemp: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
361 tempincludes = readtemporaryincludes(repo) |
33447
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
362 result = forceincludematcher(result, tempincludes) |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
363 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
364 repo._sparsematchercache[key] = result |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
365 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
366 return result |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
367 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
368 |
45290
d70c972cec74
sparse: pass mergeresult obj in sparse.filterupdatesactions() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
369 def filterupdatesactions(repo, wctx, mctx, branchmerge, mresult): |
33323
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33322
diff
changeset
|
370 """Filter updates to only lay out files that match the sparse rules.""" |
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33322
diff
changeset
|
371 if not enabled: |
45290
d70c972cec74
sparse: pass mergeresult obj in sparse.filterupdatesactions() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
372 return |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
373 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
374 oldrevs = [pctx.rev() for pctx in wctx.parents()] |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
375 oldsparsematch = matcher(repo, oldrevs) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
376 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
377 if oldsparsematch.always(): |
45290
d70c972cec74
sparse: pass mergeresult obj in sparse.filterupdatesactions() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
378 return |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
379 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
380 files = set() |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
381 prunedactions = {} |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
382 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
383 if branchmerge: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
384 # If we're merging, use the wctx filter, since we're merging into |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
385 # the wctx. |
41397
0bd56c291359
cleanup: use p1() and p2() instead of parents()[0] and parents()[1]
Martin von Zweigbergk <martinvonz@google.com>
parents:
41039
diff
changeset
|
386 sparsematch = matcher(repo, [wctx.p1().rev()]) |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
387 else: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
388 # If we're updating, use the target context's filter, since we're |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
389 # moving to the target context. |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
390 sparsematch = matcher(repo, [mctx.rev()]) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
391 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
392 temporaryfiles = [] |
45346
3c783ff08d40
mergeresult: introduce filemap() which yields filename based mapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45339
diff
changeset
|
393 for file, action in mresult.filemap(): |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
394 type, args, msg = action |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
395 files.add(file) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
396 if sparsematch(file): |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
397 prunedactions[file] = action |
45294
30f3e278c5d7
mergeactions: use action constants instead of string values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
398 elif type == mergestatemod.ACTION_MERGE: |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
399 temporaryfiles.append(file) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
400 prunedactions[file] = action |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
401 elif branchmerge: |
48713
5dfaca4464d1
merge-actions: add an explicite "no_op" attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48665
diff
changeset
|
402 if not type.no_op: |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
403 temporaryfiles.append(file) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
404 prunedactions[file] = action |
45294
30f3e278c5d7
mergeactions: use action constants instead of string values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
405 elif type == mergestatemod.ACTION_FORGET: |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
406 prunedactions[file] = action |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
407 elif file in wctx: |
45294
30f3e278c5d7
mergeactions: use action constants instead of string values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
408 prunedactions[file] = (mergestatemod.ACTION_REMOVE, args, msg) |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
409 |
45295
6a8eafaeff3b
sparse: add comment for an if condition which I tried to refactor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45294
diff
changeset
|
410 # in case or rename on one side, it is possible that f1 might not |
6a8eafaeff3b
sparse: add comment for an if condition which I tried to refactor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45294
diff
changeset
|
411 # be present in sparse checkout we should include it |
6a8eafaeff3b
sparse: add comment for an if condition which I tried to refactor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45294
diff
changeset
|
412 # TODO: should we do the same for f2? |
6a8eafaeff3b
sparse: add comment for an if condition which I tried to refactor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45294
diff
changeset
|
413 # exists as a separate check because file can be in sparse and hence |
6a8eafaeff3b
sparse: add comment for an if condition which I tried to refactor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45294
diff
changeset
|
414 # if we try to club this condition in above `elif type == ACTION_MERGE` |
6a8eafaeff3b
sparse: add comment for an if condition which I tried to refactor
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45294
diff
changeset
|
415 # it won't be triggered |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44060
diff
changeset
|
416 if branchmerge and type == mergestatemod.ACTION_MERGE: |
39527
9db856446298
sparse: add local files to temporaryfiles if they exist out of sparse
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
38862
diff
changeset
|
417 f1, f2, fa, move, anc = args |
9db856446298
sparse: add local files to temporaryfiles if they exist out of sparse
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
38862
diff
changeset
|
418 if not sparsematch(f1): |
9db856446298
sparse: add local files to temporaryfiles if they exist out of sparse
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
38862
diff
changeset
|
419 temporaryfiles.append(f1) |
9db856446298
sparse: add local files to temporaryfiles if they exist out of sparse
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
38862
diff
changeset
|
420 |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
421 if len(temporaryfiles) > 0: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
422 repo.ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
423 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
424 b'temporarily included %d file(s) in the sparse ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
425 b'checkout for merging\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
426 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
427 % len(temporaryfiles) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
428 ) |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
429 addtemporaryincludes(repo, temporaryfiles) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
430 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
431 # Add the new files to the working copy so they can be merged, etc |
45334
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45295
diff
changeset
|
432 tmresult = mergemod.mergeresult() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
433 message = b'temporarily adding to sparse checkout' |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
434 wctxmanifest = repo[None].manifest() |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
435 for file in temporaryfiles: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
436 if file in wctxmanifest: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
437 fctx = repo[None][file] |
45334
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45295
diff
changeset
|
438 tmresult.addfile( |
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45295
diff
changeset
|
439 file, |
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45295
diff
changeset
|
440 mergestatemod.ACTION_GET, |
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45295
diff
changeset
|
441 (fctx.flags(), False), |
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45295
diff
changeset
|
442 message, |
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45295
diff
changeset
|
443 ) |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
444 |
47708
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
445 with repo.dirstate.parentchange(): |
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
446 mergemod.applyupdates( |
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
447 repo, |
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
448 tmresult, |
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
449 repo[None], |
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
450 repo[b'.'], |
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
451 False, |
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
452 wantfiledata=False, |
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
453 ) |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
454 |
47708
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
455 dirstate = repo.dirstate |
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
456 for file, flags, msg in tmresult.getactions( |
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
457 [mergestatemod.ACTION_GET] |
7bdfd88251c0
sparse: apply update with in a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47606
diff
changeset
|
458 ): |
47709
a0e79084389d
sparse: use `update_file` instead of `normal` during `applyupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47708
diff
changeset
|
459 dirstate.update_file(file, p1_tracked=True, wc_tracked=True) |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
460 |
33370
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
461 profiles = activeconfig(repo)[2] |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
462 changedprofiles = profiles & files |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
463 # If an active profile changed during the update, refresh the checkout. |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
464 # Don't do this during a branch merge, since all incoming changes should |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
465 # have been handled by the temporary includes above. |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
466 if changedprofiles and not branchmerge: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
467 mf = mctx.manifest() |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
468 for file in mf: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
469 old = oldsparsematch(file) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
470 new = sparsematch(file) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
471 if not old and new: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
472 flags = mf.flags(file) |
45294
30f3e278c5d7
mergeactions: use action constants instead of string values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
473 prunedactions[file] = ( |
30f3e278c5d7
mergeactions: use action constants instead of string values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
474 mergestatemod.ACTION_GET, |
30f3e278c5d7
mergeactions: use action constants instead of string values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
475 (flags, False), |
30f3e278c5d7
mergeactions: use action constants instead of string values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
476 b'', |
30f3e278c5d7
mergeactions: use action constants instead of string values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
477 ) |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
478 elif old and not new: |
45294
30f3e278c5d7
mergeactions: use action constants instead of string values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
479 prunedactions[file] = (mergestatemod.ACTION_REMOVE, [], b'') |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
480 |
45290
d70c972cec74
sparse: pass mergeresult obj in sparse.filterupdatesactions() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
481 mresult.setactions(prunedactions) |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
482 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
483 |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
484 def refreshwdir(repo, origstatus, origsparsematch, force=False): |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
485 """Refreshes working directory by taking sparse config into account. |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
486 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
487 The old status and sparse matcher is compared against the current sparse |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
488 matcher. |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
489 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
490 Will abort if a file with pending changes is being excluded or included |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
491 unless ``force`` is True. |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
492 """ |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
493 # Verify there are no pending changes |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
494 pending = set() |
33356
ccb3e5399921
sparse: access status fields by name instead of deconstructing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
33355
diff
changeset
|
495 pending.update(origstatus.modified) |
ccb3e5399921
sparse: access status fields by name instead of deconstructing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
33355
diff
changeset
|
496 pending.update(origstatus.added) |
ccb3e5399921
sparse: access status fields by name instead of deconstructing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
33355
diff
changeset
|
497 pending.update(origstatus.removed) |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
498 sparsematch = matcher(repo) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
499 abort = False |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
500 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
501 for f in pending: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
502 if not sparsematch(f): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
503 repo.ui.warn(_(b"pending changes to '%s'\n") % f) |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
504 abort = not force |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
505 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
506 if abort: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
507 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
508 _(b'could not update sparseness due to pending changes') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
509 ) |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
510 |
45334
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45295
diff
changeset
|
511 # Calculate merge result |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
512 dirstate = repo.dirstate |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
513 ctx = repo[b'.'] |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
514 added = [] |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
515 lookup = [] |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
516 dropped = [] |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
517 mf = ctx.manifest() |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
518 files = set(mf) |
45334
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45295
diff
changeset
|
519 mresult = mergemod.mergeresult() |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
520 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
521 for file in files: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
522 old = origsparsematch(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
523 new = sparsematch(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
524 # Add files that are newly included, or that don't exist in |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
525 # the dirstate yet. |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
526 if (new and not old) or (old and new and not file in dirstate): |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
527 fl = mf.flags(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
528 if repo.wvfs.exists(file): |
45339
9320f66854f6
sparse: replace merge action values with mergestate.ACTION_* constants
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45334
diff
changeset
|
529 mresult.addfile(file, mergestatemod.ACTION_EXEC, (fl,), b'') |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
530 lookup.append(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
531 else: |
45339
9320f66854f6
sparse: replace merge action values with mergestate.ACTION_* constants
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45334
diff
changeset
|
532 mresult.addfile( |
9320f66854f6
sparse: replace merge action values with mergestate.ACTION_* constants
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45334
diff
changeset
|
533 file, mergestatemod.ACTION_GET, (fl, False), b'' |
9320f66854f6
sparse: replace merge action values with mergestate.ACTION_* constants
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45334
diff
changeset
|
534 ) |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
535 added.append(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
536 # Drop files that are newly excluded, or that still exist in |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
537 # the dirstate. |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
538 elif (old and not new) or (not old and not new and file in dirstate): |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
539 dropped.append(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
540 if file not in pending: |
45339
9320f66854f6
sparse: replace merge action values with mergestate.ACTION_* constants
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45334
diff
changeset
|
541 mresult.addfile(file, mergestatemod.ACTION_REMOVE, [], b'') |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
542 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
543 # Verify there are no pending changes in newly included files |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
544 abort = False |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
545 for file in lookup: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
546 repo.ui.warn(_(b"pending changes to '%s'\n") % file) |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
547 abort = not force |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
548 if abort: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
549 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
550 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
551 b'cannot change sparseness due to pending ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
552 b'changes (delete the files or use ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
553 b'--force to bring them back dirty)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
554 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
555 ) |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
556 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
557 # Check for files that were only in the dirstate. |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
558 for file, state in pycompat.iteritems(dirstate): |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
559 if not file in files: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
560 old = origsparsematch(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
561 new = sparsematch(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
562 if old and not new: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
563 dropped.append(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
564 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
565 mergemod.applyupdates( |
45334
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45295
diff
changeset
|
566 repo, mresult, repo[None], repo[b'.'], False, wantfiledata=False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
567 ) |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
568 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
569 # Fix dirstate |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
570 for file in added: |
47710
3148204e649e
sparse: use `update_file` instead of `normal` in `refreshwdir`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47709
diff
changeset
|
571 dirstate.update_file(file, p1_tracked=True, wc_tracked=True) |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
572 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
573 for file in dropped: |
47747
452e7048293d
sparse: use `update_file` instead of `drop` in `refreshwdir`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47737
diff
changeset
|
574 dirstate.update_file(file, p1_tracked=False, wc_tracked=False) |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
575 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
576 for file in lookup: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
577 # File exists on disk, and we're bringing it back in an unknown state. |
47737
e0e69a7d7af8
sparse: use `update_file` instead of `normallookup` in refreshwdir
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47710
diff
changeset
|
578 dirstate.update_file( |
e0e69a7d7af8
sparse: use `update_file` instead of `normallookup` in refreshwdir
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47710
diff
changeset
|
579 file, p1_tracked=True, wc_tracked=True, possibly_dirty=True |
e0e69a7d7af8
sparse: use `update_file` instead of `normallookup` in refreshwdir
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47710
diff
changeset
|
580 ) |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
581 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
582 return added, dropped, lookup |
33353
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
583 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
584 |
33353
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
585 def aftercommit(repo, node): |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
586 """Perform actions after a working directory commit.""" |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
587 # This function is called unconditionally, even if sparse isn't |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
588 # enabled. |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
589 ctx = repo[node] |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
590 |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
591 profiles = patternsforrev(repo, ctx.rev())[2] |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
592 |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
593 # profiles will only have data if sparse is enabled. |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
594 if profiles & set(ctx.files()): |
33353
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
595 origstatus = repo.status() |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
596 origsparsematch = matcher(repo) |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
597 refreshwdir(repo, origstatus, origsparsematch, force=True) |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
598 |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
599 prunetemporaryincludes(repo) |
33354
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
600 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
601 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
602 def _updateconfigandrefreshwdir( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
603 repo, includes, excludes, profiles, force=False, removing=False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
604 ): |
33555
6755b719048c
sparse: consolidate common code for writing sparse config
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33551
diff
changeset
|
605 """Update the sparse config and working directory state.""" |
48665
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
606 with repo.lock(): |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
607 raw = repo.vfs.tryread(b'sparse') |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
608 oldincludes, oldexcludes, oldprofiles = parseconfig( |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
609 repo.ui, raw, b'sparse' |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
610 ) |
33555
6755b719048c
sparse: consolidate common code for writing sparse config
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33551
diff
changeset
|
611 |
48665
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
612 oldstatus = repo.status() |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
613 oldmatch = matcher(repo) |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
614 oldrequires = set(repo.requirements) |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
615 |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
616 # TODO remove this try..except once the matcher integrates better |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
617 # with dirstate. We currently have to write the updated config |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
618 # because that will invalidate the matcher cache and force a |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
619 # re-read. We ideally want to update the cached matcher on the |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
620 # repo instance then flush the new config to disk once wdir is |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
621 # updated. But this requires massive rework to matcher() and its |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
622 # consumers. |
33555
6755b719048c
sparse: consolidate common code for writing sparse config
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33551
diff
changeset
|
623 |
48665
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
624 if requirements.SPARSE_REQUIREMENT in oldrequires and removing: |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
625 repo.requirements.discard(requirements.SPARSE_REQUIREMENT) |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
626 scmutil.writereporequirements(repo) |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
627 elif requirements.SPARSE_REQUIREMENT not in oldrequires: |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
628 repo.requirements.add(requirements.SPARSE_REQUIREMENT) |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
629 scmutil.writereporequirements(repo) |
33555
6755b719048c
sparse: consolidate common code for writing sparse config
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33551
diff
changeset
|
630 |
48665
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
631 try: |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
632 writeconfig(repo, includes, excludes, profiles) |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
633 return refreshwdir(repo, oldstatus, oldmatch, force=force) |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
634 except Exception: |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
635 if repo.requirements != oldrequires: |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
636 repo.requirements.clear() |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
637 repo.requirements |= oldrequires |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
638 scmutil.writereporequirements(repo) |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
639 writeconfig(repo, oldincludes, oldexcludes, oldprofiles) |
a62ba3345534
sparse: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48494
diff
changeset
|
640 raise |
33555
6755b719048c
sparse: consolidate common code for writing sparse config
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33551
diff
changeset
|
641 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
642 |
33354
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
643 def clearrules(repo, force=False): |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
644 """Clears include/exclude rules from the sparse config. |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
645 |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
646 The remaining sparse config only has profiles, if defined. The working |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
647 directory is refreshed, as needed. |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
648 """ |
47606
26bf0b9fe78f
sparse: clear rules in the context of a `parentchanges` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47605
diff
changeset
|
649 with repo.wlock(), repo.dirstate.parentchange(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
650 raw = repo.vfs.tryread(b'sparse') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
651 includes, excludes, profiles = parseconfig(repo.ui, raw, b'sparse') |
33354
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
652 |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
653 if not includes and not excludes: |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
654 return |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
655 |
33555
6755b719048c
sparse: consolidate common code for writing sparse config
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33551
diff
changeset
|
656 _updateconfigandrefreshwdir(repo, set(), set(), profiles, force=force) |
33355
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
657 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
658 |
33371
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
659 def importfromfiles(repo, opts, paths, force=False): |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
660 """Import sparse config rules from files. |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
661 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
662 The updated sparse config is written out and the working directory |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
663 is refreshed, as needed. |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
664 """ |
47605
a5701ffc10e4
sparse: make sure we adjust the dirstate at the same time as the parent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47012
diff
changeset
|
665 with repo.wlock(), repo.dirstate.parentchange(): |
33371
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
666 # read current configuration |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
667 raw = repo.vfs.tryread(b'sparse') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
668 includes, excludes, profiles = parseconfig(repo.ui, raw, b'sparse') |
33371
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
669 aincludes, aexcludes, aprofiles = activeconfig(repo) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
670 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
671 # Import rules on top; only take in rules that are not yet |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
672 # part of the active rules. |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
673 changed = False |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
674 for p in paths: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
675 with util.posixfile(util.expandpath(p), mode=b'rb') as fh: |
33371
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
676 raw = fh.read() |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
677 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
678 iincludes, iexcludes, iprofiles = parseconfig( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
679 repo.ui, raw, b'sparse' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
680 ) |
33371
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
681 oldsize = len(includes) + len(excludes) + len(profiles) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
682 includes.update(iincludes - aincludes) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
683 excludes.update(iexcludes - aexcludes) |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
684 profiles.update(iprofiles - aprofiles) |
33371
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
685 if len(includes) + len(excludes) + len(profiles) > oldsize: |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
686 changed = True |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
687 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
688 profilecount = includecount = excludecount = 0 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
689 fcounts = (0, 0, 0) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
690 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
691 if changed: |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
692 profilecount = len(profiles - aprofiles) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
693 includecount = len(includes - aincludes) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
694 excludecount = len(excludes - aexcludes) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
695 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
696 fcounts = map( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
697 len, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
698 _updateconfigandrefreshwdir( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
699 repo, includes, excludes, profiles, force=force |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
700 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
701 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
702 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
703 printchanges( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
704 repo.ui, opts, profilecount, includecount, excludecount, *fcounts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
705 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
706 |
33371
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
707 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
708 def updateconfig( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
709 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
710 opts, |
48737
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
711 include=(), |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
712 exclude=(), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
713 reset=False, |
48737
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
714 delete=(), |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
715 enableprofile=(), |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
716 disableprofile=(), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
717 force=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
718 usereporootpaths=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
719 ): |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
720 """Perform a sparse config update. |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
721 |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
722 The new config is written out and a working directory refresh is performed. |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
723 """ |
48494
b74ee41addee
sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47748
diff
changeset
|
724 with repo.wlock(), repo.lock(), repo.dirstate.parentchange(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
725 raw = repo.vfs.tryread(b'sparse') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
726 oldinclude, oldexclude, oldprofiles = parseconfig( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
727 repo.ui, raw, b'sparse' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
728 ) |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
729 |
33376
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
730 if reset: |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
731 newinclude = set() |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
732 newexclude = set() |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
733 newprofiles = set() |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
734 else: |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
735 newinclude = set(oldinclude) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
736 newexclude = set(oldexclude) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
737 newprofiles = set(oldprofiles) |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
738 |
48737
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
739 def normalize_pats(pats): |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
740 if any(os.path.isabs(pat) for pat in pats): |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
741 raise error.Abort(_(b'paths cannot be absolute')) |
33683
7dcb517122f9
sparse: properly error out when absolute paths are used
Kostia Balytskyi <ikostia@fb.com>
parents:
33556
diff
changeset
|
742 |
48737
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
743 if usereporootpaths: |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
744 return pats |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
745 |
33685
e1c56486d1aa
sparse: treat paths as cwd-relative
Kostia Balytskyi <ikostia@fb.com>
parents:
33683
diff
changeset
|
746 # let's treat paths as relative to cwd |
e1c56486d1aa
sparse: treat paths as cwd-relative
Kostia Balytskyi <ikostia@fb.com>
parents:
33683
diff
changeset
|
747 root, cwd = repo.root, repo.getcwd() |
e1c56486d1aa
sparse: treat paths as cwd-relative
Kostia Balytskyi <ikostia@fb.com>
parents:
33683
diff
changeset
|
748 abspats = [] |
e1c56486d1aa
sparse: treat paths as cwd-relative
Kostia Balytskyi <ikostia@fb.com>
parents:
33683
diff
changeset
|
749 for kindpat in pats: |
e1c56486d1aa
sparse: treat paths as cwd-relative
Kostia Balytskyi <ikostia@fb.com>
parents:
33683
diff
changeset
|
750 kind, pat = matchmod._patsplit(kindpat, None) |
e1c56486d1aa
sparse: treat paths as cwd-relative
Kostia Balytskyi <ikostia@fb.com>
parents:
33683
diff
changeset
|
751 if kind in matchmod.cwdrelativepatternkinds or kind is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
752 ap = (kind + b':' if kind else b'') + pathutil.canonpath( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
753 root, cwd, pat |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
754 ) |
33685
e1c56486d1aa
sparse: treat paths as cwd-relative
Kostia Balytskyi <ikostia@fb.com>
parents:
33683
diff
changeset
|
755 abspats.append(ap) |
e1c56486d1aa
sparse: treat paths as cwd-relative
Kostia Balytskyi <ikostia@fb.com>
parents:
33683
diff
changeset
|
756 else: |
e1c56486d1aa
sparse: treat paths as cwd-relative
Kostia Balytskyi <ikostia@fb.com>
parents:
33683
diff
changeset
|
757 abspats.append(kindpat) |
48737
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
758 return abspats |
33685
e1c56486d1aa
sparse: treat paths as cwd-relative
Kostia Balytskyi <ikostia@fb.com>
parents:
33683
diff
changeset
|
759 |
48737
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
760 include = normalize_pats(include) |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
761 exclude = normalize_pats(exclude) |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
762 delete = normalize_pats(delete) |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
763 disableprofile = normalize_pats(disableprofile) |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
764 enableprofile = normalize_pats(enableprofile) |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
765 |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
766 newinclude.difference_update(delete) |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
767 newexclude.difference_update(delete) |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
768 newprofiles.difference_update(disableprofile) |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
769 newinclude.update(include) |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
770 newprofiles.update(enableprofile) |
a6efb9180764
sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
48713
diff
changeset
|
771 newexclude.update(exclude) |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
772 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
773 profilecount = len(newprofiles - oldprofiles) - len( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
774 oldprofiles - newprofiles |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
775 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
776 includecount = len(newinclude - oldinclude) - len( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
777 oldinclude - newinclude |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
778 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
779 excludecount = len(newexclude - oldexclude) - len( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
780 oldexclude - newexclude |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
781 ) |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
782 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
783 fcounts = map( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
784 len, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
785 _updateconfigandrefreshwdir( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
786 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
787 newinclude, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
788 newexclude, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
789 newprofiles, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
790 force=force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
791 removing=reset, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
792 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
793 ) |
33376
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
794 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
795 printchanges( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
796 repo.ui, opts, profilecount, includecount, excludecount, *fcounts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
797 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
798 |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
799 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
800 def printchanges( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
801 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
802 opts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
803 profilecount=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
804 includecount=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
805 excludecount=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
806 added=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
807 dropped=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
808 conflicting=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
809 ): |
33355
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
810 """Print output summarizing sparse config changes.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
811 with ui.formatter(b'sparse', opts) as fm: |
33355
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
812 fm.startitem() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
813 fm.condwrite( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
814 ui.verbose, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
815 b'profiles_added', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
816 _(b'Profiles changed: %d\n'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
817 profilecount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
818 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
819 fm.condwrite( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
820 ui.verbose, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
821 b'include_rules_added', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
822 _(b'Include rules changed: %d\n'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
823 includecount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
824 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
825 fm.condwrite( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
826 ui.verbose, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
827 b'exclude_rules_added', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
828 _(b'Exclude rules changed: %d\n'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
829 excludecount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
830 ) |
33355
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
831 |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
832 # In 'plain' verbose mode, mergemod.applyupdates already outputs what |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
833 # files are added or removed outside of the templating formatter |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
834 # framework. No point in repeating ourselves in that case. |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
835 if not fm.isplain(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
836 fm.condwrite( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
837 ui.verbose, b'files_added', _(b'Files added: %d\n'), added |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
838 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
839 fm.condwrite( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
840 ui.verbose, b'files_dropped', _(b'Files dropped: %d\n'), dropped |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
841 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
842 fm.condwrite( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
843 ui.verbose, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
844 b'files_conflicting', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
845 _(b'Files conflicting: %d\n'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
846 conflicting, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42456
diff
changeset
|
847 ) |