Fossil SCM
Give the correct count of check-ins for /timeline displays that include the from=, to=, and chng= query parameters.
Commit
9dce5ffe5f3f6e1482c4f0cf52b861f292f89aefc5d5c3d32117d9c5fabfd276
Parent
9826bd007a9a5af…
1 file changed
+10
-3
+10
-3
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -1888,15 +1888,13 @@ | ||
| 1888 | 1888 | ); |
| 1889 | 1889 | if( p ){ |
| 1890 | 1890 | blob_init(&ins, 0, 0); |
| 1891 | 1891 | blob_append_sql(&ins, "INSERT INTO pathnode(x) VALUES(%d)", p->rid); |
| 1892 | 1892 | p = p->u.pTo; |
| 1893 | - nNodeOnPath = 1; | |
| 1894 | 1893 | while( p ){ |
| 1895 | 1894 | blob_append_sql(&ins, ",(%d)", p->rid); |
| 1896 | 1895 | p = p->u.pTo; |
| 1897 | - nNodeOnPath++; | |
| 1898 | 1896 | } |
| 1899 | 1897 | } |
| 1900 | 1898 | path_reset(); |
| 1901 | 1899 | db_multi_exec("%s", blob_str(&ins)/*safe-for-%s*/); |
| 1902 | 1900 | blob_reset(&ins); |
| @@ -1925,17 +1923,26 @@ | ||
| 1925 | 1923 | } |
| 1926 | 1924 | } |
| 1927 | 1925 | db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related"); |
| 1928 | 1926 | } |
| 1929 | 1927 | blob_append_sql(&sql, " AND event.objid IN pathnode"); |
| 1930 | - addFileGlobExclusion(zChng, &sql); | |
| 1928 | + if( zChng && zChng[0] ){ | |
| 1929 | + db_multi_exec( | |
| 1930 | + "DELETE FROM pathnode " | |
| 1931 | + " WHERE NOT EXISTS(SELECT 1 FROM mlink, filename" | |
| 1932 | + " WHERE mlink.mid=x" | |
| 1933 | + " AND mlink.fnid=filename.fnid AND %s)", | |
| 1934 | + glob_expr("filename.name", zChng) | |
| 1935 | + ); | |
| 1936 | + } | |
| 1931 | 1937 | tmFlags |= TIMELINE_DISJOINT; |
| 1932 | 1938 | tmFlags &= ~TIMELINE_CHPICK; |
| 1933 | 1939 | db_multi_exec("%s", blob_sql_text(&sql)); |
| 1934 | 1940 | if( advancedMenu ){ |
| 1935 | 1941 | style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0); |
| 1936 | 1942 | } |
| 1943 | + nNodeOnPath = db_int(0, "SELECT count(*) FROM temp.pathnode"); | |
| 1937 | 1944 | blob_appendf(&desc, "%d check-ins going from ", nNodeOnPath); |
| 1938 | 1945 | blob_appendf(&desc, "%z[%h]</a>", href("%R/info/%h", zFrom), zFrom); |
| 1939 | 1946 | blob_append(&desc, " to ", -1); |
| 1940 | 1947 | blob_appendf(&desc, "%z[%h]</a>", href("%R/info/%h",zTo), zTo); |
| 1941 | 1948 | if( related ){ |
| 1942 | 1949 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1888,15 +1888,13 @@ | |
| 1888 | ); |
| 1889 | if( p ){ |
| 1890 | blob_init(&ins, 0, 0); |
| 1891 | blob_append_sql(&ins, "INSERT INTO pathnode(x) VALUES(%d)", p->rid); |
| 1892 | p = p->u.pTo; |
| 1893 | nNodeOnPath = 1; |
| 1894 | while( p ){ |
| 1895 | blob_append_sql(&ins, ",(%d)", p->rid); |
| 1896 | p = p->u.pTo; |
| 1897 | nNodeOnPath++; |
| 1898 | } |
| 1899 | } |
| 1900 | path_reset(); |
| 1901 | db_multi_exec("%s", blob_str(&ins)/*safe-for-%s*/); |
| 1902 | blob_reset(&ins); |
| @@ -1925,17 +1923,26 @@ | |
| 1925 | } |
| 1926 | } |
| 1927 | db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related"); |
| 1928 | } |
| 1929 | blob_append_sql(&sql, " AND event.objid IN pathnode"); |
| 1930 | addFileGlobExclusion(zChng, &sql); |
| 1931 | tmFlags |= TIMELINE_DISJOINT; |
| 1932 | tmFlags &= ~TIMELINE_CHPICK; |
| 1933 | db_multi_exec("%s", blob_sql_text(&sql)); |
| 1934 | if( advancedMenu ){ |
| 1935 | style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0); |
| 1936 | } |
| 1937 | blob_appendf(&desc, "%d check-ins going from ", nNodeOnPath); |
| 1938 | blob_appendf(&desc, "%z[%h]</a>", href("%R/info/%h", zFrom), zFrom); |
| 1939 | blob_append(&desc, " to ", -1); |
| 1940 | blob_appendf(&desc, "%z[%h]</a>", href("%R/info/%h",zTo), zTo); |
| 1941 | if( related ){ |
| 1942 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1888,15 +1888,13 @@ | |
| 1888 | ); |
| 1889 | if( p ){ |
| 1890 | blob_init(&ins, 0, 0); |
| 1891 | blob_append_sql(&ins, "INSERT INTO pathnode(x) VALUES(%d)", p->rid); |
| 1892 | p = p->u.pTo; |
| 1893 | while( p ){ |
| 1894 | blob_append_sql(&ins, ",(%d)", p->rid); |
| 1895 | p = p->u.pTo; |
| 1896 | } |
| 1897 | } |
| 1898 | path_reset(); |
| 1899 | db_multi_exec("%s", blob_str(&ins)/*safe-for-%s*/); |
| 1900 | blob_reset(&ins); |
| @@ -1925,17 +1923,26 @@ | |
| 1923 | } |
| 1924 | } |
| 1925 | db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related"); |
| 1926 | } |
| 1927 | blob_append_sql(&sql, " AND event.objid IN pathnode"); |
| 1928 | if( zChng && zChng[0] ){ |
| 1929 | db_multi_exec( |
| 1930 | "DELETE FROM pathnode " |
| 1931 | " WHERE NOT EXISTS(SELECT 1 FROM mlink, filename" |
| 1932 | " WHERE mlink.mid=x" |
| 1933 | " AND mlink.fnid=filename.fnid AND %s)", |
| 1934 | glob_expr("filename.name", zChng) |
| 1935 | ); |
| 1936 | } |
| 1937 | tmFlags |= TIMELINE_DISJOINT; |
| 1938 | tmFlags &= ~TIMELINE_CHPICK; |
| 1939 | db_multi_exec("%s", blob_sql_text(&sql)); |
| 1940 | if( advancedMenu ){ |
| 1941 | style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0); |
| 1942 | } |
| 1943 | nNodeOnPath = db_int(0, "SELECT count(*) FROM temp.pathnode"); |
| 1944 | blob_appendf(&desc, "%d check-ins going from ", nNodeOnPath); |
| 1945 | blob_appendf(&desc, "%z[%h]</a>", href("%R/info/%h", zFrom), zFrom); |
| 1946 | blob_append(&desc, " to ", -1); |
| 1947 | blob_appendf(&desc, "%z[%h]</a>", href("%R/info/%h",zTo), zTo); |
| 1948 | if( related ){ |
| 1949 |