Fossil SCM
Only issue notififications for ticket changes that do not previously appear in the EVENT table. Fix for ticket [ad9aa572e7972f57].
Commit
fb040bb01326181ee2375dfa9ed2d437973fbf8b0ba0266070337dde57f3a015
Parent
4ec65ebba917742…
2 files changed
+5
+19
-6
+5
| --- src/alerts.c | ||
| +++ src/alerts.c | ||
| @@ -2943,10 +2943,15 @@ | ||
| 2943 | 2943 | " sentMod" |
| 2944 | 2944 | " FROM pending_alert" |
| 2945 | 2945 | " WHERE sentSep IS FALSE;" |
| 2946 | 2946 | "DELETE FROM wantalert WHERE needMod AND sentMod;" |
| 2947 | 2947 | ); |
| 2948 | + } | |
| 2949 | + if( g.fSqlTrace ){ | |
| 2950 | + fossil_trace("-- wantalert contains %d rows\n", | |
| 2951 | + db_int(0, "SELECT count(*) FROM wantalert") | |
| 2952 | + ); | |
| 2948 | 2953 | } |
| 2949 | 2954 | |
| 2950 | 2955 | /* Step 2: compute EmailEvent objects for every notification that |
| 2951 | 2956 | ** needs sending. |
| 2952 | 2957 | */ |
| 2953 | 2958 |
| --- src/alerts.c | |
| +++ src/alerts.c | |
| @@ -2943,10 +2943,15 @@ | |
| 2943 | " sentMod" |
| 2944 | " FROM pending_alert" |
| 2945 | " WHERE sentSep IS FALSE;" |
| 2946 | "DELETE FROM wantalert WHERE needMod AND sentMod;" |
| 2947 | ); |
| 2948 | } |
| 2949 | |
| 2950 | /* Step 2: compute EmailEvent objects for every notification that |
| 2951 | ** needs sending. |
| 2952 | */ |
| 2953 |
| --- src/alerts.c | |
| +++ src/alerts.c | |
| @@ -2943,10 +2943,15 @@ | |
| 2943 | " sentMod" |
| 2944 | " FROM pending_alert" |
| 2945 | " WHERE sentSep IS FALSE;" |
| 2946 | "DELETE FROM wantalert WHERE needMod AND sentMod;" |
| 2947 | ); |
| 2948 | } |
| 2949 | if( g.fSqlTrace ){ |
| 2950 | fossil_trace("-- wantalert contains %d rows\n", |
| 2951 | db_int(0, "SELECT count(*) FROM wantalert") |
| 2952 | ); |
| 2953 | } |
| 2954 | |
| 2955 | /* Step 2: compute EmailEvent objects for every notification that |
| 2956 | ** needs sending. |
| 2957 | */ |
| 2958 |
+19
-6
| --- src/manifest.c | ||
| +++ src/manifest.c | ||
| @@ -2198,16 +2198,29 @@ | ||
| 2198 | 2198 | blob_appendf(&brief, "New ticket [%!S|%S].", pManifest->zTicketUuid, |
| 2199 | 2199 | pManifest->zTicketUuid); |
| 2200 | 2200 | } |
| 2201 | 2201 | fossil_free(zTitle); |
| 2202 | 2202 | manifest_create_event_triggers(); |
| 2203 | - db_multi_exec( | |
| 2204 | - "REPLACE INTO event(type,tagid,mtime,objid,user,comment,brief)" | |
| 2205 | - "VALUES('t',%d,%.17g,%d,%Q,%Q,%Q)", | |
| 2206 | - tktTagId, pManifest->rDate, rid, pManifest->zUser, | |
| 2207 | - blob_str(&comment), blob_str(&brief) | |
| 2208 | - ); | |
| 2203 | + if( db_exists("SELECT 1 FROM event WHERE type='t' AND objid=%d", rid) ){ | |
| 2204 | + /* The ticket_rebuild_entry() function redoes all of the event entries | |
| 2205 | + ** for a ticket whenever a new event appears. Be careful to only UPDATE | |
| 2206 | + ** existing events, so that they do not get turned into alerts by | |
| 2207 | + ** the alert trigger. */ | |
| 2208 | + db_multi_exec( | |
| 2209 | + "UPDATE event SET tagid=%d, mtime=%.17g, user=%Q, comment=%Q, brief=%Q" | |
| 2210 | + " WHERE objid=%d", | |
| 2211 | + tktTagId, pManifest->rDate, pManifest->zUser, | |
| 2212 | + blob_str(&comment), blob_str(&brief), rid | |
| 2213 | + ); | |
| 2214 | + }else{ | |
| 2215 | + db_multi_exec( | |
| 2216 | + "REPLACE INTO event(type,tagid,mtime,objid,user,comment,brief)" | |
| 2217 | + "VALUES('t',%d,%.17g,%d,%Q,%Q,%Q)", | |
| 2218 | + tktTagId, pManifest->rDate, rid, pManifest->zUser, | |
| 2219 | + blob_str(&comment), blob_str(&brief) | |
| 2220 | + ); | |
| 2221 | + } | |
| 2209 | 2222 | blob_reset(&comment); |
| 2210 | 2223 | blob_reset(&brief); |
| 2211 | 2224 | } |
| 2212 | 2225 | |
| 2213 | 2226 | /* |
| 2214 | 2227 |
| --- src/manifest.c | |
| +++ src/manifest.c | |
| @@ -2198,16 +2198,29 @@ | |
| 2198 | blob_appendf(&brief, "New ticket [%!S|%S].", pManifest->zTicketUuid, |
| 2199 | pManifest->zTicketUuid); |
| 2200 | } |
| 2201 | fossil_free(zTitle); |
| 2202 | manifest_create_event_triggers(); |
| 2203 | db_multi_exec( |
| 2204 | "REPLACE INTO event(type,tagid,mtime,objid,user,comment,brief)" |
| 2205 | "VALUES('t',%d,%.17g,%d,%Q,%Q,%Q)", |
| 2206 | tktTagId, pManifest->rDate, rid, pManifest->zUser, |
| 2207 | blob_str(&comment), blob_str(&brief) |
| 2208 | ); |
| 2209 | blob_reset(&comment); |
| 2210 | blob_reset(&brief); |
| 2211 | } |
| 2212 | |
| 2213 | /* |
| 2214 |
| --- src/manifest.c | |
| +++ src/manifest.c | |
| @@ -2198,16 +2198,29 @@ | |
| 2198 | blob_appendf(&brief, "New ticket [%!S|%S].", pManifest->zTicketUuid, |
| 2199 | pManifest->zTicketUuid); |
| 2200 | } |
| 2201 | fossil_free(zTitle); |
| 2202 | manifest_create_event_triggers(); |
| 2203 | if( db_exists("SELECT 1 FROM event WHERE type='t' AND objid=%d", rid) ){ |
| 2204 | /* The ticket_rebuild_entry() function redoes all of the event entries |
| 2205 | ** for a ticket whenever a new event appears. Be careful to only UPDATE |
| 2206 | ** existing events, so that they do not get turned into alerts by |
| 2207 | ** the alert trigger. */ |
| 2208 | db_multi_exec( |
| 2209 | "UPDATE event SET tagid=%d, mtime=%.17g, user=%Q, comment=%Q, brief=%Q" |
| 2210 | " WHERE objid=%d", |
| 2211 | tktTagId, pManifest->rDate, pManifest->zUser, |
| 2212 | blob_str(&comment), blob_str(&brief), rid |
| 2213 | ); |
| 2214 | }else{ |
| 2215 | db_multi_exec( |
| 2216 | "REPLACE INTO event(type,tagid,mtime,objid,user,comment,brief)" |
| 2217 | "VALUES('t',%d,%.17g,%d,%Q,%Q,%Q)", |
| 2218 | tktTagId, pManifest->rDate, rid, pManifest->zUser, |
| 2219 | blob_str(&comment), blob_str(&brief) |
| 2220 | ); |
| 2221 | } |
| 2222 | blob_reset(&comment); |
| 2223 | blob_reset(&brief); |
| 2224 | } |
| 2225 | |
| 2226 | /* |
| 2227 |