Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Enhance the "fossil rebuild" command so that it looks at "private" --raw tags and rebuilds the PRIVATE table to contain (at least) the content that is tagged "private". |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
2f98f6603143a32547a4b9c238478f7d |
User & Date: | drh 2012-02-21 01:53:42 |
Context
2012-02-21
| ||
02:01 | Make sure the "fossil rebuild" command always ends up showing "100.0% complete", not "99.9%" or "100.1%". ... (check-in: 3a44f95f user: drh tags: trunk) | |
01:53 | Enhance the "fossil rebuild" command so that it looks at "private" --raw tags and rebuilds the PRIVATE table to contain (at least) the content that is tagged "private". ... (check-in: 2f98f660 user: drh tags: trunk) | |
2012-02-19
| ||
16:42 | Added -verbose flag to /json/wiki/list, which returns the metadata for all pages but not their content. ... (check-in: fe99188e user: stephan tags: trunk) | |
Changes
Changes to src/clone.c.
︙ | ︙ | |||
18 19 20 21 22 23 24 | ** This file contains code used to clone a repository */ #include "config.h" #include "clone.h" #include <assert.h> /* | > > | | | > | | | | > | > > | | > > | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | ** This file contains code used to clone a repository */ #include "config.h" #include "clone.h" #include <assert.h> /* ** If there are public BLOBs that deltas from private BLOBs, then ** undeltify the public BLOBs so that the private BLOBs may be safely ** deleted. */ void fix_private_blob_dependencies(int showWarning){ Bag toUndelta; Stmt q; int rid; /* Careful: We are about to delete all BLOB entries that are private. ** So make sure that any no public BLOBs are deltas from a private BLOB. ** Otherwise after the deletion, we won't be able to recreate the public ** BLOBs. */ db_prepare(&q, "SELECT " " rid, (SELECT uuid FROM blob WHERE rid=delta.rid)," " srcid, (SELECT uuid FROM blob WHERE rid=delta.srcid)" " FROM delta" " WHERE srcid in private AND rid NOT IN private" ); bag_init(&toUndelta); while( db_step(&q)==SQLITE_ROW ){ int rid = db_column_int(&q, 0); const char *zId = db_column_text(&q, 1); int srcid = db_column_int(&q, 2); const char *zSrc = db_column_text(&q, 3); if( showWarning ){ fossil_warning( "public artifact %S (%d) is a delta from private artifact %S (%d)", zId, rid, zSrc, srcid ); } bag_insert(&toUndelta, rid); } db_finalize(&q); while( (rid = bag_first(&toUndelta))>0 ){ content_undelta(rid); bag_remove(&toUndelta, rid); } bag_clear(&toUndelta); } /* ** Delete all private content from a repository. */ void delete_private_content(void){ fix_private_blob_dependencies(1); db_multi_exec( "DELETE FROM blob WHERE rid IN private;" "DELETE FROM delta wHERE rid IN private;" "DELETE FROM private;" ); } |
︙ | ︙ |
Changes to src/rebuild.c.
︙ | ︙ | |||
483 484 485 486 487 488 489 490 491 492 493 494 495 496 | previd = rid; } } db_finalize(&q); db_end_transaction(0); } /* ** COMMAND: rebuild ** ** Usage: %fossil rebuild ?REPOSITORY? ?OPTIONS? ** ** Reconstruct the named repository database from the core | > > > > > > > > > > > > > > > > > > > > | 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 | previd = rid; } } db_finalize(&q); db_end_transaction(0); } /* Reconstruct the private table. The private table contains the rid ** of every manifest that is tagged with "private" and every file that ** is not used by a manifest that is not private. */ static void reconstruct_private_table(void){ db_multi_exec( "CREATE TEMP TABLE private_ckin(rid INTEGER PRIMARY KEY);" "INSERT INTO private_ckin " " SELECT rid FROM tagxref WHERE tagid=%d AND tagtype>0;" "INSERT OR IGNORE INTO private" " SELECT fid FROM mlink" " EXCEPT SELECT fid FROM mlink WHERE mid NOT IN private_ckin;" "INSERT OR IGNORE INTO private SELECT rid FROM private_ckin;" "DROP TABLE private_ckin;", TAG_PRIVATE ); fix_private_blob_dependencies(0); } /* ** COMMAND: rebuild ** ** Usage: %fossil rebuild ?REPOSITORY? ?OPTIONS? ** ** Reconstruct the named repository database from the core |
︙ | ︙ | |||
549 550 551 552 553 554 555 556 557 558 559 560 561 562 | } db_close(1); db_open_repository(g.zRepositoryName); } db_begin_transaction(); ttyOutput = 1; errCnt = rebuild_db(randomizeFlag, 1, doClustering); db_multi_exec( "REPLACE INTO config(name,value,mtime) VALUES('content-schema','%s',now());" "REPLACE INTO config(name,value,mtime) VALUES('aux-schema','%s',now());", CONTENT_SCHEMA, AUX_SCHEMA ); if( errCnt && !forceFlag ){ fossil_print( | > | 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 | } db_close(1); db_open_repository(g.zRepositoryName); } db_begin_transaction(); ttyOutput = 1; errCnt = rebuild_db(randomizeFlag, 1, doClustering); reconstruct_private_table(); db_multi_exec( "REPLACE INTO config(name,value,mtime) VALUES('content-schema','%s',now());" "REPLACE INTO config(name,value,mtime) VALUES('aux-schema','%s',now());", CONTENT_SCHEMA, AUX_SCHEMA ); if( errCnt && !forceFlag ){ fossil_print( |
︙ | ︙ | |||
879 880 881 882 883 884 885 | db_initial_setup(0, 0, 1); fossil_print("Reading files from directory \"%s\"...\n", g.argv[3]); recon_read_dir(g.argv[3]); fossil_print("\nBuilding the Fossil repository...\n"); rebuild_db(0, 1, 1); | | < < < < < < < < < < < < < < | 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 | db_initial_setup(0, 0, 1); fossil_print("Reading files from directory \"%s\"...\n", g.argv[3]); recon_read_dir(g.argv[3]); fossil_print("\nBuilding the Fossil repository...\n"); rebuild_db(0, 1, 1); reconstruct_private_table(); /* Skip the verify_before_commit() step on a reconstruct. Most artifacts ** will have been changed and verification therefore takes a really, really ** long time. */ verify_cancel(); |
︙ | ︙ |