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