comparison mercurial/hgweb.py @ 1112:87cbfaf79124

hgweb: add mdiff / fix sorting of archives
author mpm@selenic.com
date Sat, 27 Aug 2005 18:40:25 -0700
parents 0cb9c72b6c03
children 7fca9752d945
comparison
equal deleted inserted replaced
1111:addcb77fe500 1112:87cbfaf79124
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 9 import os, cgi, time, re, socket, sys, zlib
10 import mdiff
10 from hg import * 11 from hg import *
11 from ui import * 12 from ui import *
12 13
13 14
14 def templatepath(): 15 def templatepath():
647 mf = self.repo.manifest.read(mnode) 648 mf = self.repo.manifest.read(mnode)
648 rev = self.repo.manifest.rev(mnode) 649 rev = self.repo.manifest.rev(mnode)
649 reponame = re.sub(r"\W+", "-", self.reponame) 650 reponame = re.sub(r"\W+", "-", self.reponame)
650 name = "%s-%s/" % (reponame, short(cnode)) 651 name = "%s-%s/" % (reponame, short(cnode))
651 652
653 files = mf.keys()
654 files.sort()
655
652 if type == 'zip': 656 if type == 'zip':
653 import zipfile 657 import zipfile
654 658
655 try: 659 try:
656 tmp = tempfile.mkstemp()[1] 660 tmp = tempfile.mkstemp()[1]
657 zf = zipfile.ZipFile(tmp, "w", zipfile.ZIP_DEFLATED) 661 zf = zipfile.ZipFile(tmp, "w", zipfile.ZIP_DEFLATED)
658 662
659 for f in mf.keys(): 663 for f in files:
660 zf.writestr(name + f, self.repo.file(f).read(mf[f])) 664 zf.writestr(name + f, self.repo.file(f).read(mf[f]))
661 zf.close() 665 zf.close()
662 666
663 f = open(tmp, 'r') 667 f = open(tmp, 'r')
664 httphdr('application/zip', name[:-1] + '.zip', 668 httphdr('application/zip', name[:-1] + '.zip',
676 tf = tarfile.TarFile.open(mode='w|' + type, fileobj=sys.stdout) 680 tf = tarfile.TarFile.open(mode='w|' + type, fileobj=sys.stdout)
677 mff = self.repo.manifest.readflags(mnode) 681 mff = self.repo.manifest.readflags(mnode)
678 mtime = int(time.time()) 682 mtime = int(time.time())
679 683
680 httphdr('application/octet-stream', name[:-1] + '.tar.' + type) 684 httphdr('application/octet-stream', name[:-1] + '.tar.' + type)
681 for fname in mf.keys(): 685 for fname in files:
682 rcont = self.repo.file(fname).read(mf[fname]) 686 rcont = self.repo.file(fname).read(mf[fname])
683 finfo = tarfile.TarInfo(name + fname) 687 finfo = tarfile.TarInfo(name + fname)
684 finfo.mtime = mtime 688 finfo.mtime = mtime
685 finfo.size = len(rcont) 689 finfo.size = len(rcont)
686 finfo.mode = mff[fname] and 0755 or 0644 690 finfo.mode = mff[fname] and 0755 or 0644