mercurial/commands.py
changeset 624 876333a295ff
parent 618 4051b78c53c7
child 625 978011cf5279
equal deleted inserted replaced
623:314867960a4a 624:876333a295ff
     7 
     7 
     8 from demandload import *
     8 from demandload import *
     9 demandload(globals(), "os re sys signal")
     9 demandload(globals(), "os re sys signal")
    10 demandload(globals(), "fancyopts ui hg util")
    10 demandload(globals(), "fancyopts ui hg util")
    11 demandload(globals(), "hgweb mdiff random signal time traceback")
    11 demandload(globals(), "hgweb mdiff random signal time traceback")
    12 demandload(globals(), "errno socket version")
    12 demandload(globals(), "errno socket version struct")
    13 
    13 
    14 class UnknownCommand(Exception): pass
    14 class UnknownCommand(Exception): pass
    15 
    15 
    16 def filterfiles(filters, files):
    16 def filterfiles(filters, files):
    17     l = [ x for x in files if x in filters ]
    17     l = [ x for x in files if x in filters ]
   821     """print the root (top) of the current working dir"""
   821     """print the root (top) of the current working dir"""
   822     ui.write(repo.root + "\n")
   822     ui.write(repo.root + "\n")
   823 
   823 
   824 def serve(ui, repo, **opts):
   824 def serve(ui, repo, **opts):
   825     """export the repository via HTTP"""
   825     """export the repository via HTTP"""
       
   826 
       
   827     if opts["stdio"]:
       
   828         def getarg():
       
   829             argline = sys.stdin.readline()[:-1]
       
   830             arg, l = argline.split()
       
   831             val = sys.stdin.read(int(l))
       
   832             return arg, val
       
   833         def respond(v):
       
   834             sys.stdout.write("%d\n" % len(v))
       
   835             sys.stdout.write(v)
       
   836             sys.stdout.flush()
       
   837 
       
   838         while 1:
       
   839             cmd = sys.stdin.readline()[:-1]
       
   840             if cmd == '':
       
   841                 return
       
   842             if cmd == "heads":
       
   843                 h = repo.heads()
       
   844                 respond(" ".join(map(hg.hex, h)) + "\n")
       
   845             elif cmd == "branches":
       
   846                 arg, nodes = getarg()
       
   847                 nodes = map(hg.bin, nodes.split(" "))
       
   848                 r = []
       
   849                 for b in repo.branches(nodes):
       
   850                     r.append(" ".join(map(hg.hex, b)) + "\n")
       
   851                 respond("".join(r))
       
   852             elif cmd == "between":
       
   853                 arg, pairs = getarg()
       
   854                 pairs = [ map(hg.bin, p.split("-")) for p in pairs.split(" ") ]
       
   855                 r = []
       
   856                 for b in repo.between(pairs):
       
   857                     r.append(" ".join(map(hg.hex, b)) + "\n")
       
   858                 respond("".join(r))
       
   859             elif cmd == "changegroup":
       
   860                 nodes = []
       
   861                 arg, roots = getarg()
       
   862                 nodes = map(hg.bin, roots.split(" "))
       
   863 
       
   864                 b = []
       
   865                 t = 0
       
   866                 for chunk in repo.changegroup(nodes):
       
   867                     t += len(chunk)
       
   868                     b.append(chunk)
       
   869                     if t > 4096:
       
   870                         sys.stdout.write(struct.pack(">l", t))
       
   871                         for c in b:
       
   872                             sys.stdout.write(c)
       
   873                         t = 0
       
   874                         b = []
       
   875 
       
   876                 sys.stdout.write(struct.pack(">l", t))
       
   877                 for c in b:
       
   878                     sys.stdout.write(c)
       
   879 
       
   880                 sys.stdout.write(struct.pack(">l", -1))
       
   881                 sys.stdout.flush()
       
   882 
   826     def openlog(opt, default):
   883     def openlog(opt, default):
   827         if opts[opt] and opts[opt] != '-': return open(opts[opt], 'w')
   884         if opts[opt] and opts[opt] != '-': return open(opts[opt], 'w')
   828         else: return default
   885         else: return default
       
   886 
   829     httpd = hgweb.create_server(repo.root, opts["name"], opts["templates"],
   887     httpd = hgweb.create_server(repo.root, opts["name"], opts["templates"],
   830                                 opts["address"], opts["port"],
   888                                 opts["address"], opts["port"],
   831                                 openlog('accesslog', sys.stdout),
   889                                 openlog('accesslog', sys.stdout),
   832                                 openlog('errorlog', sys.stderr))
   890                                 openlog('errorlog', sys.stderr))
   833     if ui.verbose:
   891     if ui.verbose:
  1015     "^serve": (serve, [('A', 'accesslog', '', 'access log file'),
  1073     "^serve": (serve, [('A', 'accesslog', '', 'access log file'),
  1016                        ('E', 'errorlog', '', 'error log file'),
  1074                        ('E', 'errorlog', '', 'error log file'),
  1017                        ('p', 'port', 8000, 'listen port'),
  1075                        ('p', 'port', 8000, 'listen port'),
  1018                        ('a', 'address', '', 'interface address'),
  1076                        ('a', 'address', '', 'interface address'),
  1019                        ('n', 'name', os.getcwd(), 'repository name'),
  1077                        ('n', 'name', os.getcwd(), 'repository name'),
       
  1078                        ('', 'stdio', None, 'for remote clients'),
  1020                        ('t', 'templates', "", 'template map')],
  1079                        ('t', 'templates', "", 'template map')],
  1021               "hg serve [options]"),
  1080               "hg serve [options]"),
  1022     "^status": (status, [], 'hg status'),
  1081     "^status": (status, [], 'hg status'),
  1023     "tag": (tag,  [('l', 'local', None, 'make the tag local'),
  1082     "tag": (tag,  [('l', 'local', None, 'make the tag local'),
  1024                    ('t', 'text', "", 'commit text'),
  1083                    ('t', 'text', "", 'commit text'),