On Mon, Mar 10, 2014 at 11:33:51AM +0100, Hilko Bengen wrote:
  and munge files =
 -  let files = List.sort compare files in
 +  let paths =
 +    List.sort compare
 +      (List.map (fun file -> file.ft_path) files) in
  
    let rec stat_is_dir dir =
      try (stat dir).st_kind = S_DIR with Unix_error _ -> false
 @@ -336,7 +338,7 @@ and munge files =
    in
  
    let insert_dir, dir_seen =
 -    let h = Hashtbl.create (List.length files) in
 +    let h = Hashtbl.create (List.length paths) in
      let insert_dir dir = Hashtbl.replace h dir true in
      let dir_seen dir = Hashtbl.mem h dir in
      insert_dir, dir_seen
 @@ -385,10 +387,17 @@ and munge files =
        (* Have we seen this parent directory before? *)
        let dir = Filename.dirname file in
        if not (dir_seen dir) then
 -        loop (dir :: file :: rest)
 +        loop (dir :: rest) 
Why did file get dropped from the list here?
        else
 -        file :: loop rest
 +        loop rest 
And here?
    in
 -  let files = loop files in
 +  let dir_paths = loop paths in
 +
 +  let dirs = List.map (fun path ->
 +    {ft_path = path; ft_source_path = path; ft_config = false}
 +  ) dir_paths in
 +  let files = List.filter (fun file ->
 +    not (dir_seen file.ft_path)
 +  ) files in
  
 -  files
 +  dirs @ files 
This seems to change the result of this (very important and complex)
function.
Rich.
-- 
Richard Jones, Virtualization Group, Red Hat 
http://people.redhat.com/~rjones
Read my programming blog: 
http://rwmj.wordpress.com
Fedora now supports 80 OCaml packages (the OPEN alternative to F#)