The unified diff between revisions [94638968..] and [dd4e718c..] is displayed below. It can also be downloaded as a raw diff.

#
#
# patch "database.ml"
#  from [06fe1d1d5d2da0880adc0da73ff75a86b114b946]
#    to [50a5a35ff7dc8d9910fe824e9ff81b6d8afae95b]
#
# patch "query.ml"
#  from [4f5275a8caa6115155468338bef6aa22b1888825]
#    to [f691b2a902e28ebb9503a018f52a1634297b39ed]
#
# patch "view.ml"
#  from [e996eff1992c98cfc0f787d2fa6e804662890253]
#    to [e2d0e8ea6928c04c7002e37d08aee0c5de5a1c3e]
#
# patch "viz_types.ml"
#  from [155a8730aa4d15f76597efa96a689bc01e39b76f]
#    to [000e61799446f6d11caad5379ca79c9ea6ff087e]
#
# patch "viz_types.mli"
#  from [1f4386c49f92acb7c868e93ccf62986219a3da49]
#    to [dcc5514fcad957dbccfe3b83c2878fe91dc605b0]
#
============================================================
--- database.ml	06fe1d1d5d2da0880adc0da73ff75a86b114b946
+++ database.ml	50a5a35ff7dc8d9910fe824e9ff81b6d8afae95b
@@ -182,13 +182,13 @@ let process_neighb_in g s =
   assert (NodeMap.mem child g.nodes) ;
   add_nodes_with_edge g id NEIGHBOUR_IN child REGULAR BRANCHING_NEIGH

-let process_neighb_out db =
+let process_neighb_out all db =
   let is_interesting = is_interesting_neighbour_out db in
   fun g s ->
     let parent = Sqlite3.column_text s 0 in
     let id     = Sqlite3.column_text s 1 in
     assert (NodeMap.mem parent g.nodes) ;
-    if is_interesting parent id
+    if all || is_interesting parent id
     then add_nodes_with_edge g parent REGULAR id NEIGHBOUR_OUT BRANCHING_NEIGH
     else g

@@ -212,7 +212,10 @@ let process_branching_edge g s =
     g


-let fetch_agraph_with_view db base64 (query, query_limit) =
+let fetch_agraph_with_view db base64 query =
+  let { dom = query ;
+	lim = query_limit ;
+	all_propagates = all_propagates } = query in
   let view_name_limit =
     if query_limit <> QUERY_NO_LIMIT
     then view_name_limit
@@ -246,7 +249,7 @@ LEFT OUTER JOIN %s AS D2 ON D2.id = chil
 LEFT OUTER JOIN %s AS D2 ON D2.id = child \
           WHERE D2.id ISNULL"
       view_name_limit view_name_domain
-      (process_neighb_out db) agraph in
+      (process_neighb_out all_propagates db) agraph in

   (* ancestry *)
   let agraph =
@@ -303,7 +306,7 @@ let fetch_with_view query base64 db f =
     String.concat "" [ "X\'" ; Viz_misc.hex_enc s ; "\'" ]

 let fetch_with_view query base64 db f =
-  let (query_domain, query_limit) = query in
+  let { dom = query_domain ; lim = query_limit } = query in

   let register_date_p () =
     match query_limit with
============================================================
--- query.ml	4f5275a8caa6115155468338bef6aa22b1888825
+++ query.ml	f691b2a902e28ebb9503a018f52a1634297b39ed
@@ -27,10 +27,10 @@ module Selector = struct
     end

   let make_selectors g sel =
-    match Agraph.get_query g with
-    | QUERY_ALL, lim ->
+    match (Agraph.get_query g).dom with
+    | QUERY_ALL ->
 	[ escape_selector sel ]
-    | QUERY_BRANCHES br, lim ->
+    | QUERY_BRANCHES br ->
 	List.map
 	  (fun b -> Printf.sprintf "b:%s/%s" (escape_selector b) (escape_selector sel))
 	  br
@@ -46,9 +46,7 @@ module Selector = struct
 	()

   let has_date_limit g =
