Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/sparse.py @ 33550:32f348d741e5
sparse: use set for capturing profiles
Order doesn't need to be preserved. A set is acceptable.
Differential Revision: https://phab.mercurial-scm.org/D95
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 15 Jul 2017 13:07:57 -0700 |
parents | 0407a51b9d8c |
children | 1d1779734c99 |
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 |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
10 import collections |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
11 import hashlib |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
12 import os |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
13 |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
14 from .i18n import _ |
33301
ca4b78eb11e7
sparse: move active profiles function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33300
diff
changeset
|
15 from .node import nullid |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
16 from . import ( |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
17 error, |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
18 match as matchmod, |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
19 merge as mergemod, |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
20 pycompat, |
33371
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
21 util, |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
22 ) |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
23 |
33299
41448fc51510
sparse: variable to track if sparse is enabled
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33298
diff
changeset
|
24 # 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
|
25 # 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
|
26 # 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
|
27 enabled = False |
41448fc51510
sparse: variable to track if sparse is enabled
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33298
diff
changeset
|
28 |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
29 def parseconfig(ui, raw): |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
30 """Parse sparse config file content. |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
31 |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
32 Returns a tuple of includes, excludes, and profiles. |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
33 """ |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
34 includes = set() |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
35 excludes = set() |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
36 current = includes |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
37 profiles = set() |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
38 for line in raw.split('\n'): |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
39 line = line.strip() |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
40 if not line or line.startswith('#'): |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
41 # empty or comment line, skip |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
42 continue |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
43 elif line.startswith('%include '): |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
44 line = line[9:].strip() |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
45 if line: |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
46 profiles.add(line) |
33297
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
47 elif line == '[include]': |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
48 if current != includes: |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
49 # TODO pass filename into this API so we can report it. |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
50 raise error.Abort(_('sparse config cannot have includes ' + |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
51 'after excludes')) |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
52 continue |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
53 elif line == '[exclude]': |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
54 current = excludes |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
55 elif line: |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
56 if line.strip().startswith('/'): |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
57 ui.warn(_('warning: sparse profile cannot use' + |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
58 ' paths starting with /, ignoring %s\n') % line) |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
59 continue |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
60 current.add(line) |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 |
ba5d89774db6
sparse: move config parsing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
62 return includes, excludes, profiles |
33298
f41a99c45956
sparse: move profile reading into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33297
diff
changeset
|
63 |
f41a99c45956
sparse: move profile reading into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33297
diff
changeset
|
64 # Exists as separate function to facilitate monkeypatching. |
f41a99c45956
sparse: move profile reading into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33297
diff
changeset
|
65 def readprofile(repo, profile, changeid): |
f41a99c45956
sparse: move profile reading into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33297
diff
changeset
|
66 """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
|
67 # 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
|
68 # resolve and can be slow. |
f41a99c45956
sparse: move profile reading into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33297
diff
changeset
|
69 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
|
70 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
71 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
|
72 """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
|
73 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
74 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
|
75 patterns. |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
76 """ |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
77 # 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
|
78 if not enabled: |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
79 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
|
80 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
81 raw = repo.vfs.tryread('sparse') |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
82 if not raw: |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
83 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
|
84 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
85 if rev is None: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
86 raise error.Abort(_('cannot parse sparse patterns from working ' |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
87 'directory')) |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
88 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
89 includes, excludes, profiles = parseconfig(repo.ui, raw) |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
90 ctx = repo[rev] |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
91 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
92 if profiles: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
93 visited = set() |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
94 while profiles: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
95 profile = profiles.pop() |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
96 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
|
97 continue |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
98 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
99 visited.add(profile) |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
100 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
101 try: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
102 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
|
103 except error.ManifestLookupError: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
104 msg = ( |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
105 "warning: sparse profile '%s' not found " |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
106 "in rev %s - ignoring it\n" % (profile, ctx)) |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
107 # experimental config: sparse.missingwarning |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
108 if repo.ui.configbool( |
33499
0407a51b9d8c
codemod: register core configitems using a script
Jun Wu <quark@fb.com>
parents:
33447
diff
changeset
|
109 'sparse', 'missingwarning'): |
33300
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
110 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
|
111 else: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
112 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
|
113 continue |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
114 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
115 pincludes, pexcludes, subprofs = parseconfig(repo.ui, raw) |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
116 includes.update(pincludes) |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
117 excludes.update(pexcludes) |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
118 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
|
119 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
120 profiles = visited |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
121 |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
122 if includes: |
f7a106b3f089
sparse: move resolving of sparse patterns for rev into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33299
diff
changeset
|
123 includes.add('.hg*') |
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 return includes, excludes, profiles |
33301
ca4b78eb11e7
sparse: move active profiles function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33300
diff
changeset
|
126 |
33370
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
127 def activeconfig(repo): |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
128 """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
|
129 |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
130 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
|
131 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
|
132 """ |
33301
ca4b78eb11e7
sparse: move active profiles function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33300
diff
changeset
|
133 revs = [repo.changelog.rev(node) for node in |
ca4b78eb11e7
sparse: move active profiles function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33300
diff
changeset
|
134 repo.dirstate.parents() if node != nullid] |
ca4b78eb11e7
sparse: move active profiles function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33300
diff
changeset
|
135 |
33370
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
136 allincludes = set() |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
137 allexcludes = set() |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
138 allprofiles = set() |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
139 |
33301
ca4b78eb11e7
sparse: move active profiles function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33300
diff
changeset
|
140 for rev in revs: |
33370
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
141 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
|
142 allincludes |= includes |
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
143 allexcludes |= excludes |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
144 allprofiles |= profiles |
33301
ca4b78eb11e7
sparse: move active profiles function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33300
diff
changeset
|
145 |
33370
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
146 return allincludes, allexcludes, allprofiles |
33302
36a415b5a4b2
localrepo: add sparse caches
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33301
diff
changeset
|
147 |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
148 def configsignature(repo, includetemp=True): |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
149 """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
|
150 |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
151 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
|
152 """ |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
153 cache = repo._sparsesignaturecache |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
154 |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
155 signature = cache.get('signature') |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
156 |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
157 if includetemp: |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
158 tempsignature = cache.get('tempsignature') |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
159 else: |
33318
526255fe7899
sparse: clean up config signature code
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33317
diff
changeset
|
160 tempsignature = '0' |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
161 |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
162 if signature is None or (includetemp and tempsignature is None): |
33318
526255fe7899
sparse: clean up config signature code
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33317
diff
changeset
|
163 signature = hashlib.sha1(repo.vfs.tryread('sparse')).hexdigest() |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
164 cache['signature'] = signature |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
165 |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
166 if includetemp: |
33318
526255fe7899
sparse: clean up config signature code
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33317
diff
changeset
|
167 raw = repo.vfs.tryread('tempsparse') |
526255fe7899
sparse: clean up config signature code
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33317
diff
changeset
|
168 tempsignature = hashlib.sha1(raw).hexdigest() |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
169 cache['tempsignature'] = tempsignature |
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
170 |
33318
526255fe7899
sparse: clean up config signature code
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33317
diff
changeset
|
171 return '%s %s' % (signature, tempsignature) |
33317
df1287268cc0
sparse: move config signature logic into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33304
diff
changeset
|
172 |
33303
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
173 def writeconfig(repo, includes, excludes, profiles): |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
174 """Write the sparse config file given a sparse configuration.""" |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
175 with repo.vfs('sparse', 'wb') as fh: |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
176 for p in sorted(profiles): |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
177 fh.write('%%include %s\n' % p) |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
178 |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
179 if includes: |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
180 fh.write('[include]\n') |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
181 for i in sorted(includes): |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
182 fh.write(i) |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
183 fh.write('\n') |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
184 |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
185 if excludes: |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
186 fh.write('[exclude]\n') |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
187 for e in sorted(excludes): |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
188 fh.write(e) |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
189 fh.write('\n') |
8b571495d811
sparse: move config file writing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33302
diff
changeset
|
190 |
33325
38df146d0697
sparse: inline signature cache clearing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33324
diff
changeset
|
191 repo._sparsesignaturecache.clear() |
33304
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
192 |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
193 def readtemporaryincludes(repo): |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
194 raw = repo.vfs.tryread('tempsparse') |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
195 if not raw: |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
196 return set() |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
197 |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
198 return set(raw.split('\n')) |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
199 |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
200 def writetemporaryincludes(repo, includes): |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
201 repo.vfs.write('tempsparse', '\n'.join(sorted(includes))) |
33325
38df146d0697
sparse: inline signature cache clearing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33324
diff
changeset
|
202 repo._sparsesignaturecache.clear() |
33304
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
203 |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
204 def addtemporaryincludes(repo, additional): |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
205 includes = readtemporaryincludes(repo) |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
206 for i in additional: |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
207 includes.add(i) |
3e1accab7447
sparse: move some temporary includes functions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33303
diff
changeset
|
208 writetemporaryincludes(repo, includes) |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
209 |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
210 def prunetemporaryincludes(repo): |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
211 if not enabled or not repo.vfs.exists('tempsparse'): |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
212 return |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
213 |
33356
ccb3e5399921
sparse: access status fields by name instead of deconstructing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
33355
diff
changeset
|
214 s = repo.status() |
ccb3e5399921
sparse: access status fields by name instead of deconstructing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
33355
diff
changeset
|
215 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
|
216 # 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
|
217 return |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
218 |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
219 sparsematch = matcher(repo, includetemp=False) |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
220 dirstate = repo.dirstate |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
221 actions = [] |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
222 dropped = [] |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
223 tempincludes = readtemporaryincludes(repo) |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
224 for file in tempincludes: |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
225 if file in dirstate and not sparsematch(file): |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
226 message = _('dropping temporarily included sparse files') |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
227 actions.append((file, None, message)) |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
228 dropped.append(file) |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
229 |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
230 typeactions = collections.defaultdict(list) |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
231 typeactions['r'] = actions |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
232 mergemod.applyupdates(repo, typeactions, repo[None], repo['.'], False) |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
233 |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
234 # Fix dirstate |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
235 for file in dropped: |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
236 dirstate.drop(file) |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
237 |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
238 repo.vfs.unlink('tempsparse') |
33325
38df146d0697
sparse: inline signature cache clearing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33324
diff
changeset
|
239 repo._sparsesignaturecache.clear() |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
240 msg = _('cleaned up %d temporarily added file(s) from the ' |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
241 'sparse checkout\n') |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33320
diff
changeset
|
242 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
|
243 |
33447
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
244 def forceincludematcher(matcher, includes): |
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
245 """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
|
246 before testing against the actual matcher.""" |
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
247 kindpats = [('path', include, '') for include in includes] |
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
248 includematcher = matchmod.includematcher('', '', kindpats) |
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
249 return matchmod.unionmatcher([includematcher, matcher]) |
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
250 |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
251 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
|
252 """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
|
253 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
254 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
|
255 revs. |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
256 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
257 ``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
|
258 """ |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
259 # 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
|
260 if not enabled: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
261 return matchmod.always(repo.root, '') |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
262 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
263 if not revs or revs == [None]: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
264 revs = [repo.changelog.rev(node) |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
265 for node in repo.dirstate.parents() if node != nullid] |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
266 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
267 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
|
268 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
269 key = '%s %s' % (signature, ' '.join(map(pycompat.bytestr, revs))) |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
270 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
271 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
|
272 if result: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
273 return result |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
274 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
275 matchers = [] |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
276 for rev in revs: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
277 try: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
278 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
|
279 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
280 if includes or excludes: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
281 # Explicitly include subdirectories of includes so |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
282 # status will walk them down to the actual include. |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
283 subdirs = set() |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
284 for include in includes: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
285 # TODO consider using posix path functions here so Windows |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
286 # \ directory separators don't come into play. |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
287 dirname = os.path.dirname(include) |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
288 # basename is used to avoid issues with absolute |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
289 # paths (which on Windows can include the drive). |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
290 while os.path.basename(dirname): |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
291 subdirs.add(dirname) |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
292 dirname = os.path.dirname(dirname) |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
293 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
294 matcher = matchmod.match(repo.root, '', [], |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
295 include=includes, exclude=excludes, |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
296 default='relpath') |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
297 if subdirs: |
33447
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
298 matcher = forceincludematcher(matcher, subdirs) |
33320
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
299 matchers.append(matcher) |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
300 except IOError: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
301 pass |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
302 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
303 if not matchers: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
304 result = matchmod.always(repo.root, '') |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
305 elif len(matchers) == 1: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
306 result = matchers[0] |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
307 else: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
308 result = matchmod.unionmatcher(matchers) |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
309 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
310 if includetemp: |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
311 tempincludes = readtemporaryincludes(repo) |
33447
6f4e5e5940a5
match: write forceincludematcher using unionmatcher
Martin von Zweigbergk <martinvonz@google.com>
parents:
33376
diff
changeset
|
312 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
|
313 |
153456f02426
sparse: move function for resolving sparse matcher into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33318
diff
changeset
|
314 repo._sparsematchercache[key] = result |
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 return result |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
317 |
33323
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33322
diff
changeset
|
318 def filterupdatesactions(repo, wctx, mctx, branchmerge, actions): |
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33322
diff
changeset
|
319 """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
|
320 if not enabled: |
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33322
diff
changeset
|
321 return actions |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
322 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
323 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
|
324 oldsparsematch = matcher(repo, oldrevs) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
325 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
326 if oldsparsematch.always(): |
33323
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33322
diff
changeset
|
327 return actions |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
328 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
329 files = set() |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
330 prunedactions = {} |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
331 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
332 if branchmerge: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
333 # 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
|
334 # the wctx. |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
335 sparsematch = matcher(repo, [wctx.parents()[0].rev()]) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
336 else: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
337 # 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
|
338 # moving to the target context. |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
339 sparsematch = matcher(repo, [mctx.rev()]) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
340 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
341 temporaryfiles = [] |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
342 for file, action in actions.iteritems(): |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
343 type, args, msg = action |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
344 files.add(file) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
345 if sparsematch(file): |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
346 prunedactions[file] = action |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
347 elif type == 'm': |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
348 temporaryfiles.append(file) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
349 prunedactions[file] = action |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
350 elif branchmerge: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
351 if type != 'k': |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
352 temporaryfiles.append(file) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
353 prunedactions[file] = action |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
354 elif type == 'f': |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
355 prunedactions[file] = action |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
356 elif file in wctx: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
357 prunedactions[file] = ('r', args, msg) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
358 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
359 if len(temporaryfiles) > 0: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
360 repo.ui.status(_('temporarily included %d file(s) in the sparse ' |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
361 'checkout for merging\n') % len(temporaryfiles)) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
362 addtemporaryincludes(repo, temporaryfiles) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
363 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
364 # Add the new files to the working copy so they can be merged, etc |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
365 actions = [] |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
366 message = 'temporarily adding to sparse checkout' |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
367 wctxmanifest = repo[None].manifest() |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
368 for file in temporaryfiles: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
369 if file in wctxmanifest: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
370 fctx = repo[None][file] |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
371 actions.append((file, (fctx.flags(), False), message)) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
372 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
373 typeactions = collections.defaultdict(list) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
374 typeactions['g'] = actions |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
375 mergemod.applyupdates(repo, typeactions, repo[None], repo['.'], |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
376 False) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
377 |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
378 dirstate = repo.dirstate |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
379 for file, flags, msg in actions: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
380 dirstate.normal(file) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
381 |
33370
482320104672
sparse: refactor activeprofiles into a generic function (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33356
diff
changeset
|
382 profiles = activeconfig(repo)[2] |
33322
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
383 changedprofiles = profiles & files |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
384 # 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
|
385 # 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
|
386 # 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
|
387 if changedprofiles and not branchmerge: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
388 mf = mctx.manifest() |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
389 for file in mf: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
390 old = oldsparsematch(file) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
391 new = sparsematch(file) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
392 if not old and new: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
393 flags = mf.flags(file) |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
394 prunedactions[file] = ('g', (flags, False), '') |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
395 elif old and not new: |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
396 prunedactions[file] = ('r', [], '') |
fa6c2c3064fd
sparse: move update action filtering into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
397 |
33323
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33322
diff
changeset
|
398 return prunedactions |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
399 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
400 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
|
401 """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
|
402 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
403 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
|
404 matcher. |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
405 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
406 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
|
407 unless ``force`` is True. |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
408 """ |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
409 # Verify there are no pending changes |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
410 pending = set() |
33356
ccb3e5399921
sparse: access status fields by name instead of deconstructing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
33355
diff
changeset
|
411 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
|
412 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
|
413 pending.update(origstatus.removed) |
33324
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
414 sparsematch = matcher(repo) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
415 abort = False |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
416 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
417 for f in pending: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
418 if not sparsematch(f): |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
419 repo.ui.warn(_("pending changes to '%s'\n") % f) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
420 abort = not force |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
421 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
422 if abort: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
423 raise error.Abort(_('could not update sparseness due to pending ' |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
424 'changes')) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
425 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
426 # Calculate actions |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
427 dirstate = repo.dirstate |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
428 ctx = repo['.'] |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
429 added = [] |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
430 lookup = [] |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
431 dropped = [] |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
432 mf = ctx.manifest() |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
433 files = set(mf) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
434 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
435 actions = {} |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
436 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
437 for file in files: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
438 old = origsparsematch(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
439 new = sparsematch(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
440 # 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
|
441 # the dirstate yet. |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
442 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
|
443 fl = mf.flags(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
444 if repo.wvfs.exists(file): |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
445 actions[file] = ('e', (fl,), '') |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
446 lookup.append(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
447 else: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
448 actions[file] = ('g', (fl, False), '') |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
449 added.append(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
450 # 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
|
451 # the dirstate. |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
452 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
|
453 dropped.append(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
454 if file not in pending: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
455 actions[file] = ('r', [], '') |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
456 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
457 # 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
|
458 abort = False |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
459 for file in lookup: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
460 repo.ui.warn(_("pending changes to '%s'\n") % file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
461 abort = not force |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
462 if abort: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
463 raise error.Abort(_('cannot change sparseness due to pending ' |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
464 'changes (delete the files or use ' |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
465 '--force to bring them back dirty)')) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
466 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
467 # Check for files that were only in the dirstate. |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
468 for file, state in dirstate.iteritems(): |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
469 if not file in files: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
470 old = origsparsematch(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
471 new = sparsematch(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
472 if old and not new: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
473 dropped.append(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
474 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
475 # Apply changes to disk |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
476 typeactions = dict((m, []) for m in 'a f g am cd dc r dm dg m e k'.split()) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
477 for f, (m, args, msg) in actions.iteritems(): |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
478 if m not in typeactions: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
479 typeactions[m] = [] |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
480 typeactions[m].append((f, args, msg)) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
481 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
482 mergemod.applyupdates(repo, typeactions, repo[None], repo['.'], False) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
483 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
484 # Fix dirstate |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
485 for file in added: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
486 dirstate.normal(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
487 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
488 for file in dropped: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
489 dirstate.drop(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
490 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
491 for file in lookup: |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
492 # File exists on disk, and we're bringing it back in an unknown state. |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
493 dirstate.normallookup(file) |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
494 |
33d0859c37bd
sparse: move working directory refreshing into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33323
diff
changeset
|
495 return added, dropped, lookup |
33353
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
496 |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
497 def aftercommit(repo, node): |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
498 """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
|
499 # 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
|
500 # enabled. |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
501 ctx = repo[node] |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
502 |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
503 profiles = patternsforrev(repo, ctx.rev())[2] |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
504 |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
505 # 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
|
506 if profiles & set(ctx.files()): |
33353
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
507 origstatus = repo.status() |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
508 origsparsematch = matcher(repo) |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
509 refreshwdir(repo, origstatus, origsparsematch, force=True) |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
510 |
160efb559f67
sparse: move post commit actions into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33325
diff
changeset
|
511 prunetemporaryincludes(repo) |
33354
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
512 |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
513 def clearrules(repo, force=False): |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
514 """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
|
515 |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
516 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
|
517 directory is refreshed, as needed. |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
518 """ |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
519 with repo.wlock(): |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
520 raw = repo.vfs.tryread('sparse') |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
521 includes, excludes, profiles = parseconfig(repo.ui, raw) |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
522 |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
523 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
|
524 return |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
525 |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
526 oldstatus = repo.status() |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
527 oldmatch = matcher(repo) |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
528 writeconfig(repo, set(), set(), profiles) |
4695f1829045
sparse: move code for clearing rules to core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33353
diff
changeset
|
529 refreshwdir(repo, oldstatus, oldmatch, force=force) |
33355
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
530 |
33371
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
531 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
|
532 """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
|
533 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
534 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
|
535 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
|
536 """ |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
537 with repo.wlock(): |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
538 # read current configuration |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
539 raw = repo.vfs.tryread('sparse') |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
540 oincludes, oexcludes, oprofiles = parseconfig(repo.ui, raw) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
541 includes, excludes, profiles = map( |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
542 set, (oincludes, oexcludes, oprofiles)) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
543 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
544 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
|
545 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
546 # 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
|
547 # 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
|
548 changed = False |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
549 for p in paths: |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
550 with util.posixfile(util.expandpath(p)) as fh: |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
551 raw = fh.read() |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
552 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
553 iincludes, iexcludes, iprofiles = parseconfig(repo.ui, raw) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
554 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
|
555 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
|
556 excludes.update(iexcludes - aexcludes) |
33550
32f348d741e5
sparse: use set for capturing profiles
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33499
diff
changeset
|
557 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
|
558 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
|
559 changed = True |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
560 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
561 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
|
562 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
|
563 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
564 if changed: |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
565 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
|
566 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
|
567 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
|
568 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
569 oldstatus = repo.status() |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
570 oldsparsematch = matcher(repo) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
571 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
572 # TODO remove this try..except once the matcher integrates better |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
573 # with dirstate. We currently have to write the updated config |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
574 # because that will invalidate the matcher cache and force a |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
575 # re-read. We ideally want to update the cached matcher on the |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
576 # repo instance then flush the new config to disk once wdir is |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
577 # updated. But this requires massive rework to matcher() and its |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
578 # consumers. |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
579 writeconfig(repo, includes, excludes, profiles) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
580 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
581 try: |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
582 fcounts = map( |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
583 len, |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
584 refreshwdir(repo, oldstatus, oldsparsematch, force=force)) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
585 except Exception: |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
586 writeconfig(repo, oincludes, oexcludes, oprofiles) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
587 raise |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
588 |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
589 printchanges(repo.ui, opts, profilecount, includecount, excludecount, |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
590 *fcounts) |
c6415195fa78
sparse: move code for importing rules from files into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33370
diff
changeset
|
591 |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
592 def updateconfig(repo, pats, opts, include=False, exclude=False, reset=False, |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
593 delete=False, enableprofile=False, disableprofile=False, |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
594 force=False): |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
595 """Perform a sparse config update. |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
596 |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
597 Only one of the actions may be performed. |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
598 |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
599 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
|
600 """ |
33375
df6dd6d536bb
sparse: clean up updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33374
diff
changeset
|
601 with repo.wlock(): |
df6dd6d536bb
sparse: clean up updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33374
diff
changeset
|
602 oldmatcher = matcher(repo) |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
603 |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
604 raw = repo.vfs.tryread('sparse') |
33375
df6dd6d536bb
sparse: clean up updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33374
diff
changeset
|
605 oldinclude, oldexclude, oldprofiles = parseconfig(repo.ui, raw) |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
606 |
33376
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
607 if reset: |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
608 newinclude = set() |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
609 newexclude = set() |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
610 newprofiles = set() |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
611 else: |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
612 newinclude = set(oldinclude) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
613 newexclude = set(oldexclude) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
614 newprofiles = set(oldprofiles) |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
615 |
33376
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
616 oldstatus = repo.status() |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
617 |
33376
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
618 if any(pat.startswith('/') for pat in pats): |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
619 repo.ui.warn(_('warning: paths cannot start with /, ignoring: %s\n') |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
620 % ([pat for pat in pats if pat.startswith('/')])) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
621 elif include: |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
622 newinclude.update(pats) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
623 elif exclude: |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
624 newexclude.update(pats) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
625 elif enableprofile: |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
626 newprofiles.update(pats) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
627 elif disableprofile: |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
628 newprofiles.difference_update(pats) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
629 elif delete: |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
630 newinclude.difference_update(pats) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
631 newexclude.difference_update(pats) |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
632 |
33376
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
633 profilecount = (len(newprofiles - oldprofiles) - |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
634 len(oldprofiles - newprofiles)) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
635 includecount = (len(newinclude - oldinclude) - |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
636 len(oldinclude - newinclude)) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
637 excludecount = (len(newexclude - oldexclude) - |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
638 len(oldexclude - newexclude)) |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
639 |
33376
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
640 # TODO clean up this writeconfig() + try..except pattern once we can. |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
641 # See comment in importfromfiles() explaining it. |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
642 writeconfig(repo, newinclude, newexclude, newprofiles) |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
643 |
d5a38eae67e5
sparse: shorten try..except block in updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33375
diff
changeset
|
644 try: |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
645 fcounts = map( |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
646 len, |
33375
df6dd6d536bb
sparse: clean up updateconfig()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33374
diff
changeset
|
647 refreshwdir(repo, oldstatus, oldmatcher, force=force)) |
33374
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
648 |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
649 printchanges(repo.ui, opts, profilecount, includecount, |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
650 excludecount, *fcounts) |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
651 except Exception: |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
652 writeconfig(repo, oldinclude, oldexclude, oldprofiles) |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
653 raise |
4dc04cdf2520
sparse: move config updating function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33371
diff
changeset
|
654 |
33355
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
655 def printchanges(ui, opts, profilecount=0, includecount=0, excludecount=0, |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
656 added=0, dropped=0, conflicting=0): |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
657 """Print output summarizing sparse config changes.""" |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
658 with ui.formatter('sparse', opts) as fm: |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
659 fm.startitem() |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
660 fm.condwrite(ui.verbose, 'profiles_added', _('Profiles changed: %d\n'), |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
661 profilecount) |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
662 fm.condwrite(ui.verbose, 'include_rules_added', |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
663 _('Include rules changed: %d\n'), includecount) |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
664 fm.condwrite(ui.verbose, 'exclude_rules_added', |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
665 _('Exclude rules changed: %d\n'), excludecount) |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
666 |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
667 # 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
|
668 # 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
|
669 # 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
|
670 if not fm.isplain(): |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
671 fm.condwrite(ui.verbose, 'files_added', _('Files added: %d\n'), |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
672 added) |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
673 fm.condwrite(ui.verbose, 'files_dropped', _('Files dropped: %d\n'), |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
674 dropped) |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
675 fm.condwrite(ui.verbose, 'files_conflicting', |
9087f9997f42
sparse: move printing of sparse config changes function into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33354
diff
changeset
|
676 _('Files conflicting: %d\n'), conflicting) |