summaryrefslogtreecommitdiff
path: root/sys/lib/python
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@rei2.9hal>2012-03-16 17:13:35 +0100
committercinap_lenrek <cinap_lenrek@rei2.9hal>2012-03-16 17:13:35 +0100
commit51f8743f76396a559ab3c06e4124e31dac4b8878 (patch)
tree78d175a402eb7c207694509f4818f190fed5dfdc /sys/lib/python
parent7064a591ffdd6c689a6c2c9e53a2d8e77b46a479 (diff)
hg: hgwebfs extension, ignore /net.alt
Diffstat (limited to 'sys/lib/python')
-rw-r--r--sys/lib/python/hgext/hgwebfs.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/sys/lib/python/hgext/hgwebfs.py b/sys/lib/python/hgext/hgwebfs.py
new file mode 100644
index 000000000..ab6d95319
--- /dev/null
+++ b/sys/lib/python/hgext/hgwebfs.py
@@ -0,0 +1,74 @@
+''' webfs support '''
+
+import mercurial.url
+import re
+
+class Webconn:
+ def __init__(self, mnt, req):
+ ctl = open(mnt+'/clone', 'r+', 0)
+ try:
+ self.url = req.get_full_url()
+ self.dir = mnt+'/'+ctl.readline().rstrip('\n')
+ ctl.seek(0)
+ ctl.write('url '+self.url)
+ m = ''
+ for h,v in req.headers:
+ m += h+': '+v+'\r\n'
+ if len(m) > 0:
+ m = 'headers '+m
+ print m
+ ctl.seek(0)
+ ctl.write(m)
+ if req.has_data():
+ data = req.get_data()
+ post = open(self.dir+'/postdata', 'w', 0);
+ try:
+ while True:
+ buf = data.read(4096)
+ if len(buf) == 0:
+ break
+ post.write(buf)
+ finally:
+ post.close()
+ self.body = open(self.dir+'/body', 'r', 0)
+ finally:
+ ctl.close()
+
+ def read(self, amt=4096):
+ return self.body.read(amt);
+
+ def close(self):
+ self.body.close()
+ self.body = None
+ self.dir = None
+
+ def geturl(self):
+ return self.url
+
+ def getheader(self, key):
+ name = re.sub(r'[^a-z]+', '', key.lower())
+ try:
+ f = open(self.dir+'/'+name, 'r', 0)
+ try:
+ hdr = f.read()
+ finally:
+ f.close()
+ return hdr
+ except:
+ return None
+
+class Webopener:
+ def __init__(self):
+ self.handlers = []
+
+ def open(self, req, data=None):
+ return Webconn('/mnt/web', req)
+
+ def close(self):
+ pass
+
+
+def webopener(ui, authinfo=None):
+ return Webopener();
+
+mercurial.url.opener = webopener