#!/usr/bin/env python # # mercurial - a minimal scalable distributed SCM # v0.5b "katje" # # Copyright 2005 Matt Mackall # # This software may be used and distributed according to the terms # of the GNU General Public License, incorporated herein by reference. # the psyco compiler makes commits a bit faster # and makes changegroup merge about 20 times slower! # try: # import psyco # psyco.full() # except: # pass import sys from mercurial import hg, fancyopts, ui, commands try: sys.exit(commands.dispatch(sys.argv[1:])) except commands.UnknownCommand: # fall through pass options = {} opts = [('v', 'verbose', None, 'verbose'), ('d', 'debug', None, 'debug'), ('q', 'quiet', None, 'quiet'), ('y', 'noninteractive', None, 'run non-interactively'), ] args = fancyopts.fancyopts(sys.argv[1:], opts, options, 'hg [options] [command options] [files]') try: cmd = args[0] args = args[1:] except: cmd = "help" ui = ui.ui(options["verbose"], options["debug"], options["quiet"], not options["noninteractive"]) try: repo = hg.repository(ui=ui) except IOError: ui.warn("Unable to open repository\n") sys.exit(0) if cmd == "debugchangegroup": newer = repo.newer(map(repo.lookup, args)) for chunk in repo.changegroup(newer): sys.stdout.write(chunk) elif cmd == "debugaddchangegroup": data = sys.stdin.read() repo.addchangegroup(data) elif cmd == "dump": if args: r = repo.file(args[0]) n = r.tip() if len(args) > 1: n = r.lookup(args[1]) sys.stdout.write(r.read(n)) else: print "missing filename" elif cmd == "dumpmanifest": n = repo.manifest.tip() if len(args) > 0: n = repo.manifest.lookup(args[0]) m = repo.manifest.read(n) files = m.keys() files.sort() for f in files: print hg.hex(m[f]), f elif cmd == "debugindex": if ".hg" not in args[0]: args[0] = ".hg/data/" + repo.file(args[0]).encodepath(args[0]) + "i" r = hg.revlog(open, args[0], "") print " rev offset length base linkrev"+\ " p1 p2 nodeid" for i in range(r.count()): e = r.index[i] print "% 6d % 9d % 7d % 6d % 7d %s.. %s.. %s.." % ( i, e[0], e[1], e[2], e[3], hg.hex(e[4][:5]), hg.hex(e[5][:5]), hg.hex(e[6][:5])) elif cmd == "debugindexdot": if ".hg" not in args[0]: args[0] = ".hg/data/" + repo.file(args[0]).encodepath(args[0]) + "i" r = hg.revlog(open, args[0], "") print "digraph G {" for i in range(r.count()): e = r.index[i] print "\t%d -> %d" % (r.rev(e[4]), i) if e[5] != hg.nullid: print "\t%d -> %d" % (r.rev(e[5]), i) print "}" elif cmd == "tags": repo.lookup(0) # prime the cache i = repo.tags.items() i.sort() for k, n in i: try: r = repo.changelog.rev(n) except KeyError: r = "?" print "%-30s %5d:%s" % (k, repo.changelog.rev(n), hg.hex(n)) else: if cmd: ui.warn("unknown command\n\n") sys.exit(1)