mercurial/commands.py
changeset 884 087771ebe2e6
parent 883 63ca8a68d59e
child 885 6594ba2a0f51
child 886 509de8ab6f31
equal deleted inserted replaced
883:63ca8a68d59e 884:087771ebe2e6
    38 
    38 
    39 def matchpats(repo, cwd, pats = [], opts = {}, head = ''):
    39 def matchpats(repo, cwd, pats = [], opts = {}, head = ''):
    40     return util.matcher(repo, cwd, pats or ['.'], opts.get('include'),
    40     return util.matcher(repo, cwd, pats or ['.'], opts.get('include'),
    41                         opts.get('exclude'), head)
    41                         opts.get('exclude'), head)
    42 
    42 
    43 def pathto(n1, n2):
       
    44     '''return the relative path from one place to another'''
       
    45     if not n1: return n2
       
    46     a, b = n1.split(os.sep), n2.split(os.sep)
       
    47     a.reverse(), b.reverse()
       
    48     while a and b and a[-1] == b[-1]:
       
    49         a.pop(), b.pop()
       
    50     b.reverse()
       
    51     return os.sep.join((['..'] * len(a)) + b)
       
    52 
       
    53 def makewalk(repo, pats, opts, head = ''):
    43 def makewalk(repo, pats, opts, head = ''):
    54     cwd = repo.getcwd()
    44     cwd = repo.getcwd()
    55     files, matchfn = matchpats(repo, cwd, pats, opts, head)
    45     files, matchfn = matchpats(repo, cwd, pats, opts, head)
    56     def walk():
    46     def walk():
    57         for src, fn in repo.walk(files = files, match = matchfn):
    47         for src, fn in repo.walk(files = files, match = matchfn):
    58             yield src, fn, pathto(cwd, fn)
    48             yield src, fn, util.pathto(cwd, fn)
    59     return files, matchfn, walk()
    49     return files, matchfn, walk()
    60 
    50 
    61 def walk(repo, pats, opts, head = ''):
    51 def walk(repo, pats, opts, head = ''):
    62     files, matchfn, results = makewalk(repo, pats, opts, head)
    52     files, matchfn, results = makewalk(repo, pats, opts, head)
    63     for r in results: yield r
    53     for r in results: yield r
  1076     ? = not tracked
  1066     ? = not tracked
  1077     '''
  1067     '''
  1078 
  1068 
  1079     cwd = repo.getcwd()
  1069     cwd = repo.getcwd()
  1080     files, matchfn = matchpats(repo, cwd, pats, opts)
  1070     files, matchfn = matchpats(repo, cwd, pats, opts)
  1081     (c, a, d, u) = [[pathto(cwd, x) for x in n]
  1071     (c, a, d, u) = [[util.pathto(cwd, x) for x in n]
  1082                     for n in repo.changes(files=files, match=matchfn)]
  1072                     for n in repo.changes(files=files, match=matchfn)]
  1083 
  1073 
  1084     changetypes = [('modified', 'M', c),
  1074     changetypes = [('modified', 'M', c),
  1085                    ('added', 'A', a),
  1075                    ('added', 'A', a),
  1086                    ('removed', 'R', d),
  1076                    ('removed', 'R', d),