mercurial/hgweb.py
changeset 1182 24d553b598e8
parent 1174 9d9f4973c76a
parent 1181 4f5001f5b4c3
child 1185 2ae9c319e6fe
equal deleted inserted replaced
1179:8acf62f579d8 1182:24d553b598e8
   908                     accept.append(line.strip())
   908                     accept.append(line.strip())
   909                 else:
   909                 else:
   910                     accept = accept + line[7:].split(',')
   910                     accept = accept + line[7:].split(',')
   911             env['HTTP_ACCEPT'] = ','.join(accept)
   911             env['HTTP_ACCEPT'] = ','.join(accept)
   912 
   912 
   913             save = sys.argv, sys.stderr
   913             req = hgrequest(self.rfile, self.wfile, env)
   914             try:
   914             self.send_response(200, "Script output follows")
   915                 req = hgrequest(self.rfile, self.wfile, env)
   915             hg.run(req)
   916                 sys.argv = ["hgweb.py"]
       
   917                 if '=' not in query:
       
   918                     sys.argv.append(query)
       
   919                 self.send_response(200, "Script output follows")
       
   920                 hg.run(req)
       
   921             finally:
       
   922                 sys.argv, sys.stderr = save
       
   923 
   916 
   924     hg = hgweb(repo)
   917     hg = hgweb(repo)
   925     if use_ipv6:
   918     if use_ipv6:
   926         return IPv6HTTPServer((address, port), hgwebhandler)
   919         return IPv6HTTPServer((address, port), hgwebhandler)
   927     else:
   920     else:
   934     httpd.serve_forever()
   927     httpd.serve_forever()
   935 
   928 
   936 # This is a stopgap
   929 # This is a stopgap
   937 class hgwebdir:
   930 class hgwebdir:
   938     def __init__(self, config):
   931     def __init__(self, config):
       
   932         def cleannames(items):
       
   933             return [(name.strip('/'), path) for name, path in items]
       
   934 
   939         if type(config) == type([]):
   935         if type(config) == type([]):
   940             self.repos = config
   936             self.repos = cleannames(config)
   941         elif type(config) == type({}):
   937         elif type(config) == type({}):
   942             self.repos = config.items()
   938             self.repos = cleannames(config.items())
   943             self.repos.sort()
   939             self.repos.sort()
   944         else:
   940         else:
   945             cp = ConfigParser.SafeConfigParser()
   941             cp = ConfigParser.SafeConfigParser()
   946             cp.read(config)
   942             cp.read(config)
   947             self.repos = cp.items("paths")
   943             self.repos = cleannames(cp.items("paths"))
   948             self.repos.sort()
   944             self.repos.sort()
   949 
   945 
   950     def run(self, req=hgrequest()):
   946     def run(self, req=hgrequest()):
   951         def header(**map):
   947         def header(**map):
   952             yield tmpl("header", **map)
   948             yield tmpl("header", **map)
   966                     u.readconfig(file(os.path.join(path, '.hg', 'hgrc')))
   962                     u.readconfig(file(os.path.join(path, '.hg', 'hgrc')))
   967                 except IOError:
   963                 except IOError:
   968                     pass
   964                     pass
   969                 get = u.config
   965                 get = u.config
   970 
   966 
   971                 url = ('/'.join([req.env["REQUEST_URI"], name])
   967                 url = ('/'.join([req.env["REQUEST_URI"].split('?')[0], name])
   972                        .replace("//", "/"))
   968                        .replace("//", "/"))
   973 
   969 
   974                 yield dict(contact=get("web", "contact") or
   970                 yield dict(contact=get("web", "contact") or
   975                                    get("web", "author", "unknown"),
   971                                    get("web", "author", "unknown"),
   976                            name=get("web", "name", name),
   972                            name=get("web", "name", name),