equal
deleted
inserted
replaced
32 Returns a tuple of includes, excludes, and profiles. |
32 Returns a tuple of includes, excludes, and profiles. |
33 """ |
33 """ |
34 includes = set() |
34 includes = set() |
35 excludes = set() |
35 excludes = set() |
36 current = includes |
36 current = includes |
37 profiles = [] |
37 profiles = set() |
38 for line in raw.split('\n'): |
38 for line in raw.split('\n'): |
39 line = line.strip() |
39 line = line.strip() |
40 if not line or line.startswith('#'): |
40 if not line or line.startswith('#'): |
41 # empty or comment line, skip |
41 # empty or comment line, skip |
42 continue |
42 continue |
43 elif line.startswith('%include '): |
43 elif line.startswith('%include '): |
44 line = line[9:].strip() |
44 line = line[9:].strip() |
45 if line: |
45 if line: |
46 profiles.append(line) |
46 profiles.add(line) |
47 elif line == '[include]': |
47 elif line == '[include]': |
48 if current != includes: |
48 if current != includes: |
49 # TODO pass filename into this API so we can report it. |
49 # TODO pass filename into this API so we can report it. |
50 raise error.Abort(_('sparse config cannot have includes ' + |
50 raise error.Abort(_('sparse config cannot have includes ' + |
51 'after excludes')) |
51 'after excludes')) |
74 Returns a tuple of iterables representing includes, excludes, and |
74 Returns a tuple of iterables representing includes, excludes, and |
75 patterns. |
75 patterns. |
76 """ |
76 """ |
77 # Feature isn't enabled. No-op. |
77 # Feature isn't enabled. No-op. |
78 if not enabled: |
78 if not enabled: |
79 return set(), set(), [] |
79 return set(), set(), set() |
80 |
80 |
81 raw = repo.vfs.tryread('sparse') |
81 raw = repo.vfs.tryread('sparse') |
82 if not raw: |
82 if not raw: |
83 return set(), set(), [] |
83 return set(), set(), set() |
84 |
84 |
85 if rev is None: |
85 if rev is None: |
86 raise error.Abort(_('cannot parse sparse patterns from working ' |
86 raise error.Abort(_('cannot parse sparse patterns from working ' |
87 'directory')) |
87 'directory')) |
88 |
88 |
113 continue |
113 continue |
114 |
114 |
115 pincludes, pexcludes, subprofs = parseconfig(repo.ui, raw) |
115 pincludes, pexcludes, subprofs = parseconfig(repo.ui, raw) |
116 includes.update(pincludes) |
116 includes.update(pincludes) |
117 excludes.update(pexcludes) |
117 excludes.update(pexcludes) |
118 for subprofile in subprofs: |
118 profiles.update(subprofs) |
119 profiles.append(subprofile) |
|
120 |
119 |
121 profiles = visited |
120 profiles = visited |
122 |
121 |
123 if includes: |
122 if includes: |
124 includes.add('.hg*') |
123 includes.add('.hg*') |
140 |
139 |
141 for rev in revs: |
140 for rev in revs: |
142 includes, excludes, profiles = patternsforrev(repo, rev) |
141 includes, excludes, profiles = patternsforrev(repo, rev) |
143 allincludes |= includes |
142 allincludes |= includes |
144 allexcludes |= excludes |
143 allexcludes |= excludes |
145 allprofiles |= set(profiles) |
144 allprofiles |= profiles |
146 |
145 |
147 return allincludes, allexcludes, allprofiles |
146 return allincludes, allexcludes, allprofiles |
148 |
147 |
149 def configsignature(repo, includetemp=True): |
148 def configsignature(repo, includetemp=True): |
150 """Obtain the signature string for the current sparse configuration. |
149 """Obtain the signature string for the current sparse configuration. |
502 ctx = repo[node] |
501 ctx = repo[node] |
503 |
502 |
504 profiles = patternsforrev(repo, ctx.rev())[2] |
503 profiles = patternsforrev(repo, ctx.rev())[2] |
505 |
504 |
506 # profiles will only have data if sparse is enabled. |
505 # profiles will only have data if sparse is enabled. |
507 if set(profiles) & set(ctx.files()): |
506 if profiles & set(ctx.files()): |
508 origstatus = repo.status() |
507 origstatus = repo.status() |
509 origsparsematch = matcher(repo) |
508 origsparsematch = matcher(repo) |
510 refreshwdir(repo, origstatus, origsparsematch, force=True) |
509 refreshwdir(repo, origstatus, origsparsematch, force=True) |
511 |
510 |
512 prunetemporaryincludes(repo) |
511 prunetemporaryincludes(repo) |
553 |
552 |
554 iincludes, iexcludes, iprofiles = parseconfig(repo.ui, raw) |
553 iincludes, iexcludes, iprofiles = parseconfig(repo.ui, raw) |
555 oldsize = len(includes) + len(excludes) + len(profiles) |
554 oldsize = len(includes) + len(excludes) + len(profiles) |
556 includes.update(iincludes - aincludes) |
555 includes.update(iincludes - aincludes) |
557 excludes.update(iexcludes - aexcludes) |
556 excludes.update(iexcludes - aexcludes) |
558 profiles.update(set(iprofiles) - aprofiles) |
557 profiles.update(iprofiles - aprofiles) |
559 if len(includes) + len(excludes) + len(profiles) > oldsize: |
558 if len(includes) + len(excludes) + len(profiles) > oldsize: |
560 changed = True |
559 changed = True |
561 |
560 |
562 profilecount = includecount = excludecount = 0 |
561 profilecount = includecount = excludecount = 0 |
563 fcounts = (0, 0, 0) |
562 fcounts = (0, 0, 0) |
602 with repo.wlock(): |
601 with repo.wlock(): |
603 oldmatcher = matcher(repo) |
602 oldmatcher = matcher(repo) |
604 |
603 |
605 raw = repo.vfs.tryread('sparse') |
604 raw = repo.vfs.tryread('sparse') |
606 oldinclude, oldexclude, oldprofiles = parseconfig(repo.ui, raw) |
605 oldinclude, oldexclude, oldprofiles = parseconfig(repo.ui, raw) |
607 oldprofiles = set(oldprofiles) |
|
608 |
606 |
609 if reset: |
607 if reset: |
610 newinclude = set() |
608 newinclude = set() |
611 newexclude = set() |
609 newexclude = set() |
612 newprofiles = set() |
610 newprofiles = set() |