Fossil SCM

In the change list send into the post-receive hook, omit any changes that are more than 24 hours older than the most recent change.

drh 2020-07-06 10:46 hooks
Commit 8e424389e02fa065377f2310151d257dc4967ca12d20c9ffead402a9939d9215
1 file changed +11 -11
+11 -11
--- src/hook.c
+++ src/hook.c
@@ -108,10 +108,12 @@
108108
}
109109
110110
/*
111111
** Fill the Blob pOut with text that describes all artifacts
112112
** received after zBaseRcvid up to and including zNewRcvid.
113
+** Except, never include more than one days worth of changes.
114
+**
113115
** If zBaseRcvid is NULL, then use the "hook-last-rcvid" setting.
114116
** If zNewRcvid is NULL, use the last available rcvid.
115117
*/
116118
void hook_changes(Blob *pOut, const char *zBaseRcvid, const char *zNewRcvid){
117119
char *zWhere;
@@ -118,16 +120,20 @@
118120
Stmt q;
119121
if( zBaseRcvid==0 ){
120122
zBaseRcvid = db_get("hook-last-rcvid","0");
121123
}
122124
if( zNewRcvid==0 ){
123
- zWhere = mprintf("IN (SELECT rid FROM blob WHERE rcvid>%d)",
124
- atoi(zBaseRcvid));
125
- }else{
126
- zWhere = mprintf("IN (SELECT rid FROM blob WHERE rcvid>%d AND rcvid<=%d",
127
- atoi(zBaseRcvid), atoi(zNewRcvid));
125
+ zNewRcvid = db_text("0","SELECT max(rcvid) FROM rcvfrom");
128126
}
127
+ zBaseRcvid = db_text(0,
128
+ "SELECT min(rcvid) FROM rcvfrom"
129
+ " WHERE rcvid>=%d"
130
+ " AND mtime>=(SELECT mtime FROM rcvfrom WHERE rcvid=%d)-1.0",
131
+ atoi(zBaseRcvid), atoi(zNewRcvid)
132
+ );
133
+ zWhere = mprintf("IN (SELECT rid FROM blob WHERE rcvid>%d AND rcvid<=%d)",
134
+ atoi(zBaseRcvid), atoi(zNewRcvid));
129135
describe_artifacts(zWhere);
130136
fossil_free(zWhere);
131137
db_prepare(&q, "SELECT uuid, summary FROM description");
132138
while( db_step(&q)==SQLITE_ROW ){
133139
blob_appendf(pOut, "%s %s\n", db_column_text(&q,0), db_column_text(&q,1));
@@ -207,16 +213,10 @@
207213
" json_object('cmd',%Q,'type',%Q,'seq',%d)),"
208214
" mtime=now()"
209215
" WHERE name='hooks';",
210216
zCmd, zType, nSeq
211217
);
212
- /* Make sure hook-list-rcvid is initialized */
213
- db_multi_exec(
214
- "INSERT OR IGNORE INTO config(name,value,mtime)"
215
- " SELECT 'hook-last-rcvid', rcvid, now()"
216
- " FROM rcvfrom ORDER BY rcvid DESC limit 1"
217
- );
218218
db_commit_transaction();
219219
}else
220220
if( strncmp(zCmd, "edit", nCmd)==0 ){
221221
const char *zCmd = find_option("command",0,1);
222222
const char *zType = find_option("type",0,1);
223223
--- src/hook.c
+++ src/hook.c
@@ -108,10 +108,12 @@
108 }
109
110 /*
111 ** Fill the Blob pOut with text that describes all artifacts
112 ** received after zBaseRcvid up to and including zNewRcvid.
 
 
113 ** If zBaseRcvid is NULL, then use the "hook-last-rcvid" setting.
114 ** If zNewRcvid is NULL, use the last available rcvid.
115 */
116 void hook_changes(Blob *pOut, const char *zBaseRcvid, const char *zNewRcvid){
117 char *zWhere;
@@ -118,16 +120,20 @@
118 Stmt q;
119 if( zBaseRcvid==0 ){
120 zBaseRcvid = db_get("hook-last-rcvid","0");
121 }
122 if( zNewRcvid==0 ){
123 zWhere = mprintf("IN (SELECT rid FROM blob WHERE rcvid>%d)",
124 atoi(zBaseRcvid));
125 }else{
126 zWhere = mprintf("IN (SELECT rid FROM blob WHERE rcvid>%d AND rcvid<=%d",
127 atoi(zBaseRcvid), atoi(zNewRcvid));
128 }
 
 
 
 
 
 
 
 
129 describe_artifacts(zWhere);
130 fossil_free(zWhere);
131 db_prepare(&q, "SELECT uuid, summary FROM description");
132 while( db_step(&q)==SQLITE_ROW ){
133 blob_appendf(pOut, "%s %s\n", db_column_text(&q,0), db_column_text(&q,1));
@@ -207,16 +213,10 @@
207 " json_object('cmd',%Q,'type',%Q,'seq',%d)),"
208 " mtime=now()"
209 " WHERE name='hooks';",
210 zCmd, zType, nSeq
211 );
212 /* Make sure hook-list-rcvid is initialized */
213 db_multi_exec(
214 "INSERT OR IGNORE INTO config(name,value,mtime)"
215 " SELECT 'hook-last-rcvid', rcvid, now()"
216 " FROM rcvfrom ORDER BY rcvid DESC limit 1"
217 );
218 db_commit_transaction();
219 }else
220 if( strncmp(zCmd, "edit", nCmd)==0 ){
221 const char *zCmd = find_option("command",0,1);
222 const char *zType = find_option("type",0,1);
223
--- src/hook.c
+++ src/hook.c
@@ -108,10 +108,12 @@
108 }
109
110 /*
111 ** Fill the Blob pOut with text that describes all artifacts
112 ** received after zBaseRcvid up to and including zNewRcvid.
113 ** Except, never include more than one days worth of changes.
114 **
115 ** If zBaseRcvid is NULL, then use the "hook-last-rcvid" setting.
116 ** If zNewRcvid is NULL, use the last available rcvid.
117 */
118 void hook_changes(Blob *pOut, const char *zBaseRcvid, const char *zNewRcvid){
119 char *zWhere;
@@ -118,16 +120,20 @@
120 Stmt q;
121 if( zBaseRcvid==0 ){
122 zBaseRcvid = db_get("hook-last-rcvid","0");
123 }
124 if( zNewRcvid==0 ){
125 zNewRcvid = db_text("0","SELECT max(rcvid) FROM rcvfrom");
 
 
 
 
126 }
127 zBaseRcvid = db_text(0,
128 "SELECT min(rcvid) FROM rcvfrom"
129 " WHERE rcvid>=%d"
130 " AND mtime>=(SELECT mtime FROM rcvfrom WHERE rcvid=%d)-1.0",
131 atoi(zBaseRcvid), atoi(zNewRcvid)
132 );
133 zWhere = mprintf("IN (SELECT rid FROM blob WHERE rcvid>%d AND rcvid<=%d)",
134 atoi(zBaseRcvid), atoi(zNewRcvid));
135 describe_artifacts(zWhere);
136 fossil_free(zWhere);
137 db_prepare(&q, "SELECT uuid, summary FROM description");
138 while( db_step(&q)==SQLITE_ROW ){
139 blob_appendf(pOut, "%s %s\n", db_column_text(&q,0), db_column_text(&q,1));
@@ -207,16 +213,10 @@
213 " json_object('cmd',%Q,'type',%Q,'seq',%d)),"
214 " mtime=now()"
215 " WHERE name='hooks';",
216 zCmd, zType, nSeq
217 );
 
 
 
 
 
 
218 db_commit_transaction();
219 }else
220 if( strncmp(zCmd, "edit", nCmd)==0 ){
221 const char *zCmd = find_option("command",0,1);
222 const char *zType = find_option("type",0,1);
223

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button