open Common
(*****************************************************************************)
-(* Glimpse *)
+(* Types *)
(*****************************************************************************)
(* was first used for LFS, then a little for cocci, and then for aComment *)
+type glimpse_search =
+ (* -i insensitive search *)
+ | GlimpseCaseInsensitive
+ (* -w match on complete words. But not always good idea, for instance
+ * if file contain chazarain_j then dont work with -w
+ *)
+ | GlimpseWholeWord
+
+let default_glimpse_search = [GlimpseWholeWord]
+
+let s_of_glimpse_search = function
+ | GlimpseCaseInsensitive -> "-i"
+ | GlimpseWholeWord -> "-w"
+
+
+type glimpsedir = Common.dirname
+
+(*****************************************************************************)
+(* Helpers *)
+(*****************************************************************************)
+
let check_have_glimpse () =
let xs =
Common.cmd_to_list ("glimpse -V") +> Common.exclude Common.null_string in
| _ -> failwith "glimpse not found or bad version"
)
+let s_of_glimpse_options xs =
+ xs +> List.map s_of_glimpse_search +> Common.join " "
+
+
+(*****************************************************************************)
+(* Indexing *)
+(*****************************************************************************)
(*
* note:
* the case of compressed file first
* - -F receive the list of files to index from stdin
* - -H target index dir
+ * - -n for indexing numbers as sometimes some glimpse request are looking
+ * for a number
*
*
* Note que glimpseindex index pas forcement tous les fichiers texte.
* ex: glimpseindex -o -H . home
*
*)
+let glimpse_cmd s = spf "glimpseindex -o -H %s -n -F" s
+
let glimpseindex ext dir indexdir =
check_have_glimpse ();
Common.command2(spf "mkdir -p %s" indexdir);
Common.command2
- (spf "find %s -name \"*.%s\" | glimpseindex -o -H %s -F"
- dir ext indexdir
+ (spf "find %s -name \"*.%s\" | %s"
+ dir ext (glimpse_cmd indexdir)
);
()
-type glimpse_search =
- (* -i insensitive search *)
- | GlimpseCaseInsensitive
- (* -w match on complete words. But not always good idea, for instance
- * if file contain chazarain_j then dont work with -w
- *)
- | GlimpseWholeWord
-
-let default_glimpse_search = [GlimpseWholeWord]
-
+let glimpseindex_files files indexdir =
+ check_have_glimpse ();
+ Common.command2(spf "mkdir -p %s" indexdir);
+ let tmpfile = Common.new_temp_file "glimpse" "list" in
+ (* "/tmp/pad_glimpseindex_files.list" *)
+
+ Common.uncat files tmpfile;
+ Common.command2
+ (spf "cat %s | %s" tmpfile (glimpse_cmd indexdir));
+ ()
-let s_of_glimpse_search = function
- | GlimpseCaseInsensitive -> "-i"
- | GlimpseWholeWord -> "-w"
-let s_of_glimpse_options xs =
- xs +> List.map s_of_glimpse_search +> Common.join " "
+(*****************************************************************************)
+(* Searching *)
+(*****************************************************************************)
(* note:
* ex: glimpse -y -H . -N -W -w pattern;pattern2
*
*)
-let glimpse query ?(options= default_glimpse_search) dir =
+let glimpse query ?(options=default_glimpse_search) dir =
let str_options = s_of_glimpse_options options in
let res =
Common.cmd_to_list
(* grep -i -l -I *)
let grep query =
raise Todo
+
+
+(*
+check_have_position_index
+
+let glimpseindex_position: string -> ... (filename * int) list
+let glimpse_position: string -> ... (filename * int) list
+*)