* http://helm.cs.unibo.it/
*)
-exception Key_already_in of string;;
-exception Key_not_found of string;;
+open Http_getter_types
class map dbname =
let perm = 420 in (* permission 644 in decimal notation *)
- let open_dbm () = Dbm.opendbm dbname [ Dbm.Dbm_rdwr; Dbm.Dbm_create ] perm in
+ let open_dbm () =
+ Http_getter_misc.mkdir ~parents:true (Filename.dirname dbname);
+ Dbm.opendbm dbname [ Dbm.Dbm_rdwr; Dbm.Dbm_create ] perm
+ in
object (self)
theory:/path/t.theory into theory:/path/t/index.theory
when cic:/path/t/ exists *)
method private normalize_key key =
- if Pcre.pmatch ~rex:index_RE key then
+ if Pcre.pmatch ~rex:index_RE key &&
+ (try ignore (Dbm.find db key); false with Not_found -> true)
+ then
(* we substitute /index.theory with .theory *)
String.sub key 0 (String.length key - 13) ^ ".theory"
else key
method add key value =
self#doWriter (lazy (
try
- Dbm.add db (self#normalize_key key) value
+ Dbm.add db key value
with Dbm.Dbm_error "Entry already exists" -> raise (Key_already_in key)
))
method replace key value =
self#doWriter (lazy (
- Dbm.replace db (self#normalize_key key) value
+ Dbm.replace db key value
))
method remove key =
self#doWriter (lazy (
try
- Dbm.remove db (self#normalize_key key)
+ Dbm.remove db key
with Dbm.Dbm_error "dbm_delete" -> raise (Key_not_found key)
))