The unified diff between revisions [66751aed..] and [84b77f76..] is displayed below. It can also be downloaded as a raw diff.
#
#
# patch "git.ml"
# from [d46a4993e5167aea7e5a1d5e2bee71f7f00ae859]
# to [1a02999ff418b308b65af1f90f0cc4776339a298]
#
# patch "main.ml"
# from [0ff0e7377579201a776760f2ecff06dc8879035c]
# to [c4252b62386dbca252641e1cca98cb4509ccc0b3]
#
============================================================
--- git.ml d46a4993e5167aea7e5a1d5e2bee71f7f00ae859
+++ git.ml 1a02999ff418b308b65af1f90f0cc4776339a298
@@ -18,10 +18,23 @@ type t = {
git_kind : [`LINUS|`PASKY] ;
head : id ;
get_commit : (string -> commit) ;
- get_changeset : (string -> changeset)
+ get_changeset : (string -> changeset) ;
+ tags : (string * string) list ;
}
+let id_of_file ?dir f =
+ with_file_in
+ input_line
+ (match dir with None -> f | Some d -> Filename.concat d f)
+let fetch_tags git_dir =
+ try
+ let tags_dir = Filename.concat git_dir "tags" in
+ List.map
+ (fun t -> (id_of_file ~dir:tags_dir t, t))
+ (Array.to_list (Sys.readdir tags_dir))
+ with _ -> []
+
let fetch_history base id =
log "exec" "### exec: Running rev-tree %s'" id ;
match Gspawn.sync
@@ -190,16 +203,15 @@ let open_db db_name =
let d, kind =
if Sys.file_exists ds then ds, `PASKY else
if Sys.file_exists dl then dl, `LINUS else failwith "unknown" in
- let head =
- string_slice ~e:(-1)
- (with_file_in input_channel (Filename.concat d "HEAD")) in
+ let head = id_of_file ~dir:d "HEAD" in
let get_commit = Viz_misc.make_cache (get_commit_object db_name) in
let get_changeset = Viz_misc.make_cache (get_changeset kind db_name get_commit) in
{ base = db_name ;
git_kind = kind ;
head = head ;
get_commit = get_commit ;
- get_changeset = get_changeset }
+ get_changeset = get_changeset ;
+ tags = fetch_tags d }
with Failure _ | Sys_error _ ->
Viz_types.errorf "Not a git db: %s" db_name
@@ -224,10 +236,15 @@ let fetch_certs_and_revision d id =
c_name = "" ; c_value = "" ;
c_signer_id = "" ; c_signature = SIG_OK } in
let c = d.get_commit id in
- { (fetch_revision d id) with certs = [
- { fake_cert with c_name = "author" ; c_value = c.author } ;
- { fake_cert with c_name = "committer" ; c_value = c.committer } ;
- { fake_cert with c_name = "changelog" ; c_value = c.log } ]
+ let cert_list =
+ try
+ let tag = List.assoc id d.tags in
+ [ { fake_cert with c_name = "tag" ; c_value = tag } ]
+ with Not_found -> [] in
+ { (fetch_revision d id) with certs =
+ { fake_cert with c_name = "author" ; c_value = c.author } ::
+ { fake_cert with c_name = "committer" ; c_value = c.committer } ::
+ { fake_cert with c_name = "changelog" ; c_value = c.log } :: cert_list
}
(* for autocolor by keyid *)
@@ -239,10 +256,17 @@ let fetch_cert_value d id = function
let a = (d.get_commit id).author in
try Scanf.sscanf a "%s@>" (fun id -> id) with _ -> a
]
+ | "tag" -> begin
+ try [ List.assoc id d.tags ]
+ with Not_found -> []
+ end
| _ -> []
(* find by tag *)
-let get_matching_tags d p = []
+let get_matching_tags d p =
+ List.filter
+ (fun (_, t) -> p t)
+ d.tags
(* find by date *)
let get_matching_dates d s = []
============================================================
--- main.ml 0ff0e7377579201a776760f2ecff06dc8879035c
+++ main.ml c4252b62386dbca252641e1cca98cb4509ccc0b3
@@ -36,7 +36,7 @@ let main =
let main =
let w = GWindow.window
- ~title:"Monotone-viz"
+ ~title:"git-viz"
~icon:(Lazy.force Icon.monotone) () in
ignore (w#connect#destroy GMain.quit) ;