mercurial/sparse.py
changeset 48737 a6efb9180764
parent 48713 5dfaca4464d1
child 48778 c4149a110b5f
equal deleted inserted replaced
48736:fd2cf9e0c64e 48737:a6efb9180764
   702         )
   702         )
   703 
   703 
   704 
   704 
   705 def updateconfig(
   705 def updateconfig(
   706     repo,
   706     repo,
   707     pats,
       
   708     opts,
   707     opts,
   709     include=False,
   708     include=(),
   710     exclude=False,
   709     exclude=(),
   711     reset=False,
   710     reset=False,
   712     delete=False,
   711     delete=(),
   713     enableprofile=False,
   712     enableprofile=(),
   714     disableprofile=False,
   713     disableprofile=(),
   715     force=False,
   714     force=False,
   716     usereporootpaths=False,
   715     usereporootpaths=False,
   717 ):
   716 ):
   718     """Perform a sparse config update.
   717     """Perform a sparse config update.
   719 
       
   720     Only one of the actions may be performed.
       
   721 
   718 
   722     The new config is written out and a working directory refresh is performed.
   719     The new config is written out and a working directory refresh is performed.
   723     """
   720     """
   724     with repo.wlock(), repo.lock(), repo.dirstate.parentchange():
   721     with repo.wlock(), repo.lock(), repo.dirstate.parentchange():
   725         raw = repo.vfs.tryread(b'sparse')
   722         raw = repo.vfs.tryread(b'sparse')
   734         else:
   731         else:
   735             newinclude = set(oldinclude)
   732             newinclude = set(oldinclude)
   736             newexclude = set(oldexclude)
   733             newexclude = set(oldexclude)
   737             newprofiles = set(oldprofiles)
   734             newprofiles = set(oldprofiles)
   738 
   735 
   739         if any(os.path.isabs(pat) for pat in pats):
   736         def normalize_pats(pats):
   740             raise error.Abort(_(b'paths cannot be absolute'))
   737             if any(os.path.isabs(pat) for pat in pats):
   741 
   738                 raise error.Abort(_(b'paths cannot be absolute'))
   742         if not usereporootpaths:
   739 
       
   740             if usereporootpaths:
       
   741                 return pats
       
   742 
   743             # let's treat paths as relative to cwd
   743             # let's treat paths as relative to cwd
   744             root, cwd = repo.root, repo.getcwd()
   744             root, cwd = repo.root, repo.getcwd()
   745             abspats = []
   745             abspats = []
   746             for kindpat in pats:
   746             for kindpat in pats:
   747                 kind, pat = matchmod._patsplit(kindpat, None)
   747                 kind, pat = matchmod._patsplit(kindpat, None)
   750                         root, cwd, pat
   750                         root, cwd, pat
   751                     )
   751                     )
   752                     abspats.append(ap)
   752                     abspats.append(ap)
   753                 else:
   753                 else:
   754                     abspats.append(kindpat)
   754                     abspats.append(kindpat)
   755             pats = abspats
   755             return abspats
   756 
   756 
   757         if include:
   757         include = normalize_pats(include)
   758             newinclude.update(pats)
   758         exclude = normalize_pats(exclude)
   759         elif exclude:
   759         delete = normalize_pats(delete)
   760             newexclude.update(pats)
   760         disableprofile = normalize_pats(disableprofile)
   761         elif enableprofile:
   761         enableprofile = normalize_pats(enableprofile)
   762             newprofiles.update(pats)
   762 
   763         elif disableprofile:
   763         newinclude.difference_update(delete)
   764             newprofiles.difference_update(pats)
   764         newexclude.difference_update(delete)
   765         elif delete:
   765         newprofiles.difference_update(disableprofile)
   766             newinclude.difference_update(pats)
   766         newinclude.update(include)
   767             newexclude.difference_update(pats)
   767         newprofiles.update(enableprofile)
       
   768         newexclude.update(exclude)
   768 
   769 
   769         profilecount = len(newprofiles - oldprofiles) - len(
   770         profilecount = len(newprofiles - oldprofiles) - len(
   770             oldprofiles - newprofiles
   771             oldprofiles - newprofiles
   771         )
   772         )
   772         includecount = len(newinclude - oldinclude) - len(
   773         includecount = len(newinclude - oldinclude) - len(