commands: migrate status and branch

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

commands: migrate status and branch

manifest hash: 7d893a81a81539173fc74d86152062a1a70bed13
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCnhESywK+sNU5EO8RAlBJAKCmv2gHefMOXfX/UUCy1tfV0cOqOQCfbeX8
oaT15B7GBL2lcalGrPXkzY8=
=8gVe
-----END PGP SIGNATURE-----
This commit is contained in:
mpm@selenic.com 2005-06-01 11:48:34 -08:00
parent ffc0d3cdc2
commit f1f83067d7
2 changed files with 39 additions and 23 deletions

27
hg
View File

@ -119,21 +119,11 @@ except:
ui = ui.ui(options["verbose"], options["debug"], options["quiet"],
not options["noninteractive"])
if cmd == "init":
repo = hg.repository(ui, ".", create=1)
try:
repo = hg.repository(ui=ui)
except IOError:
ui.warn("Unable to open repository\n")
sys.exit(0)
elif cmd == "branch" or cmd == "clone":
os.system("cp -al %s/.hg .hg" % args[0])
sys.exit(0)
elif cmd == "help":
help()
sys.exit(0)
else:
try:
repo = hg.repository(ui=ui)
except IOError:
ui.warn("Unable to open repository\n")
sys.exit(0)
relpath = None
if os.getcwd() != repo.root:
@ -221,15 +211,6 @@ elif cmd == "import" or cmd == "patch":
raise "patch failed!"
repo.commit(repo.current, files, text)
elif cmd == "status":
(c, a, d) = repo.diffdir(repo.root, repo.current)
if relpath:
(c, a, d) = map(lambda x: filterfiles(x, [ relpath ]), (c, a, d))
for f in c: print "C", f
for f in a: print "?", f
for f in d: print "R", f
elif cmd == "diff":
revs = []

View File

@ -3,6 +3,20 @@ from mercurial import fancyopts, ui, hg
class UnknownCommand(Exception): pass
def filterfiles(list, files):
l = [ x for x in list if x in files ]
for f in files:
if f[-1] != os.sep: f += os.sep
l += [ x for x in list if x.startswith(f) ]
return l
def relfilter(repo, args):
if os.getcwd() != repo.root:
p = os.getcwd()[len(repo.root) + 1: ]
return filterfiles(p, args)
return args
def relpath(repo, args):
if os.getcwd() != repo.root:
p = os.getcwd()[len(repo.root) + 1: ]
@ -49,6 +63,11 @@ def init(ui):
"""create a repository"""
hg.repository(ui, ".", create=1)
def branch(ui, path):
'''branch from a local repository'''
# this should eventually support remote repos
os.system("cp -al %s/.hg .hg" % path)
def checkout(u, repo, changeset=None):
'''checkout a given changeset or the current tip'''
node = repo.changelog.tip()
@ -98,11 +117,26 @@ def annotate(u, repo, *args, **ops):
for p,l in zip(zip(*pieces), lines):
u.write(" ".join(p) + ": " + l[1])
def status(ui, repo):
'''show changed files in the working directory
C = changed
A = added
R = removed
? = not tracked'''
(c, a, d) = repo.diffdir(repo.root, repo.current)
(c, a, d) = map(lambda x: relfilter(repo, x), (c, a, d))
for f in c: print "C", f
for f in a: print "?", f
for f in d: print "R", f
def undo(ui, repo):
repo.undo()
table = {
"init": (init, [], 'hg init'),
"branch|clone": (branch, [], 'hg branch [path]'),
"help": (help, [], 'hg help [command]'),
"checkout|co": (checkout, [], 'hg checkout [changeset]'),
"ann|annotate": (annotate,
@ -111,6 +145,7 @@ table = {
('n', 'number', None, 'show revision number'),
('c', 'changeset', None, 'show changeset')],
'hg annotate [-u] [-c] [-n] [-r id] [files]'),
"status": (status, [], 'hg status'),
"undo": (undo, [], 'hg undo'),
}