| | @@ -868,11 +868,12 @@ |
| 868 | 868 | ** is iTopRow and numbers increase moving down the timeline. |
| 869 | 869 | ** bg: The background color for this row |
| 870 | 870 | ** r: The "rail" that the node for this row sits on. The left-most |
| 871 | 871 | ** rail is 0 and the number increases to the right. |
| 872 | 872 | ** d: If exists and true then there is a "descender" - an arrow |
| 873 | | - ** coming from the bottom of the page straight up to this node. |
| 873 | + ** coming from the bottom of the page or further down on the page |
| 874 | + ** straight up to this node. |
| 874 | 875 | ** mo: "merge-out". If it exists, this is the rail position |
| 875 | 876 | ** for the upward portion of a merge arrow. The merge arrow goes as |
| 876 | 877 | ** a solid normal merge line up to the row identified by "mu" and |
| 877 | 878 | ** then as a dashed cherrypick merge line up further to "cu". |
| 878 | 879 | ** If this value is omitted if there are no merge children. |
| | @@ -880,11 +881,12 @@ |
| 880 | 881 | ** Only exists if "mo" exists. |
| 881 | 882 | ** cu: Extend the mu merge arrow up to this row as a cherrypick |
| 882 | 883 | ** merge line, if this value exists. |
| 883 | 884 | ** u: Draw a thick child-line out of the top of this node and up to |
| 884 | 885 | ** the node with an id equal to this value. 0 if it is straight to |
| 885 | | - ** the top of the page, -1 if there is no thick-line riser. |
| 886 | + ** the top of the page or just up a little wasy, -1 if there is |
| 887 | + ** no thick-line riser (if the node is a leaf). |
| 886 | 888 | ** sb: Draw a dotted child-line out of the top of this node up to the |
| 887 | 889 | ** node with the id equal to the value. This is like "u" except |
| 888 | 890 | ** that the line is dotted instead of solid and has no arrow. |
| 889 | 891 | ** Mnemonic: "Same Branch". |
| 890 | 892 | ** f: 0x01: a leaf node. |
| | @@ -1495,11 +1497,11 @@ |
| 1495 | 1497 | ** nd Do not highlight the focus check-in |
| 1496 | 1498 | ** v Show details of files changed |
| 1497 | 1499 | ** f=CHECKIN Show family (immediate parents and children) of CHECKIN |
| 1498 | 1500 | ** from=CHECKIN Path from... |
| 1499 | 1501 | ** to=CHECKIN ... to this |
| 1500 | | -** shorest ... show only the shortest path |
| 1502 | +** shortest ... show only the shortest path |
| 1501 | 1503 | ** rel ... also show related checkins |
| 1502 | 1504 | ** uf=FILE_HASH Show only check-ins that contain the given file version |
| 1503 | 1505 | ** chng=GLOBLIST Show only check-ins that involve changes to a file whose |
| 1504 | 1506 | ** name matches one of the comma-separate GLOBLIST |
| 1505 | 1507 | ** brbg Background color from branch name |
| | @@ -1859,10 +1861,11 @@ |
| 1859 | 1861 | db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related"); |
| 1860 | 1862 | } |
| 1861 | 1863 | blob_append_sql(&sql, " AND event.objid IN pathnode"); |
| 1862 | 1864 | addFileGlobExclusion(zChng, &sql); |
| 1863 | 1865 | tmFlags |= TIMELINE_DISJOINT; |
| 1866 | + tmFlags &= ~TIMELINE_CHPICK; |
| 1864 | 1867 | db_multi_exec("%s", blob_sql_text(&sql)); |
| 1865 | 1868 | if( advancedMenu ){ |
| 1866 | 1869 | style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0); |
| 1867 | 1870 | } |
| 1868 | 1871 | blob_appendf(&desc, "%d check-ins going from ", nNodeOnPath); |
| | @@ -1880,11 +1883,11 @@ |
| 1880 | 1883 | }else if( (p_rid || d_rid) && g.perm.Read && zTagSql==0 ){ |
| 1881 | 1884 | /* If p= or d= is present, ignore all other parameters other than n= */ |
| 1882 | 1885 | char *zUuid; |
| 1883 | 1886 | int np, nd; |
| 1884 | 1887 | |
| 1885 | | - tmFlags |= TIMELINE_DISJOINT; |
| 1888 | + tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS; |
| 1886 | 1889 | if( p_rid && d_rid ){ |
| 1887 | 1890 | if( p_rid!=d_rid ) p_rid = d_rid; |
| 1888 | 1891 | if( P("n")==0 ) nEntry = 10; |
| 1889 | 1892 | } |
| 1890 | 1893 | db_multi_exec( |
| | @@ -1948,11 +1951,11 @@ |
| 1948 | 1951 | db_multi_exec("%s", blob_sql_text(&sql)); |
| 1949 | 1952 | if( useDividers ) selectedRid = f_rid; |
| 1950 | 1953 | blob_appendf(&desc, "Parents and children of check-in "); |
| 1951 | 1954 | zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", f_rid); |
| 1952 | 1955 | blob_appendf(&desc, "%z[%S]</a>", href("%R/info/%!S", zUuid), zUuid); |
| 1953 | | - tmFlags |= TIMELINE_DISJOINT; |
| 1956 | + tmFlags |= TIMELINE_XMERGE; |
| 1954 | 1957 | if( advancedMenu ){ |
| 1955 | 1958 | style_submenu_checkbox("unhide", "Unhide", 0, 0); |
| 1956 | 1959 | style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0); |
| 1957 | 1960 | } |
| 1958 | 1961 | }else{ |
| | @@ -1960,13 +1963,14 @@ |
| 1960 | 1963 | int n; |
| 1961 | 1964 | const char *zEType = "event"; |
| 1962 | 1965 | char *zDate; |
| 1963 | 1966 | Blob cond; |
| 1964 | 1967 | blob_zero(&cond); |
| 1968 | + tmFlags |= TIMELINE_FILLGAPS; |
| 1965 | 1969 | if( zChng && *zChng ){ |
| 1966 | 1970 | addFileGlobExclusion(zChng, &cond); |
| 1967 | | - tmFlags |= TIMELINE_DISJOINT; |
| 1971 | + tmFlags |= TIMELINE_XMERGE; |
| 1968 | 1972 | } |
| 1969 | 1973 | if( zUses ){ |
| 1970 | 1974 | blob_append_sql(&cond, " AND event.objid IN usesfile "); |
| 1971 | 1975 | } |
| 1972 | 1976 | if( renameOnly ){ |
| | @@ -2221,15 +2225,15 @@ |
| 2221 | 2225 | } |
| 2222 | 2226 | if( zUses ){ |
| 2223 | 2227 | char *zFilenames = names_of_file(zUses); |
| 2224 | 2228 | blob_appendf(&desc, " using file %s version %z%S</a>", zFilenames, |
| 2225 | 2229 | href("%R/artifact/%!S",zUses), zUses); |
| 2226 | | - tmFlags |= TIMELINE_DISJOINT; |
| 2230 | + tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS; |
| 2227 | 2231 | } |
| 2228 | 2232 | if( renameOnly ){ |
| 2229 | 2233 | blob_appendf(&desc, " that contain filename changes"); |
| 2230 | | - tmFlags |= TIMELINE_DISJOINT|TIMELINE_FRENAMES; |
| 2234 | + tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS; |
| 2231 | 2235 | } |
| 2232 | 2236 | if( forkOnly ){ |
| 2233 | 2237 | blob_appendf(&desc, " associated with forks"); |
| 2234 | 2238 | tmFlags |= TIMELINE_DISJOINT; |
| 2235 | 2239 | } |
| | @@ -2241,11 +2245,11 @@ |
| 2241 | 2245 | blob_appendf(&desc, " that participate in a cherrypick merge"); |
| 2242 | 2246 | tmFlags |= TIMELINE_CHPICK|TIMELINE_DISJOINT; |
| 2243 | 2247 | } |
| 2244 | 2248 | if( zUser ){ |
| 2245 | 2249 | blob_appendf(&desc, " by user %h", zUser); |
| 2246 | | - tmFlags |= TIMELINE_DISJOINT; |
| 2250 | + tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS; |
| 2247 | 2251 | } |
| 2248 | 2252 | if( zTagSql ){ |
| 2249 | 2253 | if( matchStyle==MS_EXACT ){ |
| 2250 | 2254 | if( related ){ |
| 2251 | 2255 | blob_appendf(&desc, " related to %h", zMatchDesc); |
| | @@ -2257,11 +2261,11 @@ |
| 2257 | 2261 | blob_appendf(&desc, " related to tags matching %h", zMatchDesc); |
| 2258 | 2262 | }else{ |
| 2259 | 2263 | blob_appendf(&desc, " with tags matching %h", zMatchDesc); |
| 2260 | 2264 | } |
| 2261 | 2265 | } |
| 2262 | | - if( !related ) tmFlags |= TIMELINE_DISJOINT; |
| 2266 | + tmFlags |= TIMELINE_XMERGE | TIMELINE_FILLGAPS; |
| 2263 | 2267 | } |
| 2264 | 2268 | addFileGlobDescription(zChng, &desc); |
| 2265 | 2269 | if( rAfter>0.0 ){ |
| 2266 | 2270 | if( rBefore>0.0 ){ |
| 2267 | 2271 | blob_appendf(&desc, " occurring between %h and %h.<br />", |
| 2268 | 2272 | |