mercurial/commands.py
changeset 1582 63799b01985c
parent 1568 1d7d0c07e8f3
child 1586 5c5aaaa9ab6f
equal deleted inserted replaced
1568:1d7d0c07e8f3 1582:63799b01985c
    40         opts['exclude'] = [os.path.join(cwd, x) for x in opts['exclude']]
    40         opts['exclude'] = [os.path.join(cwd, x) for x in opts['exclude']]
    41         cwd = ''
    41         cwd = ''
    42     return util.cmdmatcher(repo.root, cwd, pats or ['.'], opts.get('include'),
    42     return util.cmdmatcher(repo.root, cwd, pats or ['.'], opts.get('include'),
    43                         opts.get('exclude'), head) + (cwd,)
    43                         opts.get('exclude'), head) + (cwd,)
    44 
    44 
    45 def makewalk(repo, pats, opts, head=''):
    45 def makewalk(repo, pats, opts, node=None, head=''):
    46     files, matchfn, anypats, cwd = matchpats(repo, pats, opts, head)
    46     files, matchfn, anypats, cwd = matchpats(repo, pats, opts, head)
    47     exact = dict(zip(files, files))
    47     exact = dict(zip(files, files))
    48     def walk():
    48     def walk():
    49         for src, fn in repo.walk(files=files, match=matchfn):
    49         for src, fn in repo.walk(node=node, files=files, match=matchfn):
    50             yield src, fn, util.pathto(cwd, fn), fn in exact
    50             yield src, fn, util.pathto(cwd, fn), fn in exact
    51     return files, matchfn, walk()
    51     return files, matchfn, walk()
    52 
    52 
    53 def walk(repo, pats, opts, head=''):
    53 def walk(repo, pats, opts, node=None, head=''):
    54     files, matchfn, results = makewalk(repo, pats, opts, head)
    54     files, matchfn, results = makewalk(repo, pats, opts, node, head)
    55     for r in results:
    55     for r in results:
    56         yield r
    56         yield r
    57 
    57 
    58 def walkchangerevs(ui, repo, pats, opts):
    58 def walkchangerevs(ui, repo, pats, opts):
    59     '''Iterate over files and the revs they changed in.
    59     '''Iterate over files and the revs they changed in.
   632     %p   root-relative path name of file being printed
   632     %p   root-relative path name of file being printed
   633     """
   633     """
   634     mf = {}
   634     mf = {}
   635     rev = opts['rev']
   635     rev = opts['rev']
   636     if rev:
   636     if rev:
   637         change = repo.changelog.read(repo.lookup(rev))
   637         node = repo.lookup(rev)
   638         mf = repo.manifest.read(change[0])
   638     else:
   639     for src, abs, rel, exact in walk(repo, (file1,) + pats, opts):
   639         node = repo.changelog.tip()
       
   640     change = repo.changelog.read(node)
       
   641     mf = repo.manifest.read(change[0])
       
   642     for src, abs, rel, exact in walk(repo, (file1,) + pats, opts, node):
   640         r = repo.file(abs)
   643         r = repo.file(abs)
   641         if rev:
   644         n = mf[abs]
   642             try:
       
   643                 n = mf[abs]
       
   644             except (hg.RepoError, KeyError):
       
   645                 try:
       
   646                     n = r.lookup(rev)
       
   647                 except KeyError, inst:
       
   648                     raise util.Abort(_('cannot find file %s in rev %s'), rel, rev)
       
   649         else:
       
   650             n = r.tip()
       
   651         fp = make_file(repo, r, opts['output'], node=n, pathname=abs)
   645         fp = make_file(repo, r, opts['output'], node=n, pathname=abs)
   652         fp.write(r.read(n))
   646         fp.write(r.read(n))
   653 
   647 
   654 def clone(ui, source, dest=None, **opts):
   648 def clone(ui, source, dest=None, **opts):
   655     """make a copy of an existing repository
   649     """make a copy of an existing repository