Fossil SCM
Expand the dates in the timeline description when using punctuationless dates in the query parameters.
Commit
99abe50b1fffc1942a67cd43cd18930f443726c65a6695f1769ecbdb2c1e14c2
Parent
437f39b87c3340c…
1 file changed
+8
-7
+8
-7
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -1024,11 +1024,11 @@ | ||
| 1024 | 1024 | |
| 1025 | 1025 | /* |
| 1026 | 1026 | ** Convert a symbolic name used as an argument to the a=, b=, or c= |
| 1027 | 1027 | ** query parameters of timeline into a julianday mtime value. |
| 1028 | 1028 | */ |
| 1029 | -double symbolic_name_to_mtime(const char *z){ | |
| 1029 | +double symbolic_name_to_mtime(const char *z, const char **pzDisplay){ | |
| 1030 | 1030 | double mtime; |
| 1031 | 1031 | int rid; |
| 1032 | 1032 | const char *zDate; |
| 1033 | 1033 | if( z==0 ) return -1.0; |
| 1034 | 1034 | if( fossil_isdate(z) ){ |
| @@ -1037,10 +1037,11 @@ | ||
| 1037 | 1037 | } |
| 1038 | 1038 | zDate = fossil_expand_datetime(z, 1); |
| 1039 | 1039 | if( zDate!=0 |
| 1040 | 1040 | && (mtime = db_double(0.0, "SELECT julianday(%Q,fromLocal())", zDate))>0.0 |
| 1041 | 1041 | ){ |
| 1042 | + if( pzDisplay ) *pzDisplay = fossil_strdup(zDate); | |
| 1042 | 1043 | return mtime; |
| 1043 | 1044 | } |
| 1044 | 1045 | rid = symbolic_name_to_rid(z, "*"); |
| 1045 | 1046 | if( rid ){ |
| 1046 | 1047 | mtime = db_double(0.0, "SELECT mtime FROM event WHERE objid=%d", rid); |
| @@ -2093,13 +2094,13 @@ | ||
| 2093 | 2094 | if( zSearch ){ |
| 2094 | 2095 | blob_append_sql(&cond, |
| 2095 | 2096 | " AND (event.comment LIKE '%%%q%%' OR event.brief LIKE '%%%q%%')", |
| 2096 | 2097 | zSearch, zSearch); |
| 2097 | 2098 | } |
| 2098 | - rBefore = symbolic_name_to_mtime(zBefore); | |
| 2099 | - rAfter = symbolic_name_to_mtime(zAfter); | |
| 2100 | - rCirca = symbolic_name_to_mtime(zCirca); | |
| 2099 | + rBefore = symbolic_name_to_mtime(zBefore, &zBefore); | |
| 2100 | + rAfter = symbolic_name_to_mtime(zAfter, &zAfter); | |
| 2101 | + rCirca = symbolic_name_to_mtime(zCirca, &zCirca); | |
| 2101 | 2102 | blob_append_sql(&sql, "%s", blob_sql_text(&cond)); |
| 2102 | 2103 | if( rAfter>0.0 ){ |
| 2103 | 2104 | if( rBefore>0.0 ){ |
| 2104 | 2105 | blob_append_sql(&sql, |
| 2105 | 2106 | " AND event.mtime>=%.17g AND event.mtime<=%.17g" |
| @@ -2226,11 +2227,11 @@ | ||
| 2226 | 2227 | zDate = db_text(0, "SELECT min(timestamp) FROM timeline /*scan*/"); |
| 2227 | 2228 | if( (!zDate || !zDate[0]) && ( zAfter || zBefore ) ){ |
| 2228 | 2229 | zDate = mprintf("%s", (zAfter ? zAfter : zBefore)); |
| 2229 | 2230 | } |
| 2230 | 2231 | if( zDate ){ |
| 2231 | - rDate = symbolic_name_to_mtime(zDate); | |
| 2232 | + rDate = symbolic_name_to_mtime(zDate, 0); | |
| 2232 | 2233 | if( db_int(0, |
| 2233 | 2234 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2234 | 2235 | " WHERE blob.rid=event.objid AND mtime<=%.17g%s)", |
| 2235 | 2236 | rDate-ONE_SECOND, blob_sql_text(&cond)) |
| 2236 | 2237 | ){ |
| @@ -2241,11 +2242,11 @@ | ||
| 2241 | 2242 | zDate = db_text(0, "SELECT max(timestamp) FROM timeline /*scan*/"); |
| 2242 | 2243 | if( (!zDate || !zDate[0]) && ( zAfter || zBefore ) ){ |
| 2243 | 2244 | zDate = mprintf("%s", (zBefore ? zBefore : zAfter)); |
| 2244 | 2245 | } |
| 2245 | 2246 | if( zDate ){ |
| 2246 | - rDate = symbolic_name_to_mtime(zDate); | |
| 2247 | + rDate = symbolic_name_to_mtime(zDate, 0); | |
| 2247 | 2248 | if( db_int(0, |
| 2248 | 2249 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2249 | 2250 | " WHERE blob.rid=event.objid AND mtime>=%.17g%s)", |
| 2250 | 2251 | rDate+ONE_SECOND, blob_sql_text(&cond)) |
| 2251 | 2252 | ){ |
| @@ -2281,11 +2282,11 @@ | ||
| 2281 | 2282 | style_submenu_element("Advanced", "%s", |
| 2282 | 2283 | url_render(&url, "advm", "1", "udc", "1")); |
| 2283 | 2284 | } |
| 2284 | 2285 | if( PB("showid") ) tmFlags |= TIMELINE_SHOWRID; |
| 2285 | 2286 | if( useDividers && zMark && zMark[0] ){ |
| 2286 | - double r = symbolic_name_to_mtime(zMark); | |
| 2287 | + double r = symbolic_name_to_mtime(zMark, 0); | |
| 2287 | 2288 | if( r>0.0 ) selectedRid = timeline_add_divider(r); |
| 2288 | 2289 | } |
| 2289 | 2290 | blob_zero(&sql); |
| 2290 | 2291 | db_prepare(&q, "SELECT * FROM timeline ORDER BY sortby DESC /*scan*/"); |
| 2291 | 2292 | if( fossil_islower(desc.aData[0]) ){ |
| 2292 | 2293 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1024,11 +1024,11 @@ | |
| 1024 | |
| 1025 | /* |
| 1026 | ** Convert a symbolic name used as an argument to the a=, b=, or c= |
| 1027 | ** query parameters of timeline into a julianday mtime value. |
| 1028 | */ |
| 1029 | double symbolic_name_to_mtime(const char *z){ |
| 1030 | double mtime; |
| 1031 | int rid; |
| 1032 | const char *zDate; |
| 1033 | if( z==0 ) return -1.0; |
| 1034 | if( fossil_isdate(z) ){ |
| @@ -1037,10 +1037,11 @@ | |
| 1037 | } |
| 1038 | zDate = fossil_expand_datetime(z, 1); |
| 1039 | if( zDate!=0 |
| 1040 | && (mtime = db_double(0.0, "SELECT julianday(%Q,fromLocal())", zDate))>0.0 |
| 1041 | ){ |
| 1042 | return mtime; |
| 1043 | } |
| 1044 | rid = symbolic_name_to_rid(z, "*"); |
| 1045 | if( rid ){ |
| 1046 | mtime = db_double(0.0, "SELECT mtime FROM event WHERE objid=%d", rid); |
| @@ -2093,13 +2094,13 @@ | |
| 2093 | if( zSearch ){ |
| 2094 | blob_append_sql(&cond, |
| 2095 | " AND (event.comment LIKE '%%%q%%' OR event.brief LIKE '%%%q%%')", |
| 2096 | zSearch, zSearch); |
| 2097 | } |
| 2098 | rBefore = symbolic_name_to_mtime(zBefore); |
| 2099 | rAfter = symbolic_name_to_mtime(zAfter); |
| 2100 | rCirca = symbolic_name_to_mtime(zCirca); |
| 2101 | blob_append_sql(&sql, "%s", blob_sql_text(&cond)); |
| 2102 | if( rAfter>0.0 ){ |
| 2103 | if( rBefore>0.0 ){ |
| 2104 | blob_append_sql(&sql, |
| 2105 | " AND event.mtime>=%.17g AND event.mtime<=%.17g" |
| @@ -2226,11 +2227,11 @@ | |
| 2226 | zDate = db_text(0, "SELECT min(timestamp) FROM timeline /*scan*/"); |
| 2227 | if( (!zDate || !zDate[0]) && ( zAfter || zBefore ) ){ |
| 2228 | zDate = mprintf("%s", (zAfter ? zAfter : zBefore)); |
| 2229 | } |
| 2230 | if( zDate ){ |
| 2231 | rDate = symbolic_name_to_mtime(zDate); |
| 2232 | if( db_int(0, |
| 2233 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2234 | " WHERE blob.rid=event.objid AND mtime<=%.17g%s)", |
| 2235 | rDate-ONE_SECOND, blob_sql_text(&cond)) |
| 2236 | ){ |
| @@ -2241,11 +2242,11 @@ | |
| 2241 | zDate = db_text(0, "SELECT max(timestamp) FROM timeline /*scan*/"); |
| 2242 | if( (!zDate || !zDate[0]) && ( zAfter || zBefore ) ){ |
| 2243 | zDate = mprintf("%s", (zBefore ? zBefore : zAfter)); |
| 2244 | } |
| 2245 | if( zDate ){ |
| 2246 | rDate = symbolic_name_to_mtime(zDate); |
| 2247 | if( db_int(0, |
| 2248 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2249 | " WHERE blob.rid=event.objid AND mtime>=%.17g%s)", |
| 2250 | rDate+ONE_SECOND, blob_sql_text(&cond)) |
| 2251 | ){ |
| @@ -2281,11 +2282,11 @@ | |
| 2281 | style_submenu_element("Advanced", "%s", |
| 2282 | url_render(&url, "advm", "1", "udc", "1")); |
| 2283 | } |
| 2284 | if( PB("showid") ) tmFlags |= TIMELINE_SHOWRID; |
| 2285 | if( useDividers && zMark && zMark[0] ){ |
| 2286 | double r = symbolic_name_to_mtime(zMark); |
| 2287 | if( r>0.0 ) selectedRid = timeline_add_divider(r); |
| 2288 | } |
| 2289 | blob_zero(&sql); |
| 2290 | db_prepare(&q, "SELECT * FROM timeline ORDER BY sortby DESC /*scan*/"); |
| 2291 | if( fossil_islower(desc.aData[0]) ){ |
| 2292 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1024,11 +1024,11 @@ | |
| 1024 | |
| 1025 | /* |
| 1026 | ** Convert a symbolic name used as an argument to the a=, b=, or c= |
| 1027 | ** query parameters of timeline into a julianday mtime value. |
| 1028 | */ |
| 1029 | double symbolic_name_to_mtime(const char *z, const char **pzDisplay){ |
| 1030 | double mtime; |
| 1031 | int rid; |
| 1032 | const char *zDate; |
| 1033 | if( z==0 ) return -1.0; |
| 1034 | if( fossil_isdate(z) ){ |
| @@ -1037,10 +1037,11 @@ | |
| 1037 | } |
| 1038 | zDate = fossil_expand_datetime(z, 1); |
| 1039 | if( zDate!=0 |
| 1040 | && (mtime = db_double(0.0, "SELECT julianday(%Q,fromLocal())", zDate))>0.0 |
| 1041 | ){ |
| 1042 | if( pzDisplay ) *pzDisplay = fossil_strdup(zDate); |
| 1043 | return mtime; |
| 1044 | } |
| 1045 | rid = symbolic_name_to_rid(z, "*"); |
| 1046 | if( rid ){ |
| 1047 | mtime = db_double(0.0, "SELECT mtime FROM event WHERE objid=%d", rid); |
| @@ -2093,13 +2094,13 @@ | |
| 2094 | if( zSearch ){ |
| 2095 | blob_append_sql(&cond, |
| 2096 | " AND (event.comment LIKE '%%%q%%' OR event.brief LIKE '%%%q%%')", |
| 2097 | zSearch, zSearch); |
| 2098 | } |
| 2099 | rBefore = symbolic_name_to_mtime(zBefore, &zBefore); |
| 2100 | rAfter = symbolic_name_to_mtime(zAfter, &zAfter); |
| 2101 | rCirca = symbolic_name_to_mtime(zCirca, &zCirca); |
| 2102 | blob_append_sql(&sql, "%s", blob_sql_text(&cond)); |
| 2103 | if( rAfter>0.0 ){ |
| 2104 | if( rBefore>0.0 ){ |
| 2105 | blob_append_sql(&sql, |
| 2106 | " AND event.mtime>=%.17g AND event.mtime<=%.17g" |
| @@ -2226,11 +2227,11 @@ | |
| 2227 | zDate = db_text(0, "SELECT min(timestamp) FROM timeline /*scan*/"); |
| 2228 | if( (!zDate || !zDate[0]) && ( zAfter || zBefore ) ){ |
| 2229 | zDate = mprintf("%s", (zAfter ? zAfter : zBefore)); |
| 2230 | } |
| 2231 | if( zDate ){ |
| 2232 | rDate = symbolic_name_to_mtime(zDate, 0); |
| 2233 | if( db_int(0, |
| 2234 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2235 | " WHERE blob.rid=event.objid AND mtime<=%.17g%s)", |
| 2236 | rDate-ONE_SECOND, blob_sql_text(&cond)) |
| 2237 | ){ |
| @@ -2241,11 +2242,11 @@ | |
| 2242 | zDate = db_text(0, "SELECT max(timestamp) FROM timeline /*scan*/"); |
| 2243 | if( (!zDate || !zDate[0]) && ( zAfter || zBefore ) ){ |
| 2244 | zDate = mprintf("%s", (zBefore ? zBefore : zAfter)); |
| 2245 | } |
| 2246 | if( zDate ){ |
| 2247 | rDate = symbolic_name_to_mtime(zDate, 0); |
| 2248 | if( db_int(0, |
| 2249 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2250 | " WHERE blob.rid=event.objid AND mtime>=%.17g%s)", |
| 2251 | rDate+ONE_SECOND, blob_sql_text(&cond)) |
| 2252 | ){ |
| @@ -2281,11 +2282,11 @@ | |
| 2282 | style_submenu_element("Advanced", "%s", |
| 2283 | url_render(&url, "advm", "1", "udc", "1")); |
| 2284 | } |
| 2285 | if( PB("showid") ) tmFlags |= TIMELINE_SHOWRID; |
| 2286 | if( useDividers && zMark && zMark[0] ){ |
| 2287 | double r = symbolic_name_to_mtime(zMark, 0); |
| 2288 | if( r>0.0 ) selectedRid = timeline_add_divider(r); |
| 2289 | } |
| 2290 | blob_zero(&sql); |
| 2291 | db_prepare(&q, "SELECT * FROM timeline ORDER BY sortby DESC /*scan*/"); |
| 2292 | if( fossil_islower(desc.aData[0]) ){ |
| 2293 |