mercurial/hgweb.py
changeset 1112 87cbfaf79124
parent 1099 0cb9c72b6c03
child 1119 7fca9752d945
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