##// END OF EJS Templates
Add a scheme for handling remote locking...
Matt Mackall -
r638:35f7adfe default
parent child Browse files
Show More
@@ -880,6 +880,8 b' def serve(ui, repo, **opts):'
880 fout.write(v)
880 fout.write(v)
881 fout.flush()
881 fout.flush()
882
882
883 lock = None
884
883 while 1:
885 while 1:
884 cmd = fin.readline()[:-1]
886 cmd = fin.readline()[:-1]
885 if cmd == '':
887 if cmd == '':
@@ -887,6 +889,13 b' def serve(ui, repo, **opts):'
887 if cmd == "heads":
889 if cmd == "heads":
888 h = repo.heads()
890 h = repo.heads()
889 respond(" ".join(map(hg.hex, h)) + "\n")
891 respond(" ".join(map(hg.hex, h)) + "\n")
892 if cmd == "lock":
893 lock = repo.lock()
894 respond("")
895 if cmd == "unlock":
896 if lock: lock.release()
897 lock = None
898 respond("")
890 elif cmd == "branches":
899 elif cmd == "branches":
891 arg, nodes = getarg()
900 arg, nodes = getarg()
892 nodes = map(hg.bin, nodes.split(" "))
901 nodes = map(hg.bin, nodes.split(" "))
@@ -1620,6 +1620,15 b' class httprepository:'
1620
1620
1621 return zread(f)
1621 return zread(f)
1622
1622
1623 class remotelock:
1624 def __init__(self, repo):
1625 self.repo = repo
1626 def release(self):
1627 self.repo.unlock()
1628 self.repo = None
1629 def __del__(self):
1630 if self.repo:
1631 self.release()
1623
1632
1624 class sshrepository:
1633 class sshrepository:
1625 def __init__(self, ui, path):
1634 def __init__(self, ui, path):
@@ -1666,6 +1675,13 b' class sshrepository:'
1666 l = int(r.readline())
1675 l = int(r.readline())
1667 return r.read(l)
1676 return r.read(l)
1668
1677
1678 def lock(self):
1679 self.call("lock")
1680 return remotelock(self)
1681
1682 def unlock(self):
1683 self.call("unlock")
1684
1669 def heads(self):
1685 def heads(self):
1670 d = self.call("heads")
1686 d = self.call("heads")
1671 try:
1687 try:
General Comments 0
You need to be logged in to leave comments. Login now