let normalize_path s =
let s = Str.global_replace (Str.regexp "//") "/" s in
let l = Str.split (Str.regexp "/") s in
- let rec aux = function
- | [] -> []
- | he::".."::tl -> aux tl
- | he::"."::tl -> aux (he::tl)
- | he::tl -> he :: aux tl
+ let rec aux acc = function
+ | [] -> acc
+ | he::"."::tl -> aux acc (he::tl)
+ | he::".."::tl when he <> ".." -> aux [] (acc @ tl)
+ | he::tl -> aux (acc@[he]) tl
in
(if Str.string_match (Str.regexp "^/") s 0 then "/" else "") ^
- String.concat "/" (aux l)
+ String.concat "/" (aux [] l)
^ (if Str.string_match (Str.regexp "/$") s 0 then "/" else "")
;;
try
if (Unix.stat path).Unix.st_kind = Unix.S_REG then path
else aux tl
- with Unix.Unix_error _ -> aux tl
+ with Unix.Unix_error _ as exn ->
+ aux tl
in
try
aux paths
parse (UriDep (UriManager.uri_of_string u) :: acc)
| [< '("IDENT", "include"); '("QSTRING", fname) >] ->
parse (IncludeDep fname :: acc)
+ | [< '("IDENT", "include'"); '("QSTRING", fname) >] ->
+ parse (IncludeDep fname :: acc)
| [< '("EOI", _) >] -> acc
| [< 'tok >] -> parse acc
| [< >] -> acc) tok_stream
try
let path = HExtlib.find_in include_paths file in
let path = absolutize path in
- (* HLog.debug ("file "^file^" resolved as "^path); *)
+(* HLog.debug ("file "^file^" resolved as "^path); *)
let rootpath, root, buri =
try
let mburi = Helm_registry.get "matita.baseuri" in
let buri = List.assoc "baseuri" (load_root_file rootpath) in
rootpath, Filename.dirname rootpath, buri
in
- (* HLog.debug ("file "^file^" rooted by "^rootpath^""); *)
+(* HLog.debug ("file "^file^" rooted by "^rootpath^""); *)
let uri = Http_getter_misc.strip_trailing_slash buri in
if String.length uri < 5 || String.sub uri 0 5 <> "cic:/" then
HLog.error (rootpath ^ " sets an incorrect baseuri: " ^ buri);
ensure_trailing_slash root, remove_trailing_slash uri, path
with Failure "find_in" ->
+ HLog.error ("We are in: " ^ Sys.getcwd ());
HLog.error ("Unable to find: "^file^"\nPaths explored:");
List.iter (fun x -> HLog.error (" - "^x)) include_paths;
raise (NoRootFor file)