git: 9front

Download patch

ref: 44c3fc9fa6b8bc7fb770a489c7dac51739baceb3
parent: 6515b073ddc302dab6c8c6507b2dc8b586eb76da
author: cinap_lenrek <cinap_lenrek@rei2.9hal>
date: Fri Mar 16 13:13:35 EDT 2012

hg: hgwebfs extension, ignore /net.alt

--- a/.hgignore
+++ b/.hgignore
@@ -6,7 +6,7 @@
 ^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)/
--- /dev/null
+++ b/sys/lib/python/hgext/hgwebfs.py
@@ -1,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
--