Mercurial > public > mercurial-scm > hg
comparison mercurial/hgweb/common.py @ 2356:2db831b33e8f
Final stage of the hgweb split up.
hgweb and hgwebdir now have their own modules.
author | Eric Hopper <hopper@omnifarious.org> |
---|---|
date | Wed, 31 May 2006 10:42:44 -0700 |
parents | mercurial/hgweb/__init__.py@eb08fb4d41e1 |
children | d351a3be3371 |
comparison
equal
deleted
inserted
replaced
2355:eb08fb4d41e1 | 2356:2db831b33e8f |
---|---|
1 # hgweb.py - web interface to a mercurial repository | |
2 # | |
3 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net> | |
4 # Copyright 2005 Matt Mackall <mpm@selenic.com> | |
5 # | |
6 # This software may be used and distributed according to the terms | |
7 # of the GNU General Public License, incorporated herein by reference. | |
8 | |
9 import os, mimetypes | |
10 import os.path | |
11 | |
12 def get_mtime(repo_path): | |
13 hg_path = os.path.join(repo_path, ".hg") | |
14 cl_path = os.path.join(hg_path, "00changelog.i") | |
15 if os.path.exists(os.path.join(cl_path)): | |
16 return os.stat(cl_path).st_mtime | |
17 else: | |
18 return os.stat(hg_path).st_mtime | |
19 | |
20 def staticfile(directory, fname): | |
21 """return a file inside directory with guessed content-type header | |
22 | |
23 fname always uses '/' as directory separator and isn't allowed to | |
24 contain unusual path components. | |
25 Content-type is guessed using the mimetypes module. | |
26 Return an empty string if fname is illegal or file not found. | |
27 | |
28 """ | |
29 parts = fname.split('/') | |
30 path = directory | |
31 for part in parts: | |
32 if (part in ('', os.curdir, os.pardir) or | |
33 os.sep in part or os.altsep is not None and os.altsep in part): | |
34 return "" | |
35 path = os.path.join(path, part) | |
36 try: | |
37 os.stat(path) | |
38 ct = mimetypes.guess_type(path)[0] or "text/plain" | |
39 return "Content-type: %s\n\n%s" % (ct, file(path).read()) | |
40 except (TypeError, OSError): | |
41 # illegal fname or unreadable file | |
42 return "" |