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#)