Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 2396:8d44649df03b
refactor ssh server.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Sun, 04 Jun 2006 10:26:05 -0700 |
parents | 8238a3f039e6 |
children | e9d402506514 |
comparison
equal
deleted
inserted
replaced
2394:a8f1049d1d2d | 2396:8d44649df03b |
---|---|
11 demandload(globals(), "os re sys signal shutil imp urllib pdb") | 11 demandload(globals(), "os re sys signal shutil imp urllib pdb") |
12 demandload(globals(), "fancyopts ui hg util lock revlog templater bundlerepo") | 12 demandload(globals(), "fancyopts ui hg util lock revlog templater bundlerepo") |
13 demandload(globals(), "fnmatch mdiff random signal tempfile time") | 13 demandload(globals(), "fnmatch mdiff random signal tempfile time") |
14 demandload(globals(), "traceback errno socket version struct atexit sets bz2") | 14 demandload(globals(), "traceback errno socket version struct atexit sets bz2") |
15 demandload(globals(), "archival changegroup") | 15 demandload(globals(), "archival changegroup") |
16 demandload(globals(), "hgweb.server") | 16 demandload(globals(), "hgweb.server sshserver") |
17 | 17 |
18 class UnknownCommand(Exception): | 18 class UnknownCommand(Exception): |
19 """Exception raised if command is not in the command table.""" | 19 """Exception raised if command is not in the command table.""" |
20 class AmbiguousCommand(Exception): | 20 class AmbiguousCommand(Exception): |
21 """Exception raised if command shortcut matches more than one command.""" | 21 """Exception raised if command shortcut matches more than one command.""" |
2450 """ | 2450 """ |
2451 | 2451 |
2452 if opts["stdio"]: | 2452 if opts["stdio"]: |
2453 if repo is None: | 2453 if repo is None: |
2454 raise hg.RepoError(_('no repo found')) | 2454 raise hg.RepoError(_('no repo found')) |
2455 fin, fout = sys.stdin, sys.stdout | 2455 s = sshserver.sshserver(ui, repo) |
2456 sys.stdout = sys.stderr | 2456 s.serve_forever() |
2457 | |
2458 # Prevent insertion/deletion of CRs | |
2459 util.set_binary(fin) | |
2460 util.set_binary(fout) | |
2461 | |
2462 def getarg(): | |
2463 argline = fin.readline()[:-1] | |
2464 arg, l = argline.split() | |
2465 val = fin.read(int(l)) | |
2466 return arg, val | |
2467 def respond(v): | |
2468 fout.write("%d\n" % len(v)) | |
2469 fout.write(v) | |
2470 fout.flush() | |
2471 | |
2472 lock = None | |
2473 | |
2474 while 1: | |
2475 cmd = fin.readline()[:-1] | |
2476 if cmd == '': | |
2477 return | |
2478 if cmd == "heads": | |
2479 h = repo.heads() | |
2480 respond(" ".join(map(hex, h)) + "\n") | |
2481 if cmd == "lock": | |
2482 lock = repo.lock() | |
2483 respond("") | |
2484 if cmd == "unlock": | |
2485 if lock: | |
2486 lock.release() | |
2487 lock = None | |
2488 respond("") | |
2489 elif cmd == "branches": | |
2490 arg, nodes = getarg() | |
2491 nodes = map(bin, nodes.split(" ")) | |
2492 r = [] | |
2493 for b in repo.branches(nodes): | |
2494 r.append(" ".join(map(hex, b)) + "\n") | |
2495 respond("".join(r)) | |
2496 elif cmd == "between": | |
2497 arg, pairs = getarg() | |
2498 pairs = [map(bin, p.split("-")) for p in pairs.split(" ")] | |
2499 r = [] | |
2500 for b in repo.between(pairs): | |
2501 r.append(" ".join(map(hex, b)) + "\n") | |
2502 respond("".join(r)) | |
2503 elif cmd == "changegroup": | |
2504 nodes = [] | |
2505 arg, roots = getarg() | |
2506 nodes = map(bin, roots.split(" ")) | |
2507 | |
2508 cg = repo.changegroup(nodes, 'serve') | |
2509 while 1: | |
2510 d = cg.read(4096) | |
2511 if not d: | |
2512 break | |
2513 fout.write(d) | |
2514 | |
2515 fout.flush() | |
2516 | |
2517 elif cmd == "addchangegroup": | |
2518 if not lock: | |
2519 respond("not locked") | |
2520 continue | |
2521 respond("") | |
2522 | |
2523 r = repo.addchangegroup(fin, 'serve') | |
2524 respond(str(r)) | |
2525 | 2457 |
2526 optlist = ("name templates style address port ipv6" | 2458 optlist = ("name templates style address port ipv6" |
2527 " accesslog errorlog webdir_conf") | 2459 " accesslog errorlog webdir_conf") |
2528 for o in optlist.split(): | 2460 for o in optlist.split(): |
2529 if opts[o]: | 2461 if opts[o]: |