Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch shun-list-review Excluding Merge-Ins
This is equivalent to a diff from e03200e5 to d5c8235c
2024-01-04
| ||
09:37 | Let users review and validate artifacts before shunning. Helpful in catching abbreviated hashes. ... (check-in: 5e19daf9 user: preben tags: trunk) | |
2023-11-20
| ||
18:57 | Do not separate timeline entries by an empty line when using custom formatting strings. ... (check-in: 256983fd user: danield tags: trunk) | |
17:07 | Add a button to review a list of hashes to shun. As discussed in 1d54d9965c7e4c00, fossil may accept 40 byte abbreviated hashes from command output, when the intention is to shun the real 64 byte hash. ... (Closed-Leaf check-in: d5c8235c user: preben tags: shun-list-review) | |
2023-11-19
| ||
11:42 | Improved description on /timeline pages that make use of tl= or rl=. ... (check-in: e03200e5 user: drh tags: trunk) | |
2023-11-18
| ||
20:41 | Add new tl= and rl= query parameters to /timeline ... (check-in: 2288b742 user: drh tags: trunk) | |
Changes to src/shun.c.
︙ | ︙ | |||
45 46 47 48 49 50 51 52 53 54 55 56 57 58 | void shun_page(void){ Stmt q; int cnt = 0; const char *zUuid = P("uuid"); const char *zShun = P("shun"); const char *zAccept = P("accept"); const char *zRcvid = P("rcvid"); int nRcvid = 0; int numRows = 3; char *zCanonical = 0; login_check_credentials(); if( !g.perm.Admin ){ login_needed(0); | > | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | void shun_page(void){ Stmt q; int cnt = 0; const char *zUuid = P("uuid"); const char *zShun = P("shun"); const char *zAccept = P("accept"); const char *zRcvid = P("rcvid"); int reviewList = P("review")!=0; int nRcvid = 0; int numRows = 3; char *zCanonical = 0; login_check_credentials(); if( !g.perm.Admin ){ login_needed(0); |
︙ | ︙ | |||
83 84 85 86 87 88 89 | } i++; } zCanonical[j+1] = zCanonical[j] = 0; p = zCanonical; while( *p ){ int nUuid = strlen(p); | | | 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | } i++; } zCanonical[j+1] = zCanonical[j] = 0; p = zCanonical; while( *p ){ int nUuid = strlen(p); if( !(reviewList || hname_validate(p, nUuid)) ){ @ <p class="generalError">Error: Bad artifact IDs.</p> fossil_free(zCanonical); zCanonical = 0; break; }else{ canonical16(p, nUuid); p += nUuid+1; |
︙ | ︙ | |||
153 154 155 156 157 158 159 160 161 162 163 164 165 166 | for( p = zUuid ; *p ; p += strlen(p)+1 ){ @ <a href="%R/artifact/%s(p)">%s(p)</a><br> } @ have been shunned. They will no longer be pushed. @ They will be removed from the repository the next time the repository @ is rebuilt using the <b>fossil rebuild</b> command-line</p> } if( zRcvid ){ nRcvid = atoi(zRcvid); numRows = db_int(0, "SELECT min(count(), 10) FROM blob WHERE rcvid=%d", nRcvid); } @ <p>A shunned artifact will not be pushed nor accepted in a pull and the @ artifact content will be purged from the repository the next time the | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | for( p = zUuid ; *p ; p += strlen(p)+1 ){ @ <a href="%R/artifact/%s(p)">%s(p)</a><br> } @ have been shunned. They will no longer be pushed. @ They will be removed from the repository the next time the repository @ is rebuilt using the <b>fossil rebuild</b> command-line</p> } if( zUuid && reviewList ){ const char *p; int nTotal = 0; int nOk = 0; @ <table class="shun-review"><tbody><tr><td> for( p = zUuid ; *p ; p += strlen(p)+1 ){ int rid = symbolic_name_to_rid(p, 0); nTotal++; if( rid < 0 ){ @ Ambiguous<br> }else if( rid == 0 ){ if( !hname_validate(p, strlen(p)) ){ @ Bad artifact<br> }else if(db_int(0, "SELECT 1 FROM shun WHERE uuid=%Q", p)){ @ Already shunned<br> }else{ @ Unknown<br> } }else{ char *zCmpUuid = db_text(0, "SELECT uuid" " FROM blob, rcvfrom" " WHERE rid=%d" " AND rcvfrom.rcvid=blob.rcvid", rid); if( fossil_strcmp(p, zCmpUuid)==0 ){ nOk++; @ OK</br> }else{ @ Abbreviated<br> } } } @ </td><td> for( p = zUuid ; *p ; p += strlen(p)+1 ){ int rid = symbolic_name_to_rid(p, 0); if( rid > 0 ){ @ <a href="%R/artifact/%s(p)">%s(p)</a><br> }else{ @ %s(p)<br> } } @ </td></tr></tbody></table> @ <p class="shunned"> if( nOk < nTotal){ @ <b>Warning:</b> Not all artifacts }else if( nTotal==1 ){ @ The artifact is present and }else{ @ All %i(nOk) artifacts are present and } @ can be shunned with its hash above.</p> } if( zRcvid ){ nRcvid = atoi(zRcvid); numRows = db_int(0, "SELECT min(count(), 10) FROM blob WHERE rcvid=%d", nRcvid); } @ <p>A shunned artifact will not be pushed nor accepted in a pull and the @ artifact content will be purged from the repository the next time the |
︙ | ︙ | |||
194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | }else if( nRcvid ){ db_prepare(&q, "SELECT uuid FROM blob WHERE rcvid=%d", nRcvid); while( db_step(&q)==SQLITE_ROW ){ @ %s(db_column_text(&q, 0)) } db_finalize(&q); } } @ </textarea> @ <input type="submit" name="add" value="Shun"> @ </div></form> @ </blockquote> @ @ <a name="delshun"></a> @ <p>Enter the UUIDs of previously shunned artifacts to cause them to be @ accepted again in the repository. The artifacts content is not @ restored because the content is unknown. The only change is that | > > > > > > | 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | }else if( nRcvid ){ db_prepare(&q, "SELECT uuid FROM blob WHERE rcvid=%d", nRcvid); while( db_step(&q)==SQLITE_ROW ){ @ %s(db_column_text(&q, 0)) } db_finalize(&q); } }else if( zUuid && reviewList ){ const char *p; for( p = zUuid ; *p ; p += strlen(p)+1 ){ @ %s(p) } } @ </textarea> @ <input type="submit" name="add" value="Shun"> @ <input type="submit" name="review" value="Review"> @ </div></form> @ </blockquote> @ @ <a name="delshun"></a> @ <p>Enter the UUIDs of previously shunned artifacts to cause them to be @ accepted again in the repository. The artifacts content is not @ restored because the content is unknown. The only change is that |
︙ | ︙ |