summaryrefslogtreecommitdiff
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
parent7064a591ffdd6c689a6c2c9e53a2d8e77b46a479 (diff)
downloadplan9front-51f8743f76396a559ab3c06e4124e31dac4b8878.tar.xz
hg: hgwebfs extension, ignore /net.alt
-rw-r--r--.hgignore2
-rw-r--r--sys/lib/python/hgext/hgwebfs.py74
2 files changed, 75 insertions, 1 deletions
diff --git a/.hgignore b/.hgignore
index 78ff9f916..bba1b6e7e 100644
--- a/.hgignore
+++ b/.hgignore
@@ -6,7 +6,7 @@ syntax: regexp
^sys/lib/python/.*\.(pyo|pyc|exe)$
^sys/log/
^sys/man/(searchindex|[1-8]/INDEX.*)$
-^(dev|fd|net|srv|shr|env|root|boot|mnt|n|bin|usr|cfg|cron|mail|tmp)/
+^(dev|fd|net.*|srv|shr|env|root|boot|mnt|n|bin|usr|cfg|cron|mail|tmp)/
^(386|68000|68020|alpha|amd64|arm|power|power64|sparc|sparc64)/(bin|lib)/
^386/(9(pc|boot).*|pbs|mbr|init)
^acme/bin/(386|68000|68020|alpha|amd64|arm|power|power64|sparc|sparc64)/
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