[Pkg-libvirt-commits] [libguestfs] 03/61: builder: do not parse the same repository file name twice

Hilko Bengen bengen at moszumanska.debian.org
Sat Mar 29 14:36:20 UTC 2014


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

bengen pushed a commit to branch experimental
in repository libguestfs.

commit e589b6e82336dec3abb6e2b1aea31313b7ec5172
Author: Pino Toscano <ptoscano at redhat.com>
Date:   Thu Mar 20 16:57:29 2014 +0100

    builder: do not parse the same repository file name twice
    
    When parsing the repository configuration files, track the file names
    parsed, and in case of same file name in multiple location consider only
    the one in the directory coming before others in the prioritised list of
    paths.
    
    This way it is possible to "shadow" a configuration file in a system
    path with one with the same name in a local directory, for example.
---
 builder/sources.ml | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/builder/sources.ml b/builder/sources.ml
index 1fee65e..90716bd 100644
--- a/builder/sources.ml
+++ b/builder/sources.ml
@@ -28,6 +28,8 @@ type source = {
   gpgkey : string option;
 }
 
+module StringSet = Set.Make (String)
+
 let parse_conf ~prog ~debug file =
   if debug then (
     eprintf (f_"%s: trying to read %s\n") prog file;
@@ -96,15 +98,23 @@ let read_sources ~prog ~debug =
     | None -> dirs
     | Some dir -> dir :: dirs in
   let dirs = List.map (fun x -> x // "repos.d") dirs in
-  List.fold_right (
-    fun dir acc ->
+  let fnseen = ref StringSet.empty in
+  List.fold_left (
+    fun acc dir ->
       let files =
         try List.filter filter_filenames (Array.to_list (Sys.readdir dir))
         with Sys_error _ -> [] in
-      let files = List.map (fun x -> dir // x) files in
+      let files = List.filter (fun x -> StringSet.mem x !fnseen <> true) files in
       List.fold_left (
         fun acc file ->
-          try merge_sources acc (parse_conf ~prog ~debug file) with
+          try (
+            let s = merge_sources acc (parse_conf ~prog ~debug (dir // file)) in
+            (* Add the current file name to the set only if its parsing
+             * was successful.
+             *)
+            fnseen := StringSet.add file !fnseen;
+            s
+          ) with
           | Unix_error (code, fname, _) ->
             if debug then (
               eprintf (f_"%s: file error: %s: %s\n") prog fname (error_message code)
@@ -116,4 +126,4 @@ let read_sources ~prog ~debug =
             );
             acc
       ) acc files
-  ) dirs []
+  ) [] dirs

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-libvirt/libguestfs.git



More information about the Pkg-libvirt-commits mailing list