Package: approx
Version: 1.15
Severity: normal
Tags: patch
I'm using "secure" apt 0.6, which AFAICS prefers Packages.bz2 files to
the usual Packages.gz files. gc_approx doesn't know about .bz2 files and
thus might completely purge the repository.
This is somewhat related to #310399 -- I think it would indeed be a good
idea to use only the latest Packages(|.gz|.bz2) found in a directory.
Also, while looking at this, I found that approx doesn't know about
Release.gpg files; instead, it looked for Release.gz files which AFAIK
never existed.
A crude patch is attached.
-- System Information:
Debian Release: 3.1
[I'm not writing this from the system I'm running approx on, so I
removed the dependency information. In case it matters, that system is
running sarge plus apt 0.6.]
--- ./approx.ml 2005/06/12 10:31:36 1.1
+++ ./approx.ml 2005/06/12 10:35:09
@@ -91,6 +91,9 @@
if Filename.check_suffix file_name ".gz" then
[ "Content-Type", "application/x-gzip";
"Content-Encoding", "x-gzip" ]
+ else if Filename.check_suffix file_name ".bz2" then
+ [ "Content-Type", "application/x-bzip2";
+ "Content-Encoding", "x-bzip2" ]
else
[ "Content-Type", "text/plain" ]
--- ./debian/changelog 2005/06/12 10:40:39 1.1
+++ ./debian/changelog 2005/06/12 11:12:09
@@ -1,3 +1,10 @@
+approx (1.15.1) unstable; urgency=low
+
+ * Add support for bzip2'd Packages/Release/Sources files.
+ * gc_approx: Keep "Release.gpg", not "Release.gz" which doesn't exist.
+
+ -- Flavio Stanchina <[EMAIL PROTECTED]> Sun, 12 Jun 2005 13:01:47 +0200
+
approx (1.15) unstable; urgency=low
* Build byte-code version on architectures with no ocamlopt
--- ./debian/control 2005/06/12 10:43:02 1.1
+++ ./debian/control 2005/06/12 10:43:42
@@ -9,6 +9,7 @@
Package: approx
Architecture: any
Depends: ${shlibs:Depends}, wget
+Recommends: bzip2
Description: caching proxy server for Debian archive files
Approx is an HTTP-based Debian archive server.
It fetches packages from remote repositories on demand,
--- ./gc_approx.ml 2005/06/12 10:31:36 1.1
+++ ./gc_approx.ml 2005/06/12 11:01:19
@@ -55,7 +55,7 @@
let find_roots () =
let find file =
match Filename.basename file with
- | "Packages" | "Packages.gz" -> roots := file :: !roots
+ | "Packages" | "Packages.gz" | "Packages.bz2" -> roots := file :: !roots
| _ -> ()
in
Config.iter (fun dir _ -> treewalk find (cache_dir ^/ dir))
@@ -90,9 +90,9 @@
let is_candidate file =
match Filename.basename file with
- | "Packages" | "Packages.gz"
- | "Release" | "Release.gz"
- | "Sources" | "Sources.gz" ->
+ | "Release" | "Release.gpg"
+ | "Packages" | "Packages.gz" | "Packages.bz2"
+ | "Sources" | "Sources.gz" | "Sources.bz2" ->
let dist, _ = split_cache_pathname file in
(try ignore (Config.get dist); false
with Not_found -> true (* not part of a known distribution *))
--- ./package.ml 2005/06/12 10:31:36 1.1
+++ ./package.ml 2005/06/12 10:38:52
@@ -63,10 +63,24 @@
Sys.remove tmp;
chan
+let decompress2 file =
+ let tmp = tmp_file () in
+ let cmd = Printf.sprintf "/usr/bin/bunzip2 --stdout %s > %s" file tmp in
+ if Sys.command cmd <> 0 then
+ begin
+ Sys.remove tmp;
+ failwith "decompress2"
+ end;
+ let chan = open_in tmp in
+ Sys.remove tmp;
+ chan
+
let with_open_file file proc =
let chan =
if Filename.check_suffix file ".gz" then
decompress file
+ else if Filename.check_suffix file ".bz2" then
+ decompress2 file
else
open_in file
in