mercurial/commands.py
changeset 213 d2172916ef6c
parent 212 48398a5353e3
child 214 2d60aa9bde0a
equal deleted inserted replaced
212:48398a5353e3 213:d2172916ef6c
     1 import os, re, traceback, sys
     1 import os, re, traceback, sys
     2 from mercurial import fancyopts, ui, hg
     2 from mercurial import fancyopts, ui, hg
     3 
     3 
     4 class UnknownCommand(Exception): pass
     4 class UnknownCommand(Exception): pass
       
     5 
       
     6 def filterfiles(list, files):
       
     7     l = [ x for x in list if x in files ]
       
     8 
       
     9     for f in files:
       
    10         if f[-1] != os.sep: f += os.sep
       
    11         l += [ x for x in list if x.startswith(f) ]
       
    12     return l
       
    13 
       
    14 def relfilter(repo, args):
       
    15     if os.getcwd() != repo.root:
       
    16         p = os.getcwd()[len(repo.root) + 1: ]
       
    17         return filterfiles(p, args)
       
    18     return args
     5 
    19 
     6 def relpath(repo, args):
    20 def relpath(repo, args):
     7     if os.getcwd() != repo.root:
    21     if os.getcwd() != repo.root:
     8         p = os.getcwd()[len(repo.root) + 1: ]
    22         p = os.getcwd()[len(repo.root) + 1: ]
     9         return [ os.path.join(p, x) for x in args ]
    23         return [ os.path.join(p, x) for x in args ]
    47 
    61 
    48 def init(ui):
    62 def init(ui):
    49     """create a repository"""
    63     """create a repository"""
    50     hg.repository(ui, ".", create=1)
    64     hg.repository(ui, ".", create=1)
    51 
    65 
       
    66 def branch(ui, path):
       
    67     '''branch from a local repository'''
       
    68     # this should eventually support remote repos
       
    69     os.system("cp -al %s/.hg .hg" % path)
       
    70 
    52 def checkout(u, repo, changeset=None):
    71 def checkout(u, repo, changeset=None):
    53     '''checkout a given changeset or the current tip'''
    72     '''checkout a given changeset or the current tip'''
    54     node = repo.changelog.tip()
    73     node = repo.changelog.tip()
    55     if changeset:
    74     if changeset:
    56         node = repo.lookup(changeset)
    75         node = repo.lookup(changeset)
    96                 pieces.append([ "%*s" % (m, x) for x in l])
   115                 pieces.append([ "%*s" % (m, x) for x in l])
    97 
   116 
    98         for p,l in zip(zip(*pieces), lines):
   117         for p,l in zip(zip(*pieces), lines):
    99             u.write(" ".join(p) + ": " + l[1])
   118             u.write(" ".join(p) + ": " + l[1])
   100 
   119 
       
   120 def status(ui, repo):
       
   121     '''show changed files in the working directory
       
   122 
       
   123 C = changed
       
   124 A = added
       
   125 R = removed
       
   126 ? = not tracked'''
       
   127     (c, a, d) = repo.diffdir(repo.root, repo.current)
       
   128     (c, a, d) = map(lambda x: relfilter(repo, x), (c, a, d))
       
   129 
       
   130     for f in c: print "C", f
       
   131     for f in a: print "?", f
       
   132     for f in d: print "R", f
       
   133 
   101 def undo(ui, repo):
   134 def undo(ui, repo):
   102     repo.undo()
   135     repo.undo()
   103 
   136 
   104 table = {
   137 table = {
   105     "init": (init, [], 'hg init'),
   138     "init": (init, [], 'hg init'),
       
   139     "branch|clone": (branch, [], 'hg branch [path]'),
   106     "help": (help, [], 'hg help [command]'),
   140     "help": (help, [], 'hg help [command]'),
   107     "checkout|co": (checkout, [], 'hg checkout [changeset]'),
   141     "checkout|co": (checkout, [], 'hg checkout [changeset]'),
   108     "ann|annotate": (annotate,
   142     "ann|annotate": (annotate,
   109                      [('r', 'revision', '', 'revision'),
   143                      [('r', 'revision', '', 'revision'),
   110                       ('u', 'user', None, 'show user'),
   144                       ('u', 'user', None, 'show user'),
   111                       ('n', 'number', None, 'show revision number'),
   145                       ('n', 'number', None, 'show revision number'),
   112                       ('c', 'changeset', None, 'show changeset')],
   146                       ('c', 'changeset', None, 'show changeset')],
   113                      'hg annotate [-u] [-c] [-n] [-r id] [files]'),
   147                      'hg annotate [-u] [-c] [-n] [-r id] [files]'),
       
   148     "status": (status, [], 'hg status'),
   114     "undo": (undo, [], 'hg undo'),
   149     "undo": (undo, [], 'hg undo'),
   115     }
   150     }
   116 
   151 
   117 norepo = "init branch help"
   152 norepo = "init branch help"
   118 
   153