[Libguestfs] [supermin 4/4] dpkg: Determine diversions on demand

Hilko Bengen bengen at hilluzination.de
Sat Mar 15 18:18:27 UTC 2014


---
 src/dpkg.ml | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/src/dpkg.ml b/src/dpkg.ml
index 2e3a198..8f92f7f 100644
--- a/src/dpkg.ml
+++ b/src/dpkg.ml
@@ -131,18 +131,20 @@ let dpkg_get_all_requires pkgs =
   in
   loop pkgs
 
+let dpkg_diversions = Hashtbl.create 13
 let dpkg_get_all_files pkgs =
-  let cmd = sprintf "%s --list" Config.dpkg_divert in
-  let lines = run_command_get_lines cmd in
-  let diversions = Hashtbl.create (List.length lines) in
-  List.iter (
-    fun line ->
-    let items = string_split " " line in
-    match items with
-    | ["diversion"; "of"; path; "to"; real_path; "by"; pkg] ->
-      Hashtbl.add diversions path real_path
-    | _ -> ()
-  ) lines;
+  if Hashtbl.length dpkg_diversions = 0 then (
+    let cmd = sprintf "%s --list" Config.dpkg_divert in
+    let lines = run_command_get_lines cmd in
+    List.iter (
+      fun line ->
+        let items = string_split " " line in
+        match items with
+        | ["diversion"; "of"; path; "to"; real_path; "by"; pkg] ->
+          Hashtbl.add dpkg_diversions path real_path
+        | _ -> ()
+    ) lines
+  );
   let cmd =
     sprintf "%s --listfiles %s | grep '^/' | grep -v '^/.$' | sort -u"
       Config.dpkg_query
@@ -155,7 +157,7 @@ let dpkg_get_all_files pkgs =
 	try string_prefix "/etc/" path && (lstat path).st_kind = S_REG
 	with Unix_error _ -> false in
       let source_path =
-        try Hashtbl.find diversions path
+        try Hashtbl.find dpkg_diversions path
         with Not_found -> path in
       { ft_path = path; ft_source_path = source_path; ft_config = config }
   ) lines
-- 
1.9.0




More information about the Libguestfs mailing list