comparison mercurial/hg.py @ 646:342927da4f4c

Show remote client output with "remote:"
author Matt Mackall <mpm@selenic.com>
date Wed, 06 Jul 2005 22:30:00 -0800
parents 6ebe118280bd
children 8c89408a7154
comparison
equal deleted inserted replaced
645:a55048b2ae3a 646:342927da4f4c
9 import util 9 import util
10 from revlog import * 10 from revlog import *
11 from demandload import * 11 from demandload import *
12 demandload(globals(), "re lock urllib urllib2 transaction time socket") 12 demandload(globals(), "re lock urllib urllib2 transaction time socket")
13 demandload(globals(), "tempfile httprangereader bdiff") 13 demandload(globals(), "tempfile httprangereader bdiff")
14 demandload(globals(), "bisect") 14 demandload(globals(), "bisect select")
15 15
16 class filelog(revlog): 16 class filelog(revlog):
17 def __init__(self, opener, path): 17 def __init__(self, opener, path):
18 revlog.__init__(self, opener, 18 revlog.__init__(self, opener,
19 os.path.join("data", path + ".i"), 19 os.path.join("data", path + ".i"),
1749 path = self.path or "" 1749 path = self.path or ""
1750 1750
1751 cmd = "ssh %s 'hg -R %s serve --stdio'" 1751 cmd = "ssh %s 'hg -R %s serve --stdio'"
1752 cmd = cmd % (args, path) 1752 cmd = cmd % (args, path)
1753 1753
1754 self.pipeo, self.pipei = os.popen2(cmd) 1754 self.pipeo, self.pipei, self.pipee = os.popen3(cmd)
1755
1756 def readerr(self):
1757 while 1:
1758 r,w,x = select.select([self.pipee], [], [], 0)
1759 if not r: break
1760 l = self.pipee.readline()
1761 if not l: break
1762 self.ui.status("remote: ", l)
1755 1763
1756 def __del__(self): 1764 def __del__(self):
1765 self.readerr()
1757 self.pipeo.close() 1766 self.pipeo.close()
1758 self.pipei.close() 1767 self.pipei.close()
1768 self.pipee.close()
1759 1769
1760 def dev(self): 1770 def dev(self):
1761 return -1 1771 return -1
1762 1772
1763 def do_cmd(self, cmd, **args): 1773 def do_cmd(self, cmd, **args):
1770 1780
1771 return self.pipei 1781 return self.pipei
1772 1782
1773 def call(self, cmd, **args): 1783 def call(self, cmd, **args):
1774 r = self.do_cmd(cmd, **args) 1784 r = self.do_cmd(cmd, **args)
1775 l = int(r.readline()) 1785 l = r.readline()
1786 self.readerr()
1787 try:
1788 l = int(l)
1789 except:
1790 raise RepoError("unexpected response '%s'" % l)
1776 return r.read(l) 1791 return r.read(l)
1777 1792
1778 def lock(self): 1793 def lock(self):
1779 self.call("lock") 1794 self.call("lock")
1780 return remotelock(self) 1795 return remotelock(self)
1785 def heads(self): 1800 def heads(self):
1786 d = self.call("heads") 1801 d = self.call("heads")
1787 try: 1802 try:
1788 return map(bin, d[:-1].split(" ")) 1803 return map(bin, d[:-1].split(" "))
1789 except: 1804 except:
1790 self.ui.warn("unexpected response:\n" + d[:400] + "\n...\n") 1805 raise RepoError("unexpected response '%s'" % (d[:400] + "..."))
1791 raise
1792 1806
1793 def branches(self, nodes): 1807 def branches(self, nodes):
1794 n = " ".join(map(hex, nodes)) 1808 n = " ".join(map(hex, nodes))
1795 d = self.call("branches", nodes=n) 1809 d = self.call("branches", nodes=n)
1796 try: 1810 try:
1797 br = [ tuple(map(bin, b.split(" "))) for b in d.splitlines() ] 1811 br = [ tuple(map(bin, b.split(" "))) for b in d.splitlines() ]
1798 return br 1812 return br
1799 except: 1813 except:
1800 self.ui.warn("unexpected response:\n" + d[:400] + "\n...\n") 1814 raise RepoError("unexpected response '%s'" % (d[:400] + "..."))
1801 raise
1802 1815
1803 def between(self, pairs): 1816 def between(self, pairs):
1804 n = "\n".join(["-".join(map(hex, p)) for p in pairs]) 1817 n = "\n".join(["-".join(map(hex, p)) for p in pairs])
1805 d = self.call("between", pairs=n) 1818 d = self.call("between", pairs=n)
1806 try: 1819 try:
1807 p = [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ] 1820 p = [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ]
1808 return p 1821 return p
1809 except: 1822 except:
1810 self.ui.warn("unexpected response:\n" + d[:400] + "\n...\n") 1823 raise RepoError("unexpected response '%s'" % (d[:400] + "..."))
1811 raise
1812 1824
1813 def changegroup(self, nodes): 1825 def changegroup(self, nodes):
1814 n = " ".join(map(hex, nodes)) 1826 n = " ".join(map(hex, nodes))
1815 f = self.do_cmd("changegroup", roots=n) 1827 f = self.do_cmd("changegroup", roots=n)
1816 return self.pipei 1828 return self.pipei
1822 1834
1823 while 1: 1835 while 1:
1824 d = cg.read(4096) 1836 d = cg.read(4096)
1825 if not d: break 1837 if not d: break
1826 self.pipeo.write(d) 1838 self.pipeo.write(d)
1839 self.readerr()
1827 1840
1828 self.pipeo.flush() 1841 self.pipeo.flush()
1829 1842
1843 self.readerr()
1830 l = int(self.pipei.readline()) 1844 l = int(self.pipei.readline())
1831 return self.pipei.read(l) 1845 return self.pipei.read(l) != ""
1832 1846
1833 def repository(ui, path=None, create=0): 1847 def repository(ui, path=None, create=0):
1834 if path: 1848 if path:
1835 if path.startswith("http://"): 1849 if path.startswith("http://"):
1836 return httprepository(ui, path) 1850 return httprepository(ui, path)