# # # patch "database.ml" # from [8009b3ef665dc68c2dd896cd9fe88d603c1b045b] # to [c5ffc38edb114a53d7056deb7c38bcfb5730e7f9] # # patch "monotone.ml" # from [d89eed18743c8c661fc086f813fa268074d57459] # to [737dad9a128cc024e47dd1c73eef94b060702e5b] # # patch "query.ml" # from [718b3407f7a8d7e6537f686619567fea99f932c2] # to [0fd315d4d46d9b3b34878d07f9e50f0d74a91850] # # patch "view.ml" # from [2b7975b76ad4df6b4c97fdf20d223e9fae3c5e61] # to [a05d8d4b2d95d01d940673f5adb1f8491b469514] # # patch "viz_types.ml" # from [b177305737662bf59ed350101297330d685fdece] # to [df6981aa67f5a7519900dbb06f38b96771db6919] # # patch "viz_types.mli" # from [ef5c4f984fb95cf80c5e14ed740614a6547daf39] # to [dc1b80f54bce2e6327b1d8de16d0a5762f3293a9] # ============================================================ --- database.ml 8009b3ef665dc68c2dd896cd9fe88d603c1b045b +++ database.ml c5ffc38edb114a53d7056deb7c38bcfb5730e7f9 @@ -270,7 +270,7 @@ LEFT OUTER JOIN %s AS D2 ON D2.id = chil let agraph = begin match query with - | QUERY_BRANCHES [ _ ] -> + | [ _ ] -> (* we already have the branching edges *) agraph | _ -> @@ -291,9 +291,7 @@ LEFT OUTER JOIN %s AS D2 ON D2.id = chil (* reconnect disconnected components *) let agraph = - if query = QUERY_ALL - then agraph - else Components.reconnect (fetch_children db) agraph in + Components.reconnect (fetch_children db) agraph in agraph @@ -318,18 +316,13 @@ let fetch_with_view query base64 db f = | _ -> () in let view_query_domain = - match query_domain with - | QUERY_ALL -> Printf.sprintf + Printf.sprintf "CREATE TEMP TABLE %s AS \ - SELECT DISTINCT id FROM revision_certs \ - WHERE name = 'branch'" view_name_domain - | QUERY_BRANCHES q -> Printf.sprintf - "CREATE TEMP TABLE %s AS \ SELECT DISTINCT id FROM revision_certs \ WHERE name = 'branch' AND value IN (%s)" view_name_domain (String.concat ", " - (List.map (encode_quote base64) q)) in + (List.map (encode_quote base64) query_domain)) in let view_query_date_limit () = Printf.sprintf ============================================================ --- monotone.ml d89eed18743c8c661fc086f813fa268074d57459 +++ monotone.ml 737dad9a128cc024e47dd1c73eef94b060702e5b @@ -87,29 +87,28 @@ let select mtn selector = -let selectors_of_query = function - | { dom = QUERY_ALL ; - lim = QUERY_NO_LIMIT } -> - [] - | { dom = QUERY_BRANCHES b ; - lim = QUERY_NO_LIMIT } -> - List.map (fun s -> "b:" ^ s) b - | { dom = QUERY_ALL ; - lim = QUERY_BETWEEN (d1, d2) } -> - [ Printf.sprintf "l:%s/e:%s" d1 d2 ] - | { dom = QUERY_BRANCHES b ; - lim = QUERY_BETWEEN (d1, d2) } -> +let selectors_of_query q = + match q.lim with + | QUERY_NO_LIMIT -> + List.map (fun b -> b, "b:" ^ b) q.dom + | QUERY_BETWEEN (d1, d2) -> let d = Printf.sprintf "l:%s/e:%s" d1 d2 in - List.map (fun s -> Printf.sprintf "%s/b:%s" d s) b + List.map (fun b -> b, Printf.sprintf "%s/b:%s" d b) q.dom let get_ids mtn query = List.fold_left - (fun set s -> + (fun set (b, s) -> List.fold_left - (fun set id -> IdSet.add id set) + (fun set id -> + try + let bl = NodeMap.find id set in + bl := b :: !bl ; + set + with Not_found -> + NodeMap.add id (ref [ b ]) set) set (select mtn s)) - IdSet.empty + NodeMap.empty (selectors_of_query query) let graph mtn = @@ -149,11 +148,22 @@ let ensure_node agraph id kind family = let n = { id = id ; kind = kind ; family = family } in { agraph with nodes = NodeMap.add id n agraph.nodes } -let ensure_edge agraph i1 i2 e = +let edge_kind b_set i1 i2 = + try + let b1 = NodeMap.find i1 b_set in + let b2 = NodeMap.find i2 b_set in + if List.exists (fun b -> List.mem b !b1) !b2 + then SAME_BRANCH + else BRANCHING + with Not_found -> + BRANCHING_NEIGH + +let ensure_edge agraph b_set i1 i2 = + let e = edge_kind b_set i1 i2 in { agraph with ancestry = EdgeMap.add (i1, i2) e agraph.ancestry } let interesting_node id_set id = - id_set = IdSet.empty || IdSet.mem id id_set + id_set = NodeMap.empty || NodeMap.mem id id_set let add_node ids agraph id p = if interesting_node ids id @@ -170,9 +180,7 @@ let add_node ids agraph id p = ensure_node agraph id_p (if is_reg then REGULAR else NEIGHBOUR_IN) [ id, CHILD ] in - ensure_edge agraph - id_p id - (if is_reg then SAME_BRANCH else BRANCHING_NEIGH)) + ensure_edge agraph ids id_p id) agraph p end else @@ -189,8 +197,7 @@ let add_node ids agraph id p = let agraph = ensure_node agraph id_p REGULAR [ id, CHILD ] in - ensure_edge agraph - id_p id BRANCHING_NEIGH) + ensure_edge agraph ids id_p id) agraph p let grab_tags mtn agraph = @@ -219,5 +226,5 @@ let agraph mtn query = (* TODO: - the "all_propagates" switch - - branching edges + - get rid of "QUERY_ALL" *) ============================================================ --- query.ml 718b3407f7a8d7e6537f686619567fea99f932c2 +++ query.ml 0fd315d4d46d9b3b34878d07f9e50f0d74a91850 @@ -28,13 +28,10 @@ module Selector = struct end let make_selectors g sel = - match (Agraph.get_query g).dom with - | QUERY_ALL -> - [ escape_selector sel ] - | QUERY_BRANCHES br -> - List.map - (fun b -> Printf.sprintf "b:%s/%s" (escape_selector b) (escape_selector sel)) - br + let br = (Agraph.get_query g).dom in + List.map + (fun b -> Printf.sprintf "b:%s/%s" (escape_selector b) sel) + br let running_select = ref None ============================================================ --- view.ml 2b7975b76ad4df6b4c97fdf20d223e9fae3c5e61 +++ view.ml a05d8d4b2d95d01d940673f5adb1f8491b469514 @@ -527,21 +527,17 @@ module Branch_selector = struct s.view#scroll_to_cell path (s.view#get_column 0) let get_query_domain s = - let all = ref true in let acc = ref [] in s.store#foreach (fun path row -> let v = s.store#get ~row ~column:s.in_view_column in - all := !all && v ; if v then begin let b = s.store#get ~row ~column:s.branch_column in acc := b :: !acc end ; false) ; - if !all - then QUERY_ALL - else QUERY_BRANCHES !acc + !acc let future = "9999-12" let past = "0001-01" @@ -710,10 +706,7 @@ module Branch_selector = struct let set_state s ctrl ?id state = s.w#misc#hide () ; let (domain, limit_kind, entries_text) = state in - let in_domain v = - match domain with - | QUERY_ALL -> true - | QUERY_BRANCHES b -> List.mem v b in + let in_domain v = List.mem v domain in s.selected_b <- 0 ; s.store#foreach (fun path row -> ============================================================ --- viz_types.ml b177305737662bf59ed350101297330d685fdece +++ viz_types.ml df6981aa67f5a7519900dbb06f38b96771db6919 @@ -5,9 +5,7 @@ module StringMap = Map.Make(String) module StringMap = Map.Make(String) -type query_domain = - | QUERY_ALL - | QUERY_BRANCHES of string list +type query_domain = string list type date = string type query_limit = | QUERY_NO_LIMIT ============================================================ --- viz_types.mli ef5c4f984fb95cf80c5e14ed740614a6547daf39 +++ viz_types.mli dc1b80f54bce2e6327b1d8de16d0a5762f3293a9 @@ -7,9 +7,7 @@ module StringMap : Map.S with type key = module StringMap : Map.S with type key = string -type query_domain = - | QUERY_ALL - | QUERY_BRANCHES of string list +type query_domain = string list type date = string type query_limit = | QUERY_NO_LIMIT