Fossil SCM

Add the /uvlist webpage.

drh 2016-08-17 09:28 UTC unversioned-files
Commit 52860aa6ab27dc1a7595e8033006fda8e288dfed
1 file changed +67
--- src/unversioned.c
+++ src/unversioned.c
@@ -343,5 +343,72 @@
343343
db_end_transaction(0);
344344
}else{
345345
usage("add|cat|export|ls|revert|rm|sync|touch");
346346
}
347347
}
348
+
349
+/*
350
+** WEBPAGE: uvlist
351
+**
352
+** Display a list of all unversioned files in the repository.
353
+*/
354
+void uvstat_page(void){
355
+ Stmt q;
356
+ sqlite3_int64 iNow;
357
+ sqlite3_int64 iTotalSz = 0;
358
+ int cnt = 0;
359
+ char zSzName[100];
360
+
361
+ login_check_credentials();
362
+ if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
363
+ style_header("Unversioned Files");
364
+ if( !db_table_exists("repository","unversioned") ){
365
+ @ No unversioned files on this server
366
+ style_footer();
367
+ return;
368
+ }
369
+ db_prepare(&q,
370
+ "SELECT"
371
+ " name,"
372
+ " mtime,"
373
+ " hash IS NULL,"
374
+ " sz"
375
+ " FROM unversioned"
376
+ );
377
+ iNow = db_int64(0, "SELECT strftime('%%s','now');");
378
+ @ <div class="uvlist">
379
+ @ <table cellpadding="2" cellspacing="0" border="1" id="uvtab">
380
+ @ <thead><tr>
381
+ @ <th> Name
382
+ @ <th> Age
383
+ @ <th> Size
384
+ @ </tr></thead>
385
+ @ <tbody>
386
+ while( db_step(&q)==SQLITE_ROW ){
387
+ const char *zName = db_column_text(&q, 0);
388
+ sqlite3_int64 mtime = db_column_int(&q, 1);
389
+ int isDeleted = db_column_int(&q, 2);
390
+ int fullSize = db_column_int(&q, 3);
391
+ char *zAge = human_readable_age((iNow - mtime)/86400.0);
392
+ if( isDeleted ){
393
+ sqlite3_snprintf(sizeof(zSzName), zSzName, "<i>Deleted</i>");
394
+ fullSize = 0;
395
+ }else{
396
+ approxSizeName(sizeof(zSzName), zSzName, fullSize);
397
+ iTotalSz += fullSize;
398
+ cnt++;
399
+ }
400
+ @ <tr>
401
+ @ <td> <a href='%R/uv/%T(zName)'>%h(zName)</a> </td>
402
+ @ <td data-sortkey='%016llx(-mtime)'> %s(zAge) </td>
403
+ @ <td data-sortkey='%08x(fullSize)'> %s(zSzName) </td>
404
+ @ </tr>
405
+ fossil_free(zAge);
406
+ }
407
+ approxSizeName(sizeof(zSzName), zSzName, iTotalSz);
408
+ @ </tbody>
409
+ @ <tfoot><tr><td><b>Total over %d(cnt) files</b><td><td>%s(zSzName)</tfoot>
410
+ @ </table></div>
411
+ db_finalize(&q);
412
+ output_table_sorting_javascript("uvtab","tKk",1);
413
+ style_footer();
414
+}
348415
--- src/unversioned.c
+++ src/unversioned.c
@@ -343,5 +343,72 @@
343 db_end_transaction(0);
344 }else{
345 usage("add|cat|export|ls|revert|rm|sync|touch");
346 }
347 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
348
--- src/unversioned.c
+++ src/unversioned.c
@@ -343,5 +343,72 @@
343 db_end_transaction(0);
344 }else{
345 usage("add|cat|export|ls|revert|rm|sync|touch");
346 }
347 }
348
349 /*
350 ** WEBPAGE: uvlist
351 **
352 ** Display a list of all unversioned files in the repository.
353 */
354 void uvstat_page(void){
355 Stmt q;
356 sqlite3_int64 iNow;
357 sqlite3_int64 iTotalSz = 0;
358 int cnt = 0;
359 char zSzName[100];
360
361 login_check_credentials();
362 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
363 style_header("Unversioned Files");
364 if( !db_table_exists("repository","unversioned") ){
365 @ No unversioned files on this server
366 style_footer();
367 return;
368 }
369 db_prepare(&q,
370 "SELECT"
371 " name,"
372 " mtime,"
373 " hash IS NULL,"
374 " sz"
375 " FROM unversioned"
376 );
377 iNow = db_int64(0, "SELECT strftime('%%s','now');");
378 @ <div class="uvlist">
379 @ <table cellpadding="2" cellspacing="0" border="1" id="uvtab">
380 @ <thead><tr>
381 @ <th> Name
382 @ <th> Age
383 @ <th> Size
384 @ </tr></thead>
385 @ <tbody>
386 while( db_step(&q)==SQLITE_ROW ){
387 const char *zName = db_column_text(&q, 0);
388 sqlite3_int64 mtime = db_column_int(&q, 1);
389 int isDeleted = db_column_int(&q, 2);
390 int fullSize = db_column_int(&q, 3);
391 char *zAge = human_readable_age((iNow - mtime)/86400.0);
392 if( isDeleted ){
393 sqlite3_snprintf(sizeof(zSzName), zSzName, "<i>Deleted</i>");
394 fullSize = 0;
395 }else{
396 approxSizeName(sizeof(zSzName), zSzName, fullSize);
397 iTotalSz += fullSize;
398 cnt++;
399 }
400 @ <tr>
401 @ <td> <a href='%R/uv/%T(zName)'>%h(zName)</a> </td>
402 @ <td data-sortkey='%016llx(-mtime)'> %s(zAge) </td>
403 @ <td data-sortkey='%08x(fullSize)'> %s(zSzName) </td>
404 @ </tr>
405 fossil_free(zAge);
406 }
407 approxSizeName(sizeof(zSzName), zSzName, iTotalSz);
408 @ </tbody>
409 @ <tfoot><tr><td><b>Total over %d(cnt) files</b><td><td>%s(zSzName)</tfoot>
410 @ </table></div>
411 db_finalize(&q);
412 output_table_sorting_javascript("uvtab","tKk",1);
413 style_footer();
414 }
415

Keyboard Shortcuts

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