mercurial/scmutil.py
changeset 25467 f64dbe06f3d0
parent 25466 007a1d53f7c3
child 25629 52e5f68d8363
equal deleted inserted replaced
25466:007a1d53f7c3 25467:f64dbe06f3d0
   788                 ret.extend(globbed)
   788                 ret.extend(globbed)
   789                 continue
   789                 continue
   790         ret.append(kindpat)
   790         ret.append(kindpat)
   791     return ret
   791     return ret
   792 
   792 
   793 def matchandpats(ctx, pats=[], opts={}, globbed=False, default='relpath'):
   793 def matchandpats(ctx, pats=[], opts={}, globbed=False, default='relpath',
       
   794                  badfn=None):
   794     '''Return a matcher and the patterns that were used.
   795     '''Return a matcher and the patterns that were used.
   795     The matcher will warn about bad matches.'''
   796     The matcher will warn about bad matches, unless an alternate badfn callback
       
   797     is provided.'''
   796     if pats == ("",):
   798     if pats == ("",):
   797         pats = []
   799         pats = []
   798     if not globbed and default == 'relpath':
   800     if not globbed and default == 'relpath':
   799         pats = expandpats(pats or [])
   801         pats = expandpats(pats or [])
   800 
   802 
   801     def badfn(f, msg):
   803     def bad(f, msg):
   802         ctx.repo().ui.warn("%s: %s\n" % (m.rel(f), msg))
   804         ctx.repo().ui.warn("%s: %s\n" % (m.rel(f), msg))
       
   805 
       
   806     if badfn is None:
       
   807         badfn = bad
   803 
   808 
   804     m = ctx.match(pats, opts.get('include'), opts.get('exclude'),
   809     m = ctx.match(pats, opts.get('include'), opts.get('exclude'),
   805                   default, listsubrepos=opts.get('subrepos'), badfn=badfn)
   810                   default, listsubrepos=opts.get('subrepos'), badfn=badfn)
   806 
   811 
   807     if m.always():
   812     if m.always():
   808         pats = []
   813         pats = []
   809     return m, pats
   814     return m, pats
   810 
   815 
   811 def match(ctx, pats=[], opts={}, globbed=False, default='relpath'):
   816 def match(ctx, pats=[], opts={}, globbed=False, default='relpath', badfn=None):
   812     '''Return a matcher that will warn about bad matches.'''
   817     '''Return a matcher that will warn about bad matches.'''
   813     return matchandpats(ctx, pats, opts, globbed, default)[0]
   818     return matchandpats(ctx, pats, opts, globbed, default, badfn=badfn)[0]
   814 
   819 
   815 def matchall(repo):
   820 def matchall(repo):
   816     '''Return a matcher that will efficiently match everything.'''
   821     '''Return a matcher that will efficiently match everything.'''
   817     return matchmod.always(repo.root, repo.getcwd())
   822     return matchmod.always(repo.root, repo.getcwd())
   818 
   823 
   819 def matchfiles(repo, files):
   824 def matchfiles(repo, files, badfn=None):
   820     '''Return a matcher that will efficiently match exactly these files.'''
   825     '''Return a matcher that will efficiently match exactly these files.'''
   821     return matchmod.exact(repo.root, repo.getcwd(), files)
   826     return matchmod.exact(repo.root, repo.getcwd(), files, badfn=badfn)
   822 
   827 
   823 def addremove(repo, matcher, prefix, opts={}, dry_run=None, similarity=None):
   828 def addremove(repo, matcher, prefix, opts={}, dry_run=None, similarity=None):
   824     m = matcher
   829     m = matcher
   825     if dry_run is None:
   830     if dry_run is None:
   826         dry_run = opts.get('dry_run')
   831         dry_run = opts.get('dry_run')
   883     return ret
   888     return ret
   884 
   889 
   885 def marktouched(repo, files, similarity=0.0):
   890 def marktouched(repo, files, similarity=0.0):
   886     '''Assert that files have somehow been operated upon. files are relative to
   891     '''Assert that files have somehow been operated upon. files are relative to
   887     the repo root.'''
   892     the repo root.'''
   888     m = matchfiles(repo, files)
   893     m = matchfiles(repo, files, badfn=lambda x, y: rejected.append(x))
   889     rejected = []
   894     rejected = []
   890     m.bad = lambda x, y: rejected.append(x)
       
   891 
   895 
   892     added, unknown, deleted, removed, forgotten = _interestingfiles(repo, m)
   896     added, unknown, deleted, removed, forgotten = _interestingfiles(repo, m)
   893 
   897 
   894     if repo.ui.verbose:
   898     if repo.ui.verbose:
   895         unknownset = set(unknown + forgotten)
   899         unknownset = set(unknown + forgotten)