Mercurial > public > mercurial-scm > hg
comparison mercurial/commands.py @ 588:0c3bae18403b
[PATCH] hg revert
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
[PATCH] hg revert
From: Bryan O'Sullivan <bos@serpentine.com>
Add revert command.
manifest hash: 0094e6bf421f34bd0492a33f95400b1b095a6bdc
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCx2BaywK+sNU5EO8RAigMAKCrvgTtIDuirCsMVlbiTMqaJy3UNgCdEcTL
hMN1X8FZi6sH+NjUdr9sYBg=
=i58L
-----END PGP SIGNATURE-----
author | mpm@selenic.com |
---|---|
date | Sat, 02 Jul 2005 19:49:46 -0800 |
parents | df8a5a0098d4 |
children | 38d106db75bc |
comparison
equal
deleted
inserted
replaced
587:62a7b679a9ca | 588:0c3bae18403b |
---|---|
730 repo.recover() | 730 repo.recover() |
731 | 731 |
732 def remove(ui, repo, file, *files): | 732 def remove(ui, repo, file, *files): |
733 """remove the specified files on the next commit""" | 733 """remove the specified files on the next commit""" |
734 repo.remove(relpath(repo, (file,) + files)) | 734 repo.remove(relpath(repo, (file,) + files)) |
735 | |
736 def revert(ui, repo, *names, **opts): | |
737 """revert modified files or dirs back to their unmodified states""" | |
738 node = opts['rev'] and repo.lookup(opts['rev']) or repo.changelog.tip() | |
739 root = os.path.realpath(repo.root) | |
740 def trimpath(p): | |
741 p = os.path.realpath(p) | |
742 if p.startswith(root): | |
743 rest = p[len(root):] | |
744 if not rest: | |
745 return rest | |
746 if p.startswith(os.sep): | |
747 return rest[1:] | |
748 return p | |
749 relnames = map(trimpath, names or [os.getcwd()]) | |
750 chosen = {} | |
751 def choose(name): | |
752 def body(name): | |
753 for r in relnames: | |
754 if not name.startswith(r): continue | |
755 rest = name[len(r):] | |
756 if not rest: return r, True | |
757 depth = rest.count(os.sep) | |
758 if not r: | |
759 if depth == 0 or not opts['nonrecursive']: return r, True | |
760 elif rest[0] == os.sep: | |
761 if depth == 1 or not opts['nonrecursive']: return r, True | |
762 return None, False | |
763 relname, ret = body(name) | |
764 if ret: | |
765 chosen[relname] = 1 | |
766 return ret | |
767 | |
768 r = repo.update(node, False, True, choose, False) | |
769 for n in relnames: | |
770 if n not in chosen: | |
771 ui.warn('error: no matches for %s\n' % n) | |
772 r = 1 | |
773 sys.stdout.flush() | |
774 return r | |
735 | 775 |
736 def root(ui, repo): | 776 def root(ui, repo): |
737 """print the root (top) of the current working dir""" | 777 """print the root (top) of the current working dir""" |
738 ui.write(repo.root + "\n") | 778 ui.write(repo.root + "\n") |
739 | 779 |
887 ('t', 'text', "", 'commit text'), | 927 ('t', 'text', "", 'commit text'), |
888 ('l', 'logfile', "", 'commit text file')], | 928 ('l', 'logfile', "", 'commit text file')], |
889 'hg rawcommit [options] [files]'), | 929 'hg rawcommit [options] [files]'), |
890 "recover": (recover, [], "hg recover"), | 930 "recover": (recover, [], "hg recover"), |
891 "remove|rm": (remove, [], "hg remove [files]"), | 931 "remove|rm": (remove, [], "hg remove [files]"), |
932 "revert": (revert, | |
933 [("n", "nonrecursive", None, "don't recurse into subdirs"), | |
934 ("r", "rev", "", "revision")], | |
935 "hg revert [files|dirs]"), | |
892 "root": (root, [], "hg root"), | 936 "root": (root, [], "hg root"), |
893 "serve": (serve, [('p', 'port', 8000, 'listen port'), | 937 "serve": (serve, [('p', 'port', 8000, 'listen port'), |
894 ('a', 'address', '', 'interface address'), | 938 ('a', 'address', '', 'interface address'), |
895 ('n', 'name', os.getcwd(), 'repository name'), | 939 ('n', 'name', os.getcwd(), 'repository name'), |
896 ('t', 'templates', "", 'template map')], | 940 ('t', 'templates', "", 'template map')], |