604 'bz2': ('application/x-tar', 'tbz2', '.tar.bz2', None), |
604 'bz2': ('application/x-tar', 'tbz2', '.tar.bz2', None), |
605 'gz': ('application/x-tar', 'tgz', '.tar.gz', None), |
605 'gz': ('application/x-tar', 'tgz', '.tar.gz', None), |
606 'zip': ('application/zip', 'zip', '.zip', None), |
606 'zip': ('application/zip', 'zip', '.zip', None), |
607 } |
607 } |
608 |
608 |
609 def archive(self, req, cnode, type_): |
609 def archive(self, req, id, type_): |
610 reponame = re.sub(r"\W+", "-", os.path.basename(self.reponame)) |
610 reponame = re.sub(r"\W+", "-", os.path.basename(self.reponame)) |
611 name = "%s-%s" % (reponame, short(cnode)) |
611 cnode = self.repo.lookup(id) |
|
612 arch_version = id |
|
613 if cnode == id: |
|
614 arch_version = short(cnode) |
|
615 name = "%s-%s" % (reponame, arch_version) |
612 mimetype, artype, extension, encoding = self.archive_specs[type_] |
616 mimetype, artype, extension, encoding = self.archive_specs[type_] |
613 headers = [('Content-type', mimetype), |
617 headers = [('Content-type', mimetype), |
614 ('Content-disposition', 'attachment; filename=%s%s' % |
618 ('Content-disposition', 'attachment; filename=%s%s' % |
615 (name, extension))] |
619 (name, extension))] |
616 if encoding: |
620 if encoding: |
987 req.write(z.compress(chunk)) |
991 req.write(z.compress(chunk)) |
988 |
992 |
989 req.write(z.flush()) |
993 req.write(z.flush()) |
990 |
994 |
991 def do_archive(self, req): |
995 def do_archive(self, req): |
992 changeset = self.repo.lookup(req.form['node'][0]) |
|
993 type_ = req.form['type'][0] |
996 type_ = req.form['type'][0] |
994 allowed = self.configlist("web", "allow_archive") |
997 allowed = self.configlist("web", "allow_archive") |
995 if (type_ in self.archives and (type_ in allowed or |
998 if (type_ in self.archives and (type_ in allowed or |
996 self.configbool("web", "allow" + type_, False))): |
999 self.configbool("web", "allow" + type_, False))): |
997 self.archive(req, changeset, type_) |
1000 self.archive(req, req.form['node'][0], type_) |
998 return |
1001 return |
999 |
1002 |
1000 req.write(self.t("error")) |
1003 req.write(self.t("error")) |
1001 |
1004 |
1002 def do_static(self, req): |
1005 def do_static(self, req): |