[Pkg-ocaml-maint-commits] [approx] 08/16: change from gz to bz2 (closes: #639540, #689444, #705890)

Eric Cooper ecc at cmu.edu
Mon Dec 9 15:44:03 UTC 2013


This is an automated email from the git hooks/post-receive script.

ecc-guest pushed a commit to branch upstream
in repository approx.

commit 6dc4be63f394683471286987df9cab4bd6bbfe12
Author: Eric Cooper <ecc at cmu.edu>
Date:   Mon Apr 22 16:06:57 2013 -0400

    change from gz to bz2 (closes: #639540, #689444, #705890)
---
 approx.ml              |  9 ++++-----
 doc/FAQ                |  2 +-
 doc/README.concurrency |  2 +-
 pdiff.ml               | 10 +++++-----
 util.ml                | 23 ++++++++++++++++-------
 5 files changed, 27 insertions(+), 19 deletions(-)

diff --git a/approx.ml b/approx.ml
index 4bb1268..e5f5b1b 100644
--- a/approx.ml
+++ b/approx.ml
@@ -494,15 +494,14 @@ let cache_miss url name ims mod_time =
 
 (* See if the given file should be denied (reported to the client as
    not found) rather than fetched remotely. This is done in two cases:
-     * the client is requesting a non-gzipped version of an index
-     * the client is requesting a DiffIndex and an up-to-date .gz version
+     * the client is requesting a non-bz2 version of an index
+     * the client is requesting a DiffIndex and an up-to-date .bz2 version
        of the corresponding index exists in the cache
    By denying the request, the client will fall back to requesting
-   the Packages.gz or Sources.gz file. Using .gz instead of .bz2
-   or other compressed formats allows pdiffs to be applied more quickly. *)
+   the Packages.bz2 or Sources.bz2 file. *)
 
 let should_deny name =
-  (Release.is_index name && extension name <> ".gz") ||
+  (Release.is_index name && extension name <> ".bz2") ||
   (pdiffs && Release.is_diff_index name &&
      Release.valid (Pdiff.index_file name))
 
diff --git a/doc/FAQ b/doc/FAQ
index eb24d4c..c921de7 100644
--- a/doc/FAQ
+++ b/doc/FAQ
@@ -22,7 +22,7 @@ Exporting a local package repository
       local   file:///my/local/repo
 
   The repo must have the structure that apt expects, including a
-  Packages.gz index. You can maintain a local repo with a tool like
+  Packages.bz2 index. You can maintain a local repo with a tool like
   dpkg-scanpackages or reprepro.
 
 Changing the TCP port on which approx listens
diff --git a/doc/README.concurrency b/doc/README.concurrency
index 5249160..b9a14e6 100644
--- a/doc/README.concurrency
+++ b/doc/README.concurrency
@@ -34,7 +34,7 @@ B: between concurrent approx processes
 The atomic renaming of downloaded files prevents one approx process
 from delivering a file that has been partially downloaded by another.
 
-But suppose a large download, like the main Packages.gz file, is in
+But suppose a large download, like the main Packages.bz2 file, is in
 progress.  Another approx process might decide to download it also.
 To avoid this, approx creates a hint file in the cache directory
 before starting the download.  We use the presence of a current hint
diff --git a/pdiff.ml b/pdiff.ml
index aa1f7a4..56f09aa 100644
--- a/pdiff.ml
+++ b/pdiff.ml
@@ -7,7 +7,7 @@ open Log
 open Util
 
 let index_file path =
-  Filename.chop_suffix (Filename.dirname path) ".diff" ^ ".gz"
+  Filename.chop_suffix (Filename.dirname path) ".diff" ^ ".bz2"
 
 let read_diff_index dir =
   let diff_index = dir ^/ "Index" in
@@ -34,11 +34,11 @@ let rec find_tail p = function
 
 (* Pdiff application must result in a Packages or Sources file
    that is identical to the one in the official archive,
-   so this function must use the same gzip parameters that dak does.
+   so this function must use the same bzip2 parameters that dak does.
    See http://ftp-master.debian.org/git/dak.git *)
 
 let compress ~src ~dst =
-  let cmd = Printf.sprintf "/bin/gzip -9cn --rsyncable < %s > %s" src dst in
+  let cmd = Printf.sprintf "/usr/bin/nice /usr/bin/ionice -c3 /bin/bzip2 -9 < %s > %s" src dst in
   debug_message "Compressing: %s" cmd;
   if Sys.command cmd <> 0 then failwith "compress";
   if debug && not (Release.valid dst) then
@@ -81,11 +81,11 @@ let apply_pdiffs file pdiffs final index =
 
 let update index =
   info_message "Updating %s" index;
-  if not (Filename.check_suffix index ".gz") then
+  if not (Filename.check_suffix index ".bz2") then
     invalid_string_arg "Pdiff.update" index;
   if not (Sys.file_exists index) then
     Url.download_file index;
-  let dir = Filename.chop_suffix index ".gz" ^ ".diff" in
+  let dir = Filename.chop_suffix index ".bz2" ^ ".diff" in
   let diffs, final = read_diff_index dir in
   let update_index file =
     let info = (file_sha1sum file, file_size file) in
diff --git a/util.ml b/util.ml
index 1eb978e..f136029 100644
--- a/util.ml
+++ b/util.ml
@@ -179,7 +179,14 @@ let tmp_dir () =
 
 let rm file = try Sys.remove file with _ -> ()
 
-let compressed_extensions = [".gz"; ".bz2"; ".lzma"; ".xz"]
+(* Decompression programs for supported compression formats *)
+
+let decompressors =
+  [".bz2", "/bin/bzcat";
+   ".gz", "/bin/zcat";
+   ".xz", "/usr/bin/xzcat"]
+
+let compressed_extensions = List.map fst decompressors
 
 (* Check if a file is compressed by examining its extension *)
 
@@ -192,12 +199,14 @@ let is_compressed file = List.mem (extension file) compressed_extensions
    Return the temporary file name, which must be removed by the caller *)
 
 let decompress file =
-  if extension file <> ".gz" then invalid_string_arg "decompress" file
-  else
-    let tmp = (tmp_dir ()) ^/ gensym (Filename.basename file) in
-    let cmd = sprintf "/bin/gunzip --stdout %s > %s" file tmp in
-    if Sys.command cmd = 0 then tmp
-    else (rm tmp; failwith ("decompress " ^ file))
+  let prog =
+    try List.assoc (extension file) decompressors
+    with Not_found -> invalid_string_arg "decompress" file
+  in
+  let tmp = (tmp_dir ()) ^/ gensym (Filename.basename file) in
+  let cmd = sprintf "%s %s > %s" prog file tmp in
+  if Sys.command cmd = 0 then tmp
+  else (rm tmp; failwith ("decompress " ^ file))
 
 let with_decompressed file = with_resource rm decompress file
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/approx.git



More information about the Pkg-ocaml-maint-commits mailing list