-    match Agraph.get_query g with
-    | _, QUERY_NO_LIMIT -> false
-    | _ -> true
+    (Agraph.get_query g).lim <> QUERY_NO_LIMIT

   let filter_present g = function
     | `IDS ids when has_date_limit g ->
============================================================
--- view.ml	e996eff1992c98cfc0f787d2fa6e804662890253
+++ view.ml	e2d0e8ea6928c04c7002e37d08aee0c5de5a1c3e
@@ -399,6 +399,7 @@ module Branch_selector = struct
       toggle_renderer : GTree.cell_renderer_toggle ;
       radio_buttons   : GButton.radio_button array ;
       entries         : GEdit.entry array ;
+      propagate_checkb : GButton.toggle_button ;
       mutable selected_b    : int ;
       mutable limit_kind    : int ;
     }
@@ -470,20 +471,20 @@ module Branch_selector = struct
     end ;

     (* The radio buttons for the date limit *)
-    let packing = Ui.category "Date limit" packing in
-    let tooltips = GData.tooltips () in
-    let date_entry_tooltip_text =
-      "Specify a date (YYYY-MM-DD), a tag or a revision id" in
-    let tbl =
-      GPack.table
-	~columns:2 ~rows:3
-	~row_spacings:2 ~col_spacings:4 ~packing () in
-    let b1 =
-      let packing = tbl#attach ~left:0 ~top:0 in
-      GButton.radio_button
-	~label:"_No limit" ~use_mnemonic:true ~active:true ~packing () in
-    let group = b1#group in
-    let b2, entry_from, entry_to =
+    let b1, b2, entry_from, entry_to =
+      let packing = Ui.category "Date limit" packing in
+      let tooltips = GData.tooltips () in
+      let date_entry_tooltip_text =
+	"Specify a date (YYYY-MM-DD), a tag or a revision id" in
+      let tbl =
+	GPack.table
+	  ~columns:2 ~rows:3
+	  ~row_spacings:2 ~col_spacings:4 ~packing () in
+      let b1 =
+	let packing = tbl#attach ~left:0 ~top:0 in
+	GButton.radio_button
+	  ~label:"_No limit" ~use_mnemonic:true ~active:true ~packing () in
+      let group = b1#group in
       let button =
 	GButton.radio_button ~group
 	  ~label:"_Interval limit" ~use_mnemonic:true
@@ -500,8 +501,16 @@ module Branch_selector = struct
       let e2 = GEdit.entry ~packing ~activates_default:true () in
       tooltips#set_tip ~text:date_entry_tooltip_text e2#coerce ;
       ignore (e1#connect#activate (fun () -> e2#misc#grab_focus ())) ;
-      (button, e1, e2) in
+      (b1, button, e1, e2) in

+    (* The check button to select all propagate nodes or not *)
+    let checkb =
+      let packing = Ui.category "Options" packing in
+      GButton.check_button
+	~label:"Display all propagate nodes"
+	~active:false
+	~packing () in
+
     { store = model ;
       branch_column = branch_column ;
       count_column = count_column ;
@@ -513,6 +522,7 @@ module Branch_selector = struct
       w = w ;
       radio_buttons = [| b1 ; b2 |] ;
       entries = [| entry_from ; entry_to |] ;
+      propagate_checkb = checkb ;
       selected_b = 0 ;
       limit_kind = 0 }

@@ -594,7 +604,11 @@ module Branch_selector = struct
 	| _ ->
 	    make_query_limit_interval ctrl query_domain
 	      s.entries.(0)#text s.entries.(1)#text in
-      Some { query = (query_domain, query_limit) ;
+      let query_propagate =
+	s.propagate_checkb#active in
+      Some { query = { dom = query_domain ;
+		       lim = query_limit ;
+		       all_propagates = query_propagate };
 	     preselect = id }
     with
     | Complete.None -> None
============================================================
--- viz_types.ml	155a8730aa4d15f76597efa96a689bc01e39b76f
+++ viz_types.ml	000e61799446f6d11caad5379ca79c9ea6ff087e
@@ -12,7 +12,11 @@ type query_limit =
 type query_limit =
   | QUERY_NO_LIMIT
   | QUERY_BETWEEN of date * date
-type query = query_domain * query_limit
+type query = {
+    dom : query_domain ;
+    lim : query_limit ;
+    all_propagates : bool
+  }

 type select_info = { query : query; preselect : string option; }

============================================================
--- viz_types.mli	1f4386c49f92acb7c868e93ccf62986219a3da49
+++ viz_types.mli	dcc5514fcad957dbccfe3b83c2878fe91dc605b0
@@ -14,7 +14,11 @@ type query_limit =
 type query_limit =
   | QUERY_NO_LIMIT
   | QUERY_BETWEEN of date * date
-type query = query_domain * query_limit
+type query = {
+    dom : query_domain ;
+    lim : query_limit ;
+    all_propagates : bool
+  }

 type select_info = { query : query; preselect : string option; }