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')],