mercurial/revset.py
branchstable
changeset 15964 6e37b8282aa2
parent 15949 d5edbbf55a75
child 15965 57738b9130ae
equal deleted inserted replaced
15963:042e84e39dee 15964:6e37b8282aa2
   294         b.add(repo[r].branch())
   294         b.add(repo[r].branch())
   295     s = set(s)
   295     s = set(s)
   296     return [r for r in subset if r in s or repo[r].branch() in b]
   296     return [r for r in subset if r in s or repo[r].branch() in b]
   297 
   297 
   298 def checkstatus(repo, subset, pat, field):
   298 def checkstatus(repo, subset, pat, field):
   299     m = matchmod.match(repo.root, repo.getcwd(), [pat])
   299     m = None
   300     s = []
   300     s = []
   301     fast = (m.files() == [pat])
   301     fast = not matchmod.patkind(pat)
   302     for r in subset:
   302     for r in subset:
   303         c = repo[r]
   303         c = repo[r]
   304         if fast:
   304         if fast:
   305             if pat not in c.files():
   305             if pat not in c.files():
   306                 continue
   306                 continue
   307         else:
   307         else:
       
   308             if not m or matchmod.patkind(pat) == 'set':
       
   309                 m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=c)
   308             for f in c.files():
   310             for f in c.files():
   309                 if m(f):
   311                 if m(f):
   310                     break
   312                     break
   311             else:
   313             else:
   312                 continue
   314                 continue
   352     Revision contains a file matching pattern. See :hg:`help patterns`
   354     Revision contains a file matching pattern. See :hg:`help patterns`
   353     for information about file patterns.
   355     for information about file patterns.
   354     """
   356     """
   355     # i18n: "contains" is a keyword
   357     # i18n: "contains" is a keyword
   356     pat = getstring(x, _("contains requires a pattern"))
   358     pat = getstring(x, _("contains requires a pattern"))
   357     m = matchmod.match(repo.root, repo.getcwd(), [pat])
   359     m = None
   358     s = []
   360     s = []
   359     if m.files() == [pat]:
   361     if not matchmod.patkind(pat):
   360         for r in subset:
   362         for r in subset:
   361             if pat in repo[r]:
   363             if pat in repo[r]:
   362                 s.append(r)
   364                 s.append(r)
   363     else:
   365     else:
   364         for r in subset:
   366         for r in subset:
   365             for f in repo[r].manifest():
   367             c = repo[r]
       
   368             if not m or matchmod.patkind(pat) == 'set':
       
   369                 m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=c)
       
   370             for f in c.manifest():
   366                 if m(f):
   371                 if m(f):
   367                     s.append(r)
   372                     s.append(r)
   368                     break
   373                     break
   369     return s
   374     return s
   370 
   375 
   410     """``filelog(pattern)``
   415     """``filelog(pattern)``
   411     Changesets connected to the specified filelog.
   416     Changesets connected to the specified filelog.
   412     """
   417     """
   413 
   418 
   414     pat = getstring(x, _("filelog requires a pattern"))
   419     pat = getstring(x, _("filelog requires a pattern"))
   415     m = matchmod.match(repo.root, repo.getcwd(), [pat], default='relpath')
   420     m = matchmod.match(repo.root, repo.getcwd(), [pat], default='relpath',
       
   421                        ctx=repo[None])
   416     s = set()
   422     s = set()
   417 
   423 
   418     if not m.anypats():
   424     if not matchmod.patkind(pat):
   419         for f in m.files():
   425         for f in m.files():
   420             fl = repo.file(f)
   426             fl = repo.file(f)
   421             for fr in fl:
   427             for fr in fl:
   422                 s.add(fl.linkrev(fr))
   428                 s.add(fl.linkrev(fr))
   423     else:
   429     else:
   498     """``file(pattern)``
   504     """``file(pattern)``
   499     Changesets affecting files matched by pattern.
   505     Changesets affecting files matched by pattern.
   500     """
   506     """
   501     # i18n: "file" is a keyword
   507     # i18n: "file" is a keyword
   502     pat = getstring(x, _("file requires a pattern"))
   508     pat = getstring(x, _("file requires a pattern"))
   503     m = matchmod.match(repo.root, repo.getcwd(), [pat])
   509     m = None
   504     s = []
   510     s = []
   505     for r in subset:
   511     for r in subset:
   506         for f in repo[r].files():
   512         c = repo[r]
       
   513         if not m or matchmod.patkind(pat) == 'set':
       
   514             m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=c)
       
   515         for f in c.files():
   507             if m(f):
   516             if m(f):
   508                 s.append(r)
   517                 s.append(r)
   509                 break
   518                 break
   510     return s
   519     return s
   511 
   520