open Common type config_file = { basedir : int option ; } let ignored_packages = ref [] let default = { basedir = None } let config_cache = Hashtbl.create 16 let read dir = try Hashtbl.find config_cache dir with Not_found -> try let file_name = dir ^ "/.perl_checker" in let fh = open_in file_name in let config = fold_lines (fun config line -> match words line with | [ "Basedir"; ".." ] -> { basedir = Some 1 } | [ "Basedir"; "../.." ] -> { basedir = Some 2 } | [ "Basedir"; "../../.." ] -> { basedir = Some 3 } | [] -> config (* blank line *) | [ "Ignore"; pkg ] | [ pkg ] (* the deprecated form *) -> lpush ignored_packages pkg; config | _ -> prerr_endline (Printf.sprintf "bad line \"%s\" in %s" line file_name); config ) default fh in Hashtbl.add config_cache dir config ; if !Flags.verbose then print_endline_flush ("reading config file " ^ file_name); config with Sys_error _ -> default let rec read_any dir depth = if depth = 0 then () else let _ = read dir in read_any (updir dir 1) (depth - 1)