Fossil SCM

Try to make the "stat" page more readable by inserting commas in larger integers. This experiment did not work out.

drh 2012-04-02 00:11 UTC trunk
Commit ef9ec5d74acae630a416ad1a207936df99ae2e75
2 files changed +15 -2 +12 -11
+15 -2
--- src/printf.c
+++ src/printf.c
@@ -47,10 +47,11 @@
4747
#define etFOSSILIZE 19 /* The fossil header encoding format. */
4848
#define etPATH 20 /* Path type */
4949
#define etWIKISTR 21 /* Wiki text rendered from a char*: %w */
5050
#define etWIKIBLOB 22 /* Wiki text rendered from a Blob*: %W */
5151
#define etSTRINGID 23 /* String with length limit for a UUID prefix: %S */
52
+#define etCOMMA 24 /* Like %d but with commas: %D */
5253
5354
5455
/*
5556
** An "etByte" is an 8-bit unsigned value.
5657
*/
@@ -90,10 +91,11 @@
9091
{ 'z', 0, 6, etDYNSTRING, 0, 0 },
9192
{ 'q', 0, 4, etSQLESCAPE, 0, 0 },
9293
{ 'Q', 0, 4, etSQLESCAPE2, 0, 0 },
9394
{ 'b', 0, 2, etBLOB, 0, 0 },
9495
{ 'B', 0, 2, etBLOBSQL, 0, 0 },
96
+ { 'D', 10, 2, etCOMMA, 0, 0 },
9597
{ 'w', 0, 2, etWIKISTR, 0, 0 },
9698
{ 'W', 0, 2, etWIKIBLOB, 0, 0 },
9799
{ 'h', 0, 4, etHTMLIZE, 0, 0 },
98100
{ 't', 0, 4, etHTTPIZE, 0, 0 }, /* "/" -> "%2F" */
99101
{ 'T', 0, 4, etURLIZE, 0, 0 }, /* "/" unchanged */
@@ -241,11 +243,11 @@
241243
blob_append(pBlob,"%",1);
242244
count++;
243245
break;
244246
}
245247
/* Find out what flags are present */
246
- flag_leftjustify = flag_plussign = flag_blanksign =
248
+ flag_leftjustify = flag_plussign = flag_blanksign =
247249
flag_alternateform = flag_altform2 = flag_zeropad = 0;
248250
done = 0;
249251
do{
250252
switch( c ){
251253
case '-': flag_leftjustify = 1; break;
@@ -347,10 +349,11 @@
347349
case etPOINTER:
348350
flag_longlong = sizeof(char*)==sizeof(i64);
349351
flag_long = sizeof(char*)==sizeof(long int);
350352
/* Fall through into the next case */
351353
case etRADIX:
354
+ case etCOMMA:
352355
if( infop->flags & FLAG_SIGNED ){
353356
i64 v;
354357
if( flag_longlong ) v = va_arg(ap,i64);
355358
else if( flag_long ) v = va_arg(ap,long int);
356359
else v = va_arg(ap,int);
@@ -387,19 +390,29 @@
387390
length = &buf[etBUFSIZE-1]-bufpt;
388391
for(idx=precision-length; idx>0; idx--){
389392
*(--bufpt) = '0'; /* Zero pad */
390393
}
391394
if( prefix ) *(--bufpt) = prefix; /* Add sign */
395
+ length = &buf[etBUFSIZE-1]-bufpt;
396
+ if( xtype==etCOMMA && length>=4 ){
397
+ int i, j, k;
398
+ int nComma = (length-1)/3;
399
+ bufpt -= nComma;
400
+ for(i=k=0, j=nComma; i<j; i++, j++, k++){
401
+ bufpt[i] = bufpt[j];
402
+ if( (length-k)%3==1 ) bufpt[++i] = ',';
403
+ }
404
+ length += nComma;
405
+ }
392406
if( flag_alternateform && infop->prefix ){ /* Add "0" or "0x" */
393407
const char *pre;
394408
char x;
395409
pre = &aPrefix[infop->prefix];
396410
if( *bufpt!=pre[0] ){
397411
for(; (x=(*pre))!=0; pre++) *(--bufpt) = x;
398412
}
399413
}
400
- length = &buf[etBUFSIZE-1]-bufpt;
401414
break;
402415
case etFLOAT:
403416
case etEXP:
404417
case etGENERIC:
405418
realvalue = va_arg(ap,double);
406419
--- src/printf.c
+++ src/printf.c
@@ -47,10 +47,11 @@
47 #define etFOSSILIZE 19 /* The fossil header encoding format. */
48 #define etPATH 20 /* Path type */
49 #define etWIKISTR 21 /* Wiki text rendered from a char*: %w */
50 #define etWIKIBLOB 22 /* Wiki text rendered from a Blob*: %W */
51 #define etSTRINGID 23 /* String with length limit for a UUID prefix: %S */
 
52
53
54 /*
55 ** An "etByte" is an 8-bit unsigned value.
56 */
@@ -90,10 +91,11 @@
90 { 'z', 0, 6, etDYNSTRING, 0, 0 },
91 { 'q', 0, 4, etSQLESCAPE, 0, 0 },
92 { 'Q', 0, 4, etSQLESCAPE2, 0, 0 },
93 { 'b', 0, 2, etBLOB, 0, 0 },
94 { 'B', 0, 2, etBLOBSQL, 0, 0 },
 
95 { 'w', 0, 2, etWIKISTR, 0, 0 },
96 { 'W', 0, 2, etWIKIBLOB, 0, 0 },
97 { 'h', 0, 4, etHTMLIZE, 0, 0 },
98 { 't', 0, 4, etHTTPIZE, 0, 0 }, /* "/" -> "%2F" */
99 { 'T', 0, 4, etURLIZE, 0, 0 }, /* "/" unchanged */
@@ -241,11 +243,11 @@
241 blob_append(pBlob,"%",1);
242 count++;
243 break;
244 }
245 /* Find out what flags are present */
246 flag_leftjustify = flag_plussign = flag_blanksign =
247 flag_alternateform = flag_altform2 = flag_zeropad = 0;
248 done = 0;
249 do{
250 switch( c ){
251 case '-': flag_leftjustify = 1; break;
@@ -347,10 +349,11 @@
347 case etPOINTER:
348 flag_longlong = sizeof(char*)==sizeof(i64);
349 flag_long = sizeof(char*)==sizeof(long int);
350 /* Fall through into the next case */
351 case etRADIX:
 
352 if( infop->flags & FLAG_SIGNED ){
353 i64 v;
354 if( flag_longlong ) v = va_arg(ap,i64);
355 else if( flag_long ) v = va_arg(ap,long int);
356 else v = va_arg(ap,int);
@@ -387,19 +390,29 @@
387 length = &buf[etBUFSIZE-1]-bufpt;
388 for(idx=precision-length; idx>0; idx--){
389 *(--bufpt) = '0'; /* Zero pad */
390 }
391 if( prefix ) *(--bufpt) = prefix; /* Add sign */
 
 
 
 
 
 
 
 
 
 
 
392 if( flag_alternateform && infop->prefix ){ /* Add "0" or "0x" */
393 const char *pre;
394 char x;
395 pre = &aPrefix[infop->prefix];
396 if( *bufpt!=pre[0] ){
397 for(; (x=(*pre))!=0; pre++) *(--bufpt) = x;
398 }
399 }
400 length = &buf[etBUFSIZE-1]-bufpt;
401 break;
402 case etFLOAT:
403 case etEXP:
404 case etGENERIC:
405 realvalue = va_arg(ap,double);
406
--- src/printf.c
+++ src/printf.c
@@ -47,10 +47,11 @@
47 #define etFOSSILIZE 19 /* The fossil header encoding format. */
48 #define etPATH 20 /* Path type */
49 #define etWIKISTR 21 /* Wiki text rendered from a char*: %w */
50 #define etWIKIBLOB 22 /* Wiki text rendered from a Blob*: %W */
51 #define etSTRINGID 23 /* String with length limit for a UUID prefix: %S */
52 #define etCOMMA 24 /* Like %d but with commas: %D */
53
54
55 /*
56 ** An "etByte" is an 8-bit unsigned value.
57 */
@@ -90,10 +91,11 @@
91 { 'z', 0, 6, etDYNSTRING, 0, 0 },
92 { 'q', 0, 4, etSQLESCAPE, 0, 0 },
93 { 'Q', 0, 4, etSQLESCAPE2, 0, 0 },
94 { 'b', 0, 2, etBLOB, 0, 0 },
95 { 'B', 0, 2, etBLOBSQL, 0, 0 },
96 { 'D', 10, 2, etCOMMA, 0, 0 },
97 { 'w', 0, 2, etWIKISTR, 0, 0 },
98 { 'W', 0, 2, etWIKIBLOB, 0, 0 },
99 { 'h', 0, 4, etHTMLIZE, 0, 0 },
100 { 't', 0, 4, etHTTPIZE, 0, 0 }, /* "/" -> "%2F" */
101 { 'T', 0, 4, etURLIZE, 0, 0 }, /* "/" unchanged */
@@ -241,11 +243,11 @@
243 blob_append(pBlob,"%",1);
244 count++;
245 break;
246 }
247 /* Find out what flags are present */
248 flag_leftjustify = flag_plussign = flag_blanksign =
249 flag_alternateform = flag_altform2 = flag_zeropad = 0;
250 done = 0;
251 do{
252 switch( c ){
253 case '-': flag_leftjustify = 1; break;
@@ -347,10 +349,11 @@
349 case etPOINTER:
350 flag_longlong = sizeof(char*)==sizeof(i64);
351 flag_long = sizeof(char*)==sizeof(long int);
352 /* Fall through into the next case */
353 case etRADIX:
354 case etCOMMA:
355 if( infop->flags & FLAG_SIGNED ){
356 i64 v;
357 if( flag_longlong ) v = va_arg(ap,i64);
358 else if( flag_long ) v = va_arg(ap,long int);
359 else v = va_arg(ap,int);
@@ -387,19 +390,29 @@
390 length = &buf[etBUFSIZE-1]-bufpt;
391 for(idx=precision-length; idx>0; idx--){
392 *(--bufpt) = '0'; /* Zero pad */
393 }
394 if( prefix ) *(--bufpt) = prefix; /* Add sign */
395 length = &buf[etBUFSIZE-1]-bufpt;
396 if( xtype==etCOMMA && length>=4 ){
397 int i, j, k;
398 int nComma = (length-1)/3;
399 bufpt -= nComma;
400 for(i=k=0, j=nComma; i<j; i++, j++, k++){
401 bufpt[i] = bufpt[j];
402 if( (length-k)%3==1 ) bufpt[++i] = ',';
403 }
404 length += nComma;
405 }
406 if( flag_alternateform && infop->prefix ){ /* Add "0" or "0x" */
407 const char *pre;
408 char x;
409 pre = &aPrefix[infop->prefix];
410 if( *bufpt!=pre[0] ){
411 for(; (x=(*pre))!=0; pre++) *(--bufpt) = x;
412 }
413 }
 
414 break;
415 case etFLOAT:
416 case etEXP:
417 case etGENERIC:
418 realvalue = va_arg(ap,double);
419
+12 -11
--- src/stat.c
+++ src/stat.c
@@ -31,27 +31,28 @@
3131
i64 t, fsize;
3232
int n, m;
3333
int szMax, szAvg;
3434
const char *zDb;
3535
int brief;
36
- char zBuf[100];
36
+ char *z;
37
+ char zBuf[200];
3738
3839
login_check_credentials();
3940
if( !g.perm.Read ){ login_needed(); return; }
4041
brief = P("brief")!=0;
4142
style_header("Repository Statistics");
4243
@ <table class="label-value">
4344
@ <tr><th>Repository&nbsp;Size:</th><td>
4445
fsize = file_size(g.zRepositoryName);
45
- sqlite3_snprintf(sizeof(zBuf), zBuf, "%lld", fsize);
46
- @ %s(zBuf) bytes
46
+ z = mprintf("%llD", fsize);
47
+ @ %z(z) bytes
4748
@ </td></tr>
4849
if( !brief ){
4950
@ <tr><th>Number&nbsp;Of&nbsp;Artifacts:</th><td>
5051
n = db_int(0, "SELECT count(*) FROM blob");
5152
m = db_int(0, "SELECT count(*) FROM delta");
52
- @ %d(n) (stored as %d(n-m) full text and %d(m) delta blobs)
53
+ @ %D(n) (stored as %D(n-m) full text and %D(m) delta blobs)
5354
@ </td></tr>
5455
if( n>0 ){
5556
int a, b;
5657
Stmt q;
5758
@ <tr><th>Uncompressed&nbsp;Artifact&nbsp;Size:</th><td>
@@ -60,12 +61,12 @@
6061
db_step(&q);
6162
t = db_column_int64(&q, 0);
6263
szAvg = db_column_int(&q, 1);
6364
szMax = db_column_int(&q, 2);
6465
db_finalize(&q);
65
- sqlite3_snprintf(sizeof(zBuf), zBuf, "%lld", t);
66
- @ %d(szAvg) bytes average, %d(szMax) bytes max, %s(zBuf) bytes total
66
+ z = mprintf("%llD", t);
67
+ @ %D(szAvg) bytes average, %D(szMax) bytes max, %z(z) bytes total
6768
@ </td></tr>
6869
@ <tr><th>Compression&nbsp;Ratio:</th><td>
6970
if( t/fsize < 5 ){
7071
b = 10;
7172
fsize /= 10;
@@ -76,31 +77,31 @@
7677
@ %d(a):%d(b)
7778
@ </td></tr>
7879
}
7980
@ <tr><th>Number&nbsp;Of&nbsp;Check-ins:</th><td>
8081
n = db_int(0, "SELECT count(distinct mid) FROM mlink /*scan*/");
81
- @ %d(n)
82
+ @ %D(n)
8283
@ </td></tr>
8384
@ <tr><th>Number&nbsp;Of&nbsp;Files:</th><td>
8485
n = db_int(0, "SELECT count(*) FROM filename /*scan*/");
85
- @ %d(n)
86
+ @ %D(n)
8687
@ </td></tr>
8788
@ <tr><th>Number&nbsp;Of&nbsp;Wiki&nbsp;Pages:</th><td>
8889
n = db_int(0, "SELECT count(*) FROM tag /*scan*/"
8990
" WHERE +tagname GLOB 'wiki-*'");
90
- @ %d(n)
91
+ @ %D(n)
9192
@ </td></tr>
9293
@ <tr><th>Number&nbsp;Of&nbsp;Tickets:</th><td>
9394
n = db_int(0, "SELECT count(*) FROM tag /*scan*/"
9495
" WHERE +tagname GLOB 'tkt-*'");
95
- @ %d(n)
96
+ @ %D(n)
9697
@ </td></tr>
9798
}
9899
@ <tr><th>Duration&nbsp;Of&nbsp;Project:</th><td>
99100
n = db_int(0, "SELECT julianday('now') - (SELECT min(mtime) FROM event)"
100101
" + 0.99");
101
- @ %d(n) days
102
+ @ %D(n) days
102103
sqlite3_snprintf(sizeof(zBuf), zBuf, "%.2f", n/365.24);
103104
@ or approximately %s(zBuf) years
104105
@ </td></tr>
105106
@ <tr><th>Project&nbsp;ID:</th><td>%h(db_get("project-code",""))</td></tr>
106107
@ <tr><th>Server&nbsp;ID:</th><td>%h(db_get("server-code",""))</td></tr>
107108
--- src/stat.c
+++ src/stat.c
@@ -31,27 +31,28 @@
31 i64 t, fsize;
32 int n, m;
33 int szMax, szAvg;
34 const char *zDb;
35 int brief;
36 char zBuf[100];
 
37
38 login_check_credentials();
39 if( !g.perm.Read ){ login_needed(); return; }
40 brief = P("brief")!=0;
41 style_header("Repository Statistics");
42 @ <table class="label-value">
43 @ <tr><th>Repository&nbsp;Size:</th><td>
44 fsize = file_size(g.zRepositoryName);
45 sqlite3_snprintf(sizeof(zBuf), zBuf, "%lld", fsize);
46 @ %s(zBuf) bytes
47 @ </td></tr>
48 if( !brief ){
49 @ <tr><th>Number&nbsp;Of&nbsp;Artifacts:</th><td>
50 n = db_int(0, "SELECT count(*) FROM blob");
51 m = db_int(0, "SELECT count(*) FROM delta");
52 @ %d(n) (stored as %d(n-m) full text and %d(m) delta blobs)
53 @ </td></tr>
54 if( n>0 ){
55 int a, b;
56 Stmt q;
57 @ <tr><th>Uncompressed&nbsp;Artifact&nbsp;Size:</th><td>
@@ -60,12 +61,12 @@
60 db_step(&q);
61 t = db_column_int64(&q, 0);
62 szAvg = db_column_int(&q, 1);
63 szMax = db_column_int(&q, 2);
64 db_finalize(&q);
65 sqlite3_snprintf(sizeof(zBuf), zBuf, "%lld", t);
66 @ %d(szAvg) bytes average, %d(szMax) bytes max, %s(zBuf) bytes total
67 @ </td></tr>
68 @ <tr><th>Compression&nbsp;Ratio:</th><td>
69 if( t/fsize < 5 ){
70 b = 10;
71 fsize /= 10;
@@ -76,31 +77,31 @@
76 @ %d(a):%d(b)
77 @ </td></tr>
78 }
79 @ <tr><th>Number&nbsp;Of&nbsp;Check-ins:</th><td>
80 n = db_int(0, "SELECT count(distinct mid) FROM mlink /*scan*/");
81 @ %d(n)
82 @ </td></tr>
83 @ <tr><th>Number&nbsp;Of&nbsp;Files:</th><td>
84 n = db_int(0, "SELECT count(*) FROM filename /*scan*/");
85 @ %d(n)
86 @ </td></tr>
87 @ <tr><th>Number&nbsp;Of&nbsp;Wiki&nbsp;Pages:</th><td>
88 n = db_int(0, "SELECT count(*) FROM tag /*scan*/"
89 " WHERE +tagname GLOB 'wiki-*'");
90 @ %d(n)
91 @ </td></tr>
92 @ <tr><th>Number&nbsp;Of&nbsp;Tickets:</th><td>
93 n = db_int(0, "SELECT count(*) FROM tag /*scan*/"
94 " WHERE +tagname GLOB 'tkt-*'");
95 @ %d(n)
96 @ </td></tr>
97 }
98 @ <tr><th>Duration&nbsp;Of&nbsp;Project:</th><td>
99 n = db_int(0, "SELECT julianday('now') - (SELECT min(mtime) FROM event)"
100 " + 0.99");
101 @ %d(n) days
102 sqlite3_snprintf(sizeof(zBuf), zBuf, "%.2f", n/365.24);
103 @ or approximately %s(zBuf) years
104 @ </td></tr>
105 @ <tr><th>Project&nbsp;ID:</th><td>%h(db_get("project-code",""))</td></tr>
106 @ <tr><th>Server&nbsp;ID:</th><td>%h(db_get("server-code",""))</td></tr>
107
--- src/stat.c
+++ src/stat.c
@@ -31,27 +31,28 @@
31 i64 t, fsize;
32 int n, m;
33 int szMax, szAvg;
34 const char *zDb;
35 int brief;
36 char *z;
37 char zBuf[200];
38
39 login_check_credentials();
40 if( !g.perm.Read ){ login_needed(); return; }
41 brief = P("brief")!=0;
42 style_header("Repository Statistics");
43 @ <table class="label-value">
44 @ <tr><th>Repository&nbsp;Size:</th><td>
45 fsize = file_size(g.zRepositoryName);
46 z = mprintf("%llD", fsize);
47 @ %z(z) bytes
48 @ </td></tr>
49 if( !brief ){
50 @ <tr><th>Number&nbsp;Of&nbsp;Artifacts:</th><td>
51 n = db_int(0, "SELECT count(*) FROM blob");
52 m = db_int(0, "SELECT count(*) FROM delta");
53 @ %D(n) (stored as %D(n-m) full text and %D(m) delta blobs)
54 @ </td></tr>
55 if( n>0 ){
56 int a, b;
57 Stmt q;
58 @ <tr><th>Uncompressed&nbsp;Artifact&nbsp;Size:</th><td>
@@ -60,12 +61,12 @@
61 db_step(&q);
62 t = db_column_int64(&q, 0);
63 szAvg = db_column_int(&q, 1);
64 szMax = db_column_int(&q, 2);
65 db_finalize(&q);
66 z = mprintf("%llD", t);
67 @ %D(szAvg) bytes average, %D(szMax) bytes max, %z(z) bytes total
68 @ </td></tr>
69 @ <tr><th>Compression&nbsp;Ratio:</th><td>
70 if( t/fsize < 5 ){
71 b = 10;
72 fsize /= 10;
@@ -76,31 +77,31 @@
77 @ %d(a):%d(b)
78 @ </td></tr>
79 }
80 @ <tr><th>Number&nbsp;Of&nbsp;Check-ins:</th><td>
81 n = db_int(0, "SELECT count(distinct mid) FROM mlink /*scan*/");
82 @ %D(n)
83 @ </td></tr>
84 @ <tr><th>Number&nbsp;Of&nbsp;Files:</th><td>
85 n = db_int(0, "SELECT count(*) FROM filename /*scan*/");
86 @ %D(n)
87 @ </td></tr>
88 @ <tr><th>Number&nbsp;Of&nbsp;Wiki&nbsp;Pages:</th><td>
89 n = db_int(0, "SELECT count(*) FROM tag /*scan*/"
90 " WHERE +tagname GLOB 'wiki-*'");
91 @ %D(n)
92 @ </td></tr>
93 @ <tr><th>Number&nbsp;Of&nbsp;Tickets:</th><td>
94 n = db_int(0, "SELECT count(*) FROM tag /*scan*/"
95 " WHERE +tagname GLOB 'tkt-*'");
96 @ %D(n)
97 @ </td></tr>
98 }
99 @ <tr><th>Duration&nbsp;Of&nbsp;Project:</th><td>
100 n = db_int(0, "SELECT julianday('now') - (SELECT min(mtime) FROM event)"
101 " + 0.99");
102 @ %D(n) days
103 sqlite3_snprintf(sizeof(zBuf), zBuf, "%.2f", n/365.24);
104 @ or approximately %s(zBuf) years
105 @ </td></tr>
106 @ <tr><th>Project&nbsp;ID:</th><td>%h(db_get("project-code",""))</td></tr>
107 @ <tr><th>Server&nbsp;ID:</th><td>%h(db_get("server-code",""))</td></tr>
108

Keyboard Shortcuts

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