comparison mercurial/hgweb.py @ 1123:457c23af92bd

Use a template for the error message.
author Ollivier Robert <roberto@keltia.freenix.fr>
date Sat, 27 Aug 2005 23:44:15 -0700
parents fb008a1a0a32
children ee4f60abad93
comparison
equal deleted inserted replaced
1122:fb008a1a0a32 1123:457c23af92bd
66 sys.stdout.write('Content-disposition: attachment; filename=%s\n' 66 sys.stdout.write('Content-disposition: attachment; filename=%s\n'
67 % file) 67 % file)
68 if size > 0: 68 if size > 0:
69 sys.stdout.write('Content-length: %d\n' % size) 69 sys.stdout.write('Content-length: %d\n' % size)
70 sys.stdout.write('\n') 70 sys.stdout.write('\n')
71
72 def httpnotfound(filename):
73 sys.stdout.write("Status: 404\r\n\r\n")
74 sys.stdout.write("File not found: (%s)" % (filename, ))
75 71
76 def write(*things): 72 def write(*things):
77 for thing in things: 73 for thing in things:
78 if hasattr(thing, "__iter__"): 74 if hasattr(thing, "__iter__"):
79 for part in thing: 75 for part in thing:
935 def __init__(self, config): 931 def __init__(self, config):
936 self.cp = ConfigParser.SafeConfigParser() 932 self.cp = ConfigParser.SafeConfigParser()
937 self.cp.read(config) 933 self.cp.read(config)
938 934
939 def run(self): 935 def run(self):
936 def header(**map):
937 yield tmpl("header", **map)
938
939 def footer(**map):
940 yield tmpl("footer", **map)
941
942 templates = templatepath()
943 m = os.path.join(templates, "map")
944 tmpl = templater(m, common_filters,
945 {"header": header, "footer": footer})
946
947 def entries(**map):
948 parity = 0
949 l = self.cp.items("paths")
950 l.sort()
951 for v,r in l:
952 cp2 = ConfigParser.SafeConfigParser()
953 cp2.read(os.path.join(r, ".hg", "hgrc"))
954
955 def get(sec, val, default):
956 try:
957 return cp2.get(sec, val)
958 except:
959 return default
960
961 url = os.environ["REQUEST_URI"] + "/" + v
962 url = url.replace("//", "/")
963
964 yield dict(author=get("web", "author", "unknown"),
965 name=get("web", "name", v),
966 url=url,
967 parity=parity,
968 shortdesc=get("web", "description", "unknown"),
969 lastupdate=os.stat(os.path.join(r, ".hg",
970 "00changelog.d")).st_mtime)
971
972 parity = 1 - parity
973
940 try: 974 try:
941 virtual = os.environ["PATH_INFO"] 975 virtual = os.environ["PATH_INFO"]
942 except: 976 except:
943 virtual = "" 977 virtual = ""
944 978
949 real = self.cp.get("paths", virtual) 983 real = self.cp.get("paths", virtual)
950 h = hgweb(real) 984 h = hgweb(real)
951 h.run() 985 h.run()
952 return 986 return
953 else: 987 else:
954 httpnotfound(virtual) 988 write(tmpl("notfound", repo = virtual))
955 return 989 return
956 990
957 def header(**map):
958 yield tmpl("header", **map)
959
960 def footer(**map):
961 yield tmpl("footer", **map)
962
963 templates = templatepath()
964 m = os.path.join(templates, "map")
965 tmpl = templater(m, common_filters,
966 {"header": header, "footer": footer})
967
968 def entries(**map):
969 parity = 0
970 l = self.cp.items("paths")
971 l.sort()
972 for v,r in l:
973 cp2 = ConfigParser.SafeConfigParser()
974 cp2.read(os.path.join(r, ".hg", "hgrc"))
975
976 def get(sec, val, default):
977 try:
978 return cp2.get(sec, val)
979 except:
980 return default
981
982 url = os.environ["REQUEST_URI"] + "/" + v
983 url = url.replace("//", "/")
984
985 yield dict(author=get("web", "author", "unknown"),
986 name=get("web", "name", v),
987 url=url,
988 parity=parity,
989 shortdesc=get("web", "description", "unknown"),
990 lastupdate=os.stat(os.path.join(r, ".hg",
991 "00changelog.d")).st_mtime)
992
993 parity = 1 - parity
994
995 write(tmpl("index", entries=entries)) 991 write(tmpl("index", entries=entries))