hg
changeset 248 b7645b3c86ff
parent 247 863b508c5b36
child 249 619e775aa7f9
equal deleted inserted replaced
247:863b508c5b36 248:b7645b3c86ff
    15 #    psyco.full()
    15 #    psyco.full()
    16 # except:
    16 # except:
    17 #    pass
    17 #    pass
    18 
    18 
    19 import sys
    19 import sys
    20 from mercurial import hg, fancyopts, ui, commands
    20 from mercurial import commands
    21 
    21 
    22 try:
    22 sys.exit(commands.dispatch(sys.argv[1:]))
    23     sys.exit(commands.dispatch(sys.argv[1:]))
       
    24 except commands.UnknownCommand:
       
    25     # fall through
       
    26     pass
       
    27 
    23 
    28 options = {}
       
    29 opts = [('v', 'verbose', None, 'verbose'),
       
    30         ('d', 'debug', None, 'debug'),
       
    31         ('q', 'quiet', None, 'quiet'),
       
    32         ('y', 'noninteractive', None, 'run non-interactively'),
       
    33         ]
       
    34 
       
    35 args = fancyopts.fancyopts(sys.argv[1:], opts, options,
       
    36                            'hg [options] <command> [command options] [files]')
       
    37 
       
    38 try:
       
    39     cmd = args[0]
       
    40     args = args[1:]
       
    41 except:
       
    42     cmd = "help"
       
    43 
       
    44 ui = ui.ui(options["verbose"], options["debug"], options["quiet"],
       
    45            not options["noninteractive"])
       
    46     
       
    47 try:
       
    48     repo = hg.repository(ui=ui)
       
    49 except IOError:
       
    50     ui.warn("Unable to open repository\n")
       
    51     sys.exit(0)
       
    52 
       
    53 if cmd == "debugchangegroup":
       
    54     newer = repo.newer(map(repo.lookup, args))
       
    55     for chunk in repo.changegroup(newer):
       
    56         sys.stdout.write(chunk)
       
    57 
       
    58 elif cmd == "debugaddchangegroup":
       
    59     data = sys.stdin.read()
       
    60     repo.addchangegroup(data)
       
    61 
       
    62 elif cmd == "dump":
       
    63     if args:
       
    64         r = repo.file(args[0])
       
    65         n = r.tip()
       
    66         if len(args) > 1: n = r.lookup(args[1])
       
    67         sys.stdout.write(r.read(n))
       
    68     else:
       
    69         print "missing filename"
       
    70 
       
    71 elif cmd == "dumpmanifest":
       
    72     n = repo.manifest.tip()
       
    73     if len(args) > 0:
       
    74         n = repo.manifest.lookup(args[0])
       
    75     m = repo.manifest.read(n)
       
    76     files = m.keys()
       
    77     files.sort()
       
    78 
       
    79     for f in files:
       
    80         print hg.hex(m[f]), f
       
    81 
       
    82 elif cmd == "debugindex":
       
    83     if ".hg" not in args[0]:
       
    84         args[0] = ".hg/data/" + repo.file(args[0]).encodepath(args[0]) + "i"
       
    85     
       
    86     r = hg.revlog(open, args[0], "")
       
    87     print "   rev    offset  length   base linkrev"+\
       
    88           " p1           p2           nodeid"
       
    89     for i in range(r.count()):
       
    90         e = r.index[i]
       
    91         print "% 6d % 9d % 7d % 6d % 7d %s.. %s.. %s.." % (
       
    92             i, e[0], e[1], e[2], e[3],
       
    93             hg.hex(e[4][:5]), hg.hex(e[5][:5]), hg.hex(e[6][:5]))
       
    94 
       
    95 elif cmd == "debugindexdot":
       
    96     if ".hg" not in args[0]:
       
    97         args[0] = ".hg/data/" + repo.file(args[0]).encodepath(args[0]) + "i"
       
    98 
       
    99     r = hg.revlog(open, args[0], "")
       
   100     print "digraph G {"
       
   101     for i in range(r.count()):
       
   102         e = r.index[i]
       
   103         print "\t%d -> %d" % (r.rev(e[4]), i)
       
   104         if e[5] != hg.nullid:
       
   105             print "\t%d -> %d" % (r.rev(e[5]), i)
       
   106     print "}"
       
   107 
       
   108 elif cmd == "tags":
       
   109     repo.lookup(0) # prime the cache
       
   110     i = repo.tags.items()
       
   111     i.sort()
       
   112     for k, n in i:
       
   113         try:
       
   114             r = repo.changelog.rev(n)
       
   115         except KeyError:
       
   116             r = "?"
       
   117         print "%-30s %5d:%s" % (k, repo.changelog.rev(n), hg.hex(n))
       
   118 
       
   119 else:
       
   120     if cmd: ui.warn("unknown command\n\n")
       
   121     sys.exit(1)