Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Changed /json/stat to use brief mode by default due to relatively high runtime cost, replaced 'brief' param with 'full'. Added json_getenv_bool(). |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | json |
Files: | files | file ages | folders |
SHA1: |
c1914eaa7944d9c06432dcbdac6f5415 |
User & Date: | stephan 2011-09-27 02:09:28.277 |
Context
2011-09-27
| ||
03:25 | Added showFiles=bool/--show-files option to /json/timeline/ci. ... (check-in: 98e24465 user: stephan tags: json) | |
02:09 | Changed /json/stat to use brief mode by default due to relatively high runtime cost, replaced 'brief' param with 'full'. Added json_getenv_bool(). ... (check-in: c1914eaa user: stephan tags: json) | |
01:51 | Added "brief" option to /json/stat, mirroring the change in [d01ca14d08]. ... (check-in: 17f11a08 user: stephan tags: json) | |
Changes
Changes to src/json.c.
︙ | ︙ | |||
286 287 288 289 290 291 292 | return NULL; } /* ** Wrapper around json_getenv() which... ** ** If it finds a value and that value is-a JSON number or is a string | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 | return NULL; } /* ** Wrapper around json_getenv() which... ** ** If it finds a value and that value is-a JSON number or is a string ** which looks like an integer or is-a JSON bool/null then it is ** converted to an int. If none of those apply then dflt is returned. */ int json_getenv_int(char const * pKey, int dflt ){ cson_value const * v = json_getenv(pKey); if(!v){ return dflt; }else if( cson_value_is_number(v) ){ return (int)cson_value_get_integer(v); }else if( cson_value_is_string(v) ){ char const * sv = cson_string_cstr(cson_value_get_string(v)); assert( (NULL!=sv) && "This is quite unexpected." ); return sv ? atoi(sv) : dflt; }else if( cson_value_is_bool(v) ){ return cson_value_get_bool(v) ? 1 : 0; }else if( cson_value_is_null(v) ){ return 0; }else{ /* we should arguably treat JSON null as 0. */ return dflt; } } /* ** Wrapper around json_getenv() which tries to evaluate a payload/env ** value as a boolean. Uses mostly the same logic as ** json_getenv_int(), with the addition that string values which ** either start with a digit 1..9 or the letters [tT] are considered ** to be true. If this function cannot find a matching key/value then ** dflt is returned. e.g. if it finds the key but the value is-a ** Object then dftl is returned. */ char json_getenv_bool(char const * pKey, char dflt ){ cson_value const * v = json_getenv(pKey); if(!v){ return dflt; }else if( cson_value_is_number(v) ){ return cson_value_get_integer(v) ? 1 : 0; }else if( cson_value_is_string(v) ){ char const * sv = cson_string_cstr(cson_value_get_string(v)); if(!*sv || ('0'==*sv)){ return 0; }else{ return (('t'==*sv) || ('T'==*sv) || (('1'<=*sv) && ('9'>=*sv))) ? 1 : 0; } }else if( cson_value_is_bool(v) ){ return cson_value_get_bool(v) ? 1 : 0; }else if( cson_value_is_null(v) ){ return 0; }else{ return dflt; } } /* ** Returns the string form of a json_getenv() value, but ONLY If that ** value is-a String. Non-strings are not converted to strings for ** this purpose. Returned memory is owned by g.json or fossil and is ** valid until end-of-app or the given key is replaced in fossil's ** internals via cgi_replace_parameter() and friends or json_setenv(). |
︙ | ︙ | |||
1220 1221 1222 1223 1224 1225 1226 | /* ** Implementation of the /json/stat page/command. ** */ cson_value * json_page_stat(){ i64 t, fsize; int n, m; | | | | | | 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 | /* ** Implementation of the /json/stat page/command. ** */ cson_value * json_page_stat(){ i64 t, fsize; int n, m; int full; const char *zDb; enum { BufLen = 1000 }; char zBuf[BufLen]; cson_value * jv = NULL; cson_object * jo = NULL; cson_value * jv2 = NULL; cson_object * jo2 = NULL; if( !g.perm.Read ){ g.json.resultCode = FSL_JSON_E_DENIED; return NULL; } if( g.isHTTP ){ full = json_getenv_bool("full",0); }else{ full = (0!=find_option("full","f",0)); } #define SETBUF(O,K) cson_object_set(O, K, cson_value_new_string(zBuf, strlen(zBuf))); jv = cson_value_new_object(); jo = cson_value_get_object(jv); sqlite3_snprintf(BufLen, zBuf, db_get("project-name","")); SETBUF(jo, "projectName"); /* FIXME: don't include project-description until we ensure that zBuf will always be big enough. We "should" replace zBuf with a blob for this purpose. */ fsize = file_size(g.zRepositoryName); cson_object_set(jo, "repositorySize", cson_value_new_integer((cson_int_t)fsize)); if(full){ n = db_int(0, "SELECT count(*) FROM blob"); m = db_int(0, "SELECT count(*) FROM delta"); cson_object_set(jo, "blobCount", cson_value_new_integer((cson_int_t)n)); cson_object_set(jo, "deltaCount", cson_value_new_integer((cson_int_t)m)); if( n>0 ){ int a, b; Stmt q; |
︙ | ︙ | |||
1290 1291 1292 1293 1294 1295 1296 | cson_object_set(jo, "fileCount", cson_value_new_integer((cson_int_t)n)); n = db_int(0, "SELECT count(*) FROM tag /*scan*/" " WHERE +tagname GLOB 'wiki-*'"); cson_object_set(jo, "wikiPageCount", cson_value_new_integer((cson_int_t)n)); n = db_int(0, "SELECT count(*) FROM tag /*scan*/" " WHERE +tagname GLOB 'tkt-*'"); cson_object_set(jo, "ticketCount", cson_value_new_integer((cson_int_t)n)); | | | 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 | cson_object_set(jo, "fileCount", cson_value_new_integer((cson_int_t)n)); n = db_int(0, "SELECT count(*) FROM tag /*scan*/" " WHERE +tagname GLOB 'wiki-*'"); cson_object_set(jo, "wikiPageCount", cson_value_new_integer((cson_int_t)n)); n = db_int(0, "SELECT count(*) FROM tag /*scan*/" " WHERE +tagname GLOB 'tkt-*'"); cson_object_set(jo, "ticketCount", cson_value_new_integer((cson_int_t)n)); }/*full*/ n = db_int(0, "SELECT julianday('now') - (SELECT min(mtime) FROM event)" " + 0.99"); cson_object_set(jo, "ageDays", cson_value_new_integer((cson_int_t)n)); cson_object_set(jo, "ageYears", cson_value_new_double(n/365.24)); sqlite3_snprintf(BufLen, zBuf, db_get("project-code","")); SETBUF(jo, "projectCode"); sqlite3_snprintf(BufLen, zBuf, db_get("server-code","")); |
︙ | ︙ |