Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Fix a memleak in manifest_crosslink() when hooks are activated (one uuid leaked per checkin manifest). When posting a chat-robot message for a forum post, add links to the artifact and user's timeline to that message (as is done for checkins. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
5fabb7ccb7d195c423cc7a0ed7c1283e |
| User & Date: | stephan 2024-09-24 18:05:33.252 |
Context
|
2024-09-24
| ||
| 21:21 | Latest upstream autosetup (supports more environments). ... (check-in: 921edd2e51 user: stephan tags: trunk) | |
| 18:05 | Fix a memleak in manifest_crosslink() when hooks are activated (one uuid leaked per checkin manifest). When posting a chat-robot message for a forum post, add links to the artifact and user's timeline to that message (as is done for checkins. ... (check-in: 5fabb7ccb7 user: stephan tags: trunk) | |
| 11:13 | More work on making the xfer protocol fail fast for certain invalid inputs. ... (check-in: f9f90d9b15 user: stephan tags: trunk) | |
Changes
Changes to src/chat.c.
| ︙ | ︙ | |||
1135 1136 1137 1138 1139 1140 1141 |
zUser, zUuid, zUser,
zBranch, zUuid, zBranch
);
fossil_free(zBranch);
fossil_free(zUuid);
}else if( zType[0]=='w' ){
/* Wiki page changes */
| | < > > > > > > > | 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 |
zUser, zUuid, zUser,
zBranch, zUuid, zBranch
);
fossil_free(zBranch);
fossil_free(zUuid);
}else if( zType[0]=='w' ){
/* Wiki page changes */
char *zUuid = rid_to_uuid(rid);
wiki_hyperlink_override(zUuid);
if( zMsg[0]=='-' ){
zRes = mprintf("Delete wiki page <a href='%R/whistory?name=%t'>%h</a>",
zMsg+1, zMsg+1);
}else if( zMsg[0]=='+' ){
zRes = mprintf("Added wiki page <a href='%R/whistory?name=%t'>%h</a>",
zMsg+1, zMsg+1);
}else if( zMsg[0]==':' ){
zRes = mprintf("<a href='%R/wdiff?id=%!S'>Changes</a> to wiki page "
"<a href='%R/whistory?name=%t'>%h</a>",
zUuid, zMsg+1, zMsg+1);
}else{
zRes = mprintf("%W", zMsg);
}
wiki_hyperlink_override(0);
fossil_free(zUuid);
}else if( zType[0]=='f' ){
/* Forum changes */
char *zUuid = rid_to_uuid(rid);
zRes = mprintf( "%W (artifact: <a href='%R/info/%S'>%S</a>, "
"user: <a href='%R/timeline?u=%t&c=%S'>%h</a>)",
zMsg, zUuid, zUuid, zUser, zUuid, zUser);
fossil_free(zUuid);
}else{
/* Anything else */
zRes = mprintf("%W", zMsg);
}
if( zRes ){
sqlite3_result_text(context, zRes, -1, fossil_free);
}
|
| ︙ | ︙ |
Changes to src/manifest.c.
| ︙ | ︙ | |||
2332 2333 2334 2335 2336 2337 2338 |
*/
int manifest_crosslink(int rid, Blob *pContent, int flags){
int i, rc = TH_OK;
Manifest *p;
int parentid = 0;
int permitHooks = (flags & MC_PERMIT_HOOKS);
const char *zScript = 0;
| | | 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 |
*/
int manifest_crosslink(int rid, Blob *pContent, int flags){
int i, rc = TH_OK;
Manifest *p;
int parentid = 0;
int permitHooks = (flags & MC_PERMIT_HOOKS);
const char *zScript = 0;
char *zUuid = 0;
if( g.fSqlTrace ){
fossil_trace("-- manifest_crosslink(%d)\n", rid);
}
manifest_create_event_triggers();
if( (p = manifest_cache_find(rid))!=0 ){
blob_reset(pContent);
|
| ︙ | ︙ | |||
2368 2369 2370 2371 2372 2373 2374 |
}
return 0;
}
db_begin_transaction();
if( p->type==CFTYPE_MANIFEST ){
if( permitHooks ){
zScript = xfer_commit_code();
| | | 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 |
}
return 0;
}
db_begin_transaction();
if( p->type==CFTYPE_MANIFEST ){
if( permitHooks ){
zScript = xfer_commit_code();
zUuid = rid_to_uuid(rid);
}
if( p->nCherrypick && db_table_exists("repository","cherrypick") ){
int i;
for(i=0; i<p->nCherrypick; i++){
db_multi_exec(
"REPLACE INTO cherrypick(parentid,childid,isExclude)"
" SELECT rid, %d, %d FROM blob WHERE uuid=%Q",
|
| ︙ | ︙ | |||
2720 2721 2722 2723 2724 2725 2726 |
" Edit [%!S|%S]:",
zTagUuid, zTagUuid);
branchMove = 0;
if( permitHooks && db_exists("SELECT 1 FROM event, blob"
" WHERE event.type='ci' AND event.objid=blob.rid"
" AND blob.uuid=%Q", zTagUuid) ){
zScript = xfer_commit_code();
| > | | 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 |
" Edit [%!S|%S]:",
zTagUuid, zTagUuid);
branchMove = 0;
if( permitHooks && db_exists("SELECT 1 FROM event, blob"
" WHERE event.type='ci' AND event.objid=blob.rid"
" AND blob.uuid=%Q", zTagUuid) ){
zScript = xfer_commit_code();
fossil_free(zUuid);
zUuid = fossil_strdup(zTagUuid);
}
}
zName = p->aTag[i].zName;
zValue = p->aTag[i].zValue;
if( strcmp(zName, "*branch")==0 ){
blob_appendf(&comment,
" Move to branch [/timeline?r=%h&nd&dp=%!S&unhide | %h].",
|
| ︙ | ︙ | |||
2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 |
);
blob_reset(&comment);
}
if( p->type==CFTYPE_FORUM ){
int froot, fprev, firt;
char *zFType;
char *zTitle;
schema_forum();
search_doc_touch('f', rid, 0);
froot = p->zThreadRoot ? uuid_to_rid(p->zThreadRoot, 1) : rid;
fprev = p->nParent ? uuid_to_rid(p->azParent[0],1) : 0;
firt = p->zInReplyTo ? uuid_to_rid(p->zInReplyTo,1) : 0;
db_multi_exec(
"REPLACE INTO forumpost(fpid,froot,fprev,firt,fmtime)"
| > > | 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 |
);
blob_reset(&comment);
}
if( p->type==CFTYPE_FORUM ){
int froot, fprev, firt;
char *zFType;
char *zTitle;
assert( 0==zUuid );
schema_forum();
search_doc_touch('f', rid, 0);
froot = p->zThreadRoot ? uuid_to_rid(p->zThreadRoot, 1) : rid;
fprev = p->nParent ? uuid_to_rid(p->azParent[0],1) : 0;
firt = p->zInReplyTo ? uuid_to_rid(p->zInReplyTo,1) : 0;
db_multi_exec(
"REPLACE INTO forumpost(fpid,froot,fprev,firt,fmtime)"
|
| ︙ | ︙ | |||
2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 |
db_end_transaction(0);
if( permitHooks ){
rc = xfer_run_common_script();
if( rc==TH_OK ){
rc = xfer_run_script(zScript, zUuid, 0);
}
}
if( p->type==CFTYPE_MANIFEST ){
manifest_cache_insert(p);
}else{
manifest_destroy(p);
}
assert( blob_is_reset(pContent) );
return ( rc!=TH_ERROR );
| > | 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 |
db_end_transaction(0);
if( permitHooks ){
rc = xfer_run_common_script();
if( rc==TH_OK ){
rc = xfer_run_script(zScript, zUuid, 0);
}
}
fossil_free(zUuid);
if( p->type==CFTYPE_MANIFEST ){
manifest_cache_insert(p);
}else{
manifest_destroy(p);
}
assert( blob_is_reset(pContent) );
return ( rc!=TH_ERROR );
|
| ︙ | ︙ |