mercurial/sparse.py
changeset 33550 32f348d741e5
parent 33499 0407a51b9d8c
child 33551 1d1779734c99
equal deleted inserted replaced
33549:9a2ee9591acc 33550:32f348d741e5
    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()