Fossil SCM

In artifact_to_json() add a W-card with a null value instead of eliding the W-card for empty (deleted) wiki pages and forum posts. Similarly, treat an empty H-card as JSON null instead of an empty string.

stephan 2025-03-25 15:13 trunk
Commit 87bdf7d1b82d0dec3aa8d3dfd9ecdcfc6ae3686befd1eed207b71f2ab707d0fa
1 file changed +12 -8
+12 -8
--- src/manifest.c
+++ src/manifest.c
@@ -3000,12 +3000,15 @@
30003000
** array, rather than no F-cards, to hypothetically simplify
30013001
** handling in JSON queries. */
30023002
blob_append_char(b, ']');
30033003
}
30043004
CARD_STR2(G, p->zThreadRoot);
3005
- CARD_STR2(H, p->zThreadTitle);
3006
- CARD_STR2(I, p->zInReplyTo);
3005
+ if( CFTYPE_FORUM==p->type ){
3006
+ CARD_LETTER(H);
3007
+ STR_OR_NULL( (p->zThreadTitle && *p->zThreadTitle) ? p->zThreadTitle : NULL);
3008
+ CARD_STR2(I, p->zInReplyTo);
3009
+ }
30073010
if( p->nField ){
30083011
CARD_LETTER(J);
30093012
blob_append_char(b, '[');
30103013
for( i = 0; i < p->nField; ++i ){
30113014
const char * zName = p->aField[i].zName;
@@ -3031,15 +3034,13 @@
30313034
}
30323035
CARD_STR2(N, p->zMimetype);
30333036
ISA( CFTYPE_MANIFEST ){
30343037
CARD_LETTER(P);
30353038
blob_append_char(b, '[');
3036
- if( p->nParent ){
3037
- for( i = 0; i < p->nParent; ++i ){
3038
- if( i>0 ) blob_append_char(b, ',');
3039
- blob_appendf(b, "%!j", p->azParent[i]);
3040
- }
3039
+ for( i = 0; i < p->nParent; ++i ){
3040
+ if( i>0 ) blob_append_char(b, ',');
3041
+ blob_appendf(b, "%!j", p->azParent[i]);
30413042
}
30423043
/* Special case: model checkins with no P-card as having an empty
30433044
** array, as per F-cards. */
30443045
blob_append_char(b, ']');
30453046
}
@@ -3072,11 +3073,14 @@
30723073
blob_append_char(b, '}');
30733074
}
30743075
blob_append_char(b, ']');
30753076
}
30763077
CARD_STR2(U, p->zUser);
3077
- CARD_STR2(W, p->zWiki);
3078
+ if( CFTYPE_WIKI==p->type || CFTYPE_FORUM==p->type ){
3079
+ CARD_LETTER(W);
3080
+ STR_OR_NULL((p->zWiki && *p->zWiki) ? p->zWiki : NULL);
3081
+ }
30783082
blob_append_literal(b, "}");
30793083
#undef CARD_FMT
30803084
#undef CARD_LETTER
30813085
#undef CARD_STR
30823086
#undef CARD_STR2
30833087
--- src/manifest.c
+++ src/manifest.c
@@ -3000,12 +3000,15 @@
3000 ** array, rather than no F-cards, to hypothetically simplify
3001 ** handling in JSON queries. */
3002 blob_append_char(b, ']');
3003 }
3004 CARD_STR2(G, p->zThreadRoot);
3005 CARD_STR2(H, p->zThreadTitle);
3006 CARD_STR2(I, p->zInReplyTo);
 
 
 
3007 if( p->nField ){
3008 CARD_LETTER(J);
3009 blob_append_char(b, '[');
3010 for( i = 0; i < p->nField; ++i ){
3011 const char * zName = p->aField[i].zName;
@@ -3031,15 +3034,13 @@
3031 }
3032 CARD_STR2(N, p->zMimetype);
3033 ISA( CFTYPE_MANIFEST ){
3034 CARD_LETTER(P);
3035 blob_append_char(b, '[');
3036 if( p->nParent ){
3037 for( i = 0; i < p->nParent; ++i ){
3038 if( i>0 ) blob_append_char(b, ',');
3039 blob_appendf(b, "%!j", p->azParent[i]);
3040 }
3041 }
3042 /* Special case: model checkins with no P-card as having an empty
3043 ** array, as per F-cards. */
3044 blob_append_char(b, ']');
3045 }
@@ -3072,11 +3073,14 @@
3072 blob_append_char(b, '}');
3073 }
3074 blob_append_char(b, ']');
3075 }
3076 CARD_STR2(U, p->zUser);
3077 CARD_STR2(W, p->zWiki);
 
 
 
3078 blob_append_literal(b, "}");
3079 #undef CARD_FMT
3080 #undef CARD_LETTER
3081 #undef CARD_STR
3082 #undef CARD_STR2
3083
--- src/manifest.c
+++ src/manifest.c
@@ -3000,12 +3000,15 @@
3000 ** array, rather than no F-cards, to hypothetically simplify
3001 ** handling in JSON queries. */
3002 blob_append_char(b, ']');
3003 }
3004 CARD_STR2(G, p->zThreadRoot);
3005 if( CFTYPE_FORUM==p->type ){
3006 CARD_LETTER(H);
3007 STR_OR_NULL( (p->zThreadTitle && *p->zThreadTitle) ? p->zThreadTitle : NULL);
3008 CARD_STR2(I, p->zInReplyTo);
3009 }
3010 if( p->nField ){
3011 CARD_LETTER(J);
3012 blob_append_char(b, '[');
3013 for( i = 0; i < p->nField; ++i ){
3014 const char * zName = p->aField[i].zName;
@@ -3031,15 +3034,13 @@
3034 }
3035 CARD_STR2(N, p->zMimetype);
3036 ISA( CFTYPE_MANIFEST ){
3037 CARD_LETTER(P);
3038 blob_append_char(b, '[');
3039 for( i = 0; i < p->nParent; ++i ){
3040 if( i>0 ) blob_append_char(b, ',');
3041 blob_appendf(b, "%!j", p->azParent[i]);
 
 
3042 }
3043 /* Special case: model checkins with no P-card as having an empty
3044 ** array, as per F-cards. */
3045 blob_append_char(b, ']');
3046 }
@@ -3072,11 +3073,14 @@
3073 blob_append_char(b, '}');
3074 }
3075 blob_append_char(b, ']');
3076 }
3077 CARD_STR2(U, p->zUser);
3078 if( CFTYPE_WIKI==p->type || CFTYPE_FORUM==p->type ){
3079 CARD_LETTER(W);
3080 STR_OR_NULL((p->zWiki && *p->zWiki) ? p->zWiki : NULL);
3081 }
3082 blob_append_literal(b, "}");
3083 #undef CARD_FMT
3084 #undef CARD_LETTER
3085 #undef CARD_STR
3086 #undef CARD_STR2
3087

Keyboard Shortcuts

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