if remote () then
ls_remote regexp
else begin
- let pat =
- Pcre.replace ~rex:trailing_slash_RE ("^" ^ regexp)
-(* (match lsuri with Cic p -> ("cic:" ^ p) | Theory p -> ("theory:" ^ p)) *)
- in
+ let looking_for_dir = Pcre.pmatch ~rex:trailing_slash_RE regexp in
+ let pat = Pcre.replace ~rex:trailing_slash_RE ("^" ^ regexp) in
let (dir_RE, obj_RE) =
(Pcre.regexp (pat ^ "/"), Pcre.regexp (pat ^ "(\\.|$)"))
in
(* BLEARGH Dbm module lacks support for fold-like functions *)
(fun key _ ->
match key with
- | uri when Pcre.pmatch ~rex:dir_RE uri -> (* directory hit *)
+ | uri when looking_for_dir && Pcre.pmatch ~rex:dir_RE uri ->
+ (* directory hit *)
let localpart = Pcre.replace ~rex:dir_RE uri in
if Pcre.pmatch ~rex:no_slashes_RE localpart then
store_obj localpart
else
store_dir localpart
- | uri when Pcre.pmatch ~rex:obj_RE uri -> (* file hit *)
+ | uri when (not looking_for_dir) && Pcre.pmatch ~rex:obj_RE uri ->
+ (* file hit *)
store_obj (Pcre.replace ~rex:til_slash_RE uri)
| uri -> () (* miss *));
let ls_items = ref [] in