comparison mercurial/hgweb.py @ 1213:db9639b8594c

Clean up hgweb imports Use demandloading Pull function-local imports up to demandload Scope hg and ui bits
author mpm@selenic.com
date Wed, 07 Sep 2005 23:13:12 -0700
parents 27f2ec705332
children f1895785c79e
comparison
equal deleted inserted replaced
1212:ccb6201e3f28 1213:db9639b8594c
4 # Copyright 2005 Matt Mackall <mpm@selenic.com> 4 # Copyright 2005 Matt Mackall <mpm@selenic.com>
5 # 5 #
6 # This software may be used and distributed according to the terms 6 # This software may be used and distributed according to the terms
7 # of the GNU General Public License, incorporated herein by reference. 7 # of the GNU General Public License, incorporated herein by reference.
8 8
9 import os, cgi, time, re, socket, sys, zlib, errno 9 import os, cgi, sys
10 import mdiff 10 from demandload import demandload
11 from hg import * 11 demandload(globals(), "mdiff time re socket zlib errno ui hg")
12 from ui import * 12 demandload(globals(), "zipfile tempfile StringIO tarfile BaseHTTPServer")
13 13 from node import *
14 14
15 def templatepath(): 15 def templatepath():
16 for f in "templates", "../templates": 16 for f in "templates", "../templates":
17 p = os.path.join(os.path.dirname(__file__), f) 17 p = os.path.join(os.path.dirname(__file__), f)
18 if os.path.isdir(p): 18 if os.path.isdir(p):
169 169
170 170
171 class hgweb: 171 class hgweb:
172 def __init__(self, repo, name=None): 172 def __init__(self, repo, name=None):
173 if type(repo) == type(""): 173 if type(repo) == type(""):
174 self.repo = repository(ui(), repo) 174 self.repo = hg.repository(ui.ui(), repo)
175 else: 175 else:
176 self.repo = repo 176 self.repo = repo
177 177
178 self.mtime = -1 178 self.mtime = -1
179 self.reponame = name 179 self.reponame = name
181 181
182 def refresh(self): 182 def refresh(self):
183 s = os.stat(os.path.join(self.repo.root, ".hg", "00changelog.i")) 183 s = os.stat(os.path.join(self.repo.root, ".hg", "00changelog.i"))
184 if s.st_mtime != self.mtime: 184 if s.st_mtime != self.mtime:
185 self.mtime = s.st_mtime 185 self.mtime = s.st_mtime
186 self.repo = repository(self.repo.ui, self.repo.root) 186 self.repo = hg.repository(self.repo.ui, self.repo.root)
187 self.maxchanges = self.repo.ui.config("web", "maxchanges", 10) 187 self.maxchanges = self.repo.ui.config("web", "maxchanges", 10)
188 self.maxfiles = self.repo.ui.config("web", "maxchanges", 10) 188 self.maxfiles = self.repo.ui.config("web", "maxchanges", 10)
189 self.allowpull = self.repo.ui.configbool("web", "allowpull", True) 189 self.allowpull = self.repo.ui.configbool("web", "allowpull", True)
190 190
191 def date(self, cs): 191 def date(self, cs):
658 658
659 files = mf.keys() 659 files = mf.keys()
660 files.sort() 660 files.sort()
661 661
662 if type == 'zip': 662 if type == 'zip':
663 import zipfile, tempfile
664
665 tmp = tempfile.mkstemp()[1] 663 tmp = tempfile.mkstemp()[1]
666 try: 664 try:
667 zf = zipfile.ZipFile(tmp, "w", zipfile.ZIP_DEFLATED) 665 zf = zipfile.ZipFile(tmp, "w", zipfile.ZIP_DEFLATED)
668 666
669 for f in files: 667 for f in files:
677 f.close() 675 f.close()
678 finally: 676 finally:
679 os.unlink(tmp) 677 os.unlink(tmp)
680 678
681 else: 679 else:
682 import StringIO
683 import time
684 import tarfile
685
686 tf = tarfile.TarFile.open(mode='w|' + type, fileobj=req.out) 680 tf = tarfile.TarFile.open(mode='w|' + type, fileobj=req.out)
687 mff = self.repo.manifest.readflags(mnode) 681 mff = self.repo.manifest.readflags(mnode)
688 mtime = int(time.time()) 682 mtime = int(time.time())
689 683
690 if type == "gz": 684 if type == "gz":
847 port = int(repo.ui.config("web", "port", 8000)) 841 port = int(repo.ui.config("web", "port", 8000))
848 use_ipv6 = repo.ui.configbool("web", "ipv6") 842 use_ipv6 = repo.ui.configbool("web", "ipv6")
849 accesslog = openlog(repo.ui.config("web", "accesslog", "-"), sys.stdout) 843 accesslog = openlog(repo.ui.config("web", "accesslog", "-"), sys.stdout)
850 errorlog = openlog(repo.ui.config("web", "errorlog", "-"), sys.stderr) 844 errorlog = openlog(repo.ui.config("web", "errorlog", "-"), sys.stderr)
851 845
852 import BaseHTTPServer
853
854 class IPv6HTTPServer(BaseHTTPServer.HTTPServer): 846 class IPv6HTTPServer(BaseHTTPServer.HTTPServer):
855 address_family = getattr(socket, 'AF_INET6', None) 847 address_family = getattr(socket, 'AF_INET6', None)
856 848
857 def __init__(self, *args, **kwargs): 849 def __init__(self, *args, **kwargs):
858 if self.address_family is None: 850 if self.address_family is None:
960 {"header": header, "footer": footer}) 952 {"header": header, "footer": footer})
961 953
962 def entries(**map): 954 def entries(**map):
963 parity = 0 955 parity = 0
964 for name, path in self.repos: 956 for name, path in self.repos:
965 u = ui() 957 u = ui.ui()
966 try: 958 try:
967 u.readconfig(file(os.path.join(path, '.hg', 'hgrc'))) 959 u.readconfig(file(os.path.join(path, '.hg', 'hgrc')))
968 except IOError: 960 except IOError:
969 pass 961 pass
970 get = u.config 962 get = u.config