Collect the size (ft_size) of files from package handlers.
authorRichard Jones <rjones@redhat.com>
Fri, 18 Mar 2011 14:53:04 +0000 (14:53 +0000)
committerRichard Jones <rjones@redhat.com>
Fri, 18 Mar 2011 14:53:04 +0000 (14:53 +0000)
febootstrap.ml
febootstrap_debian.ml
febootstrap_package_handlers.ml
febootstrap_package_handlers.mli
febootstrap_pacman.ml
febootstrap_yum_rpm.ml

index 9ea9885..3c634c4 100644 (file)
@@ -126,7 +126,8 @@ let () =
             else (
               insert_dir parent;
               let newdir = (parent, { ft_dir = true; ft_config = false;
-                                      ft_ghost = false; ft_mode = 0o40755 },
+                                      ft_ghost = false; ft_mode = 0o40755;
+                                     ft_size = 0 },
                             "") in
               newdir :: loop parent
             )
@@ -140,12 +141,12 @@ let () =
   if false then (
     List.iter (
       fun (name, { ft_dir = dir; ft_ghost = ghost; ft_config = config;
-                   ft_mode = mode }, pkg) ->
-        printf "%s [%s%s%s%o] from %s\n" name
+                   ft_mode = mode; ft_size = size }, pkg) ->
+        printf "%s [%s%s%s%o %d] from %s\n" name
           (if dir then "dir " else "")
           (if ghost then "ghost " else "")
           (if config then "config " else "")
-          mode
+          mode size
           pkg
     ) files
   );
index 83c6c1a..f0d0be5 100644 (file)
@@ -112,7 +112,7 @@ let debian_list_files pkg =
       let mode = statbuf.st_perm in
 
       (path, { ft_dir = is_dir; ft_config = config; ft_mode = mode;
-              ft_ghost = false })
+              ft_ghost = false; ft_size = statbuf.st_size })
   ) lines in
 
   files
index 72bb172..ad3a233 100644 (file)
@@ -33,6 +33,7 @@ and file_type = {
   ft_config : bool;
   ft_ghost : bool;
   ft_mode : int;
+  ft_size : int;
 }
 
 let tmpdir = tmpdir ()
index 673e448..c28d81f 100644 (file)
@@ -50,6 +50,7 @@ and file_type = {
   ft_config : bool;            (** Is a configuration file. *)
   ft_ghost : bool;             (** Is a ghost (created empty) file. *)
   ft_mode : int;               (** File mode. *)
+  ft_size : int;              (** File size. *)
 }
 
 val register_package_handler : string -> package_handler -> unit
index 760d0ef..96dfefa 100644 (file)
@@ -111,7 +111,7 @@ let pacman_list_files pkg =
       let mode = statbuf.st_perm in
 
       (path, { ft_dir = is_dir; ft_config = config; ft_mode = mode;
-              ft_ghost = false })
+              ft_ghost = false; ft_size = statbuf.st_size })
   ) lines in
 
   files
index e70940d..f6644b8 100644 (file)
@@ -163,7 +163,7 @@ f.close ()
 let rec yum_rpm_list_files pkg =
   (* Run rpm -qlp with some extra magic. *)
   let cmd =
-    sprintf "rpm -q --qf '[%%{FILENAMES} %%{FILEFLAGS:fflags} %%{FILEMODES}\\n]' -p %s"
+    sprintf "rpm -q --qf '[%%{FILENAMES} %%{FILEFLAGS:fflags} %%{FILEMODES} %%{FILESIZES}\\n]' -p %s"
       pkg in
   let lines = run_command_get_lines cmd in
 
@@ -171,15 +171,16 @@ let rec yum_rpm_list_files pkg =
     filter_map (
       fun line ->
         match string_split " " line with
-        | [filename; flags; mode] ->
+        | [filename; flags; mode; size] ->
             let test_flag = String.contains flags in
             let mode = int_of_string mode in
+           let size = int_of_string size in
             if test_flag 'd' then None  (* ignore documentation *)
             else
               Some (filename, {
                       ft_dir = mode land 0o40000 <> 0;
                       ft_ghost = test_flag 'g'; ft_config = test_flag 'c';
-                      ft_mode = mode;
+                      ft_mode = mode; ft_size = size;
                     })
         | _ ->
             eprintf "febootstrap: bad output from rpm command: '%s'" line;
@@ -199,7 +200,8 @@ let rec yum_rpm_list_files pkg =
       let dirs =
         List.map (fun name ->
                     name, { ft_dir = true; ft_ghost = false;
-                            ft_config = false; ft_mode = 0o40755 }) dirs in
+                            ft_config = false; ft_mode = 0o40755;
+                           ft_size = 0 }) dirs in
       let devs = [ "/dev/null"; "/dev/full"; "/dev/zero"; "/dev/random";
                    "/dev/urandom"; "/dev/tty"; "/dev/console";
                    "/dev/ptmx"; "/dev/stdin"; "/dev/stdout"; "/dev/stderr" ] in
@@ -207,7 +209,8 @@ let rec yum_rpm_list_files pkg =
       let devs =
         List.map (fun name ->
                     name, { ft_dir = false; ft_ghost = false;
-                            ft_config = false; ft_mode = 0o644 }) devs in
+                            ft_config = false; ft_mode = 0o644;
+                           ft_size = 0 }) devs in
       dirs @ devs @ files
     ) else files in