Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Create a valid rcvfrom entry when adding unversioned content from the command-line. |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
7deeb51511eca1390c0c2126540e71ad |
| User & Date: | drh 2016-08-22 21:10:36.442 |
Context
|
2016-08-23
| ||
| 01:22 | Improved origin tracking for unversioned files. Show Admin/Setup users the rcvid and allow them to see the originating IP address and to delete unversioned files. Update the rcvfrom table viewer to include unversioned file entries. check-in: 8972aae720 user: drh tags: trunk | |
|
2016-08-22
| ||
| 21:10 | Create a valid rcvfrom entry when adding unversioned content from the command-line. check-in: 7deeb51511 user: drh tags: trunk | |
| 20:12 | Remove the db_name() function. In its place, the SQLITE_DBCONFIG_MAINDBNAME feature of SQLite is used to ensure that the three attached databases are always exactly named "repository", "configdb" and "localdb", regardless of which is opened first or the order in which they are attached. Update to the latest 3.15 alpha of SQLite which is now requi... check-in: 06aec61111 user: drh tags: trunk | |
Changes
Changes to src/unversioned.c.
| ︙ | ︙ | |||
205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
Stmt ins;
int i;
zAs = find_option("as",0,1);
if( zAs && g.argc!=4 ) usage("add DISKFILE --as UVFILE");
verify_all_options();
db_begin_transaction();
content_rcvid_init();
db_prepare(&ins,
"REPLACE INTO unversioned(name,rcvid,mtime,hash,sz,encoding,content)"
" VALUES(:name,:rcvid,:mtime,:hash,:sz,:encoding,:content)"
);
for(i=3; i<g.argc; i++){
zIn = zAs ? zAs : g.argv[i];
| > > | 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
Stmt ins;
int i;
zAs = find_option("as",0,1);
if( zAs && g.argc!=4 ) usage("add DISKFILE --as UVFILE");
verify_all_options();
db_begin_transaction();
user_select();
g.zIpAddr = "command-line";
content_rcvid_init();
db_prepare(&ins,
"REPLACE INTO unversioned(name,rcvid,mtime,hash,sz,encoding,content)"
" VALUES(:name,:rcvid,:mtime,:hash,:sz,:encoding,:content)"
);
for(i=3; i<g.argc; i++){
zIn = zAs ? zAs : g.argv[i];
|
| ︙ | ︙ | |||
369 370 371 372 373 374 375 |
style_footer();
return;
}
db_prepare(&q,
"SELECT"
" name,"
" mtime,"
| | | > > > | > > > > > > > | > | | 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 |
style_footer();
return;
}
db_prepare(&q,
"SELECT"
" name,"
" mtime,"
" hash,"
" sz,"
" (SELECT login FROM rcvfrom, user"
" WHERE user.uid=rcvfrom.uid AND rcvfrom.rcvid=unversioned.rcvid)"
" FROM unversioned"
);
iNow = db_int64(0, "SELECT strftime('%%s','now');");
while( db_step(&q)==SQLITE_ROW ){
const char *zName = db_column_text(&q, 0);
sqlite3_int64 mtime = db_column_int(&q, 1);
const char *zHash = db_column_text(&q, 2);
int isDeleted = zHash==0;
int fullSize = db_column_int(&q, 3);
char *zAge = human_readable_age((iNow - mtime)/86400.0);
const char *zLogin = db_column_text(&q, 4);
if( zLogin==0 ) zLogin = "";
if( (n++)==0 ){
@ <div class="uvlist">
@ <table cellpadding="2" cellspacing="0" border="1" id="uvtab">
@ <thead><tr>
@ <th> Name
@ <th> Age
@ <th> Size
@ <th> User
@ <th> SHA1
@ </tr></thead>
@ <tbody>
}
if( isDeleted ){
sqlite3_snprintf(sizeof(zSzName), zSzName, "<i>Deleted</i>");
zHash = "";
fullSize = 0;
}else{
approxSizeName(sizeof(zSzName), zSzName, fullSize);
iTotalSz += fullSize;
cnt++;
}
@ <tr>
@ <td> <a href='%R/uv/%T(zName)'>%h(zName)</a> </td>
@ <td data-sortkey='%016llx(-mtime)'> %s(zAge) </td>
@ <td data-sortkey='%08x(fullSize)'> %s(zSzName) </td>
@ <td> %h(zLogin) </td>
@ <td> %h(zHash) </td>
@ </tr>
fossil_free(zAge);
}
db_finalize(&q);
if( n ){
approxSizeName(sizeof(zSzName), zSzName, iTotalSz);
@ </tbody>
@ <tfoot><tr><td><b>Total over %d(cnt) files</b><td><td>%s(zSzName)
@ <td><td></tfoot>
@ </table></div>
output_table_sorting_javascript("uvtab","tKktt",1);
}else{
@ No unversioned files on this server.
}
style_footer();
}
|
Changes to src/xfer.c.
| ︙ | ︙ | |||
343 344 345 346 347 348 349 350 351 352 353 354 355 356 |
}
}else{
nullContent = 1;
}
/* The isWriter flag must be true in order to land the new file */
if( !isWriter ) goto end_accept_unversioned_file;
/* Check to see if current content really should be overwritten. Ideally,
** a uvfile card should never have been sent unless the overwrite should
** occur. But do not trust the sender. Double-check.
*/
iStatus = unversioned_status(blob_str(&pXfer->aToken[1]), mtime,
blob_str(pHash));
| > > > | 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 |
}
}else{
nullContent = 1;
}
/* The isWriter flag must be true in order to land the new file */
if( !isWriter ) goto end_accept_unversioned_file;
/* Make sure we have a valid g.rcvid marker */
content_rcvid_init();
/* Check to see if current content really should be overwritten. Ideally,
** a uvfile card should never have been sent unless the overwrite should
** occur. But do not trust the sender. Double-check.
*/
iStatus = unversioned_status(blob_str(&pXfer->aToken[1]), mtime,
blob_str(pHash));
|
| ︙ | ︙ |