| | @@ -226,11 +226,11 @@ |
| 226 | 226 | db_begin_transaction(); |
| 227 | 227 | db_multi_exec("CREATE TEMP TABLE tobundle(rid INTEGER PRIMARY KEY);"); |
| 228 | 228 | subtree_from_arguments("tobundle"); |
| 229 | 229 | verify_all_options(); |
| 230 | 230 | if( bAll ) find_checkin_associates("tobundle",bExcl); |
| 231 | | - describe_artifacts_to_stdout("IN tobundle"); |
| 231 | + describe_artifacts_to_stdout("IN tobundle", 0); |
| 232 | 232 | db_end_transaction(1); |
| 233 | 233 | } |
| 234 | 234 | |
| 235 | 235 | /* fossil bundle export BUNDLE ?OPTIONS? |
| 236 | 236 | ** |
| | @@ -590,11 +590,11 @@ |
| 590 | 590 | db_begin_transaction(); |
| 591 | 591 | |
| 592 | 592 | /* Find all checkins of the bundle */ |
| 593 | 593 | db_multi_exec( |
| 594 | 594 | "CREATE TEMP TABLE ok(rid INTEGER PRIMARY KEY);" |
| 595 | | - "INSERT INTO ok SELECT blob.rid FROM bblob, blob, plink" |
| 595 | + "INSERT OR IGNORE INTO ok SELECT blob.rid FROM bblob, blob, plink" |
| 596 | 596 | " WHERE bblob.uuid=blob.uuid" |
| 597 | 597 | " AND plink.cid=blob.rid;" |
| 598 | 598 | ); |
| 599 | 599 | |
| 600 | 600 | /* Check to see if new checkins have been committed to checkins in |
| | @@ -624,71 +624,41 @@ |
| 624 | 624 | |
| 625 | 625 | /* Check to see if any associated files are not in the bundle. Issue |
| 626 | 626 | ** an error if there are any, unless --force is used. |
| 627 | 627 | */ |
| 628 | 628 | if( !bForce ){ |
| 629 | | - Stmt q; |
| 630 | | - int n = 0; |
| 631 | | - db_prepare(&q, |
| 632 | | - "SELECT rid FROM ok, blob" |
| 633 | | - " WHERE blob.rid=ok.rid" |
| 634 | | - " AND blob.uuid NOT IN (SELECT uuid FROM bblob)" |
| 629 | + db_multi_exec( |
| 630 | + "CREATE TEMP TABLE err1(rid INTEGER PRIMARY KEY);" |
| 631 | + "INSERT INTO err1 " |
| 632 | + " SELECT blob.rid FROM ok CROSS JOIN blob" |
| 633 | + " WHERE blob.rid=ok.rid" |
| 634 | + " AND blob.uuid NOT IN (SELECT uuid FROM bblob);" |
| 635 | 635 | ); |
| 636 | | - while( db_step(&q)==SQLITE_OK ){ |
| 637 | | - whatis_rid(db_column_int(&q,0),0); |
| 638 | | - fossil_print("%.78c\n", '-'); |
| 639 | | - n++; |
| 640 | | - } |
| 641 | | - if( n>0 ){ |
| 636 | + if( db_changes() ){ |
| 637 | + describe_artifacts_to_stdout("IN err1", 0); |
| 642 | 638 | fossil_fatal("artifacts above associated with bundle checkins " |
| 643 | 639 | " are not in the bundle"); |
| 640 | + }else{ |
| 641 | + db_multi_exec("DROP TABLE err1;"); |
| 644 | 642 | } |
| 645 | 643 | } |
| 646 | 644 | |
| 647 | 645 | if( bTest ){ |
| 648 | | - const char *zBanner = "Artifacts purged that are found in %s:\n"; |
| 649 | | - Stmt q; |
| 650 | | - db_prepare(&q,"SELECT blob.uuid FROM ok, blob, bblob" |
| 651 | | - " WHERE blob.rid=ok.rid AND blob.uuid=bblob.uuid" |
| 652 | | - " ORDER BY 1" |
| 653 | | - ); |
| 654 | | - while( db_step(&q)==SQLITE_ROW ){ |
| 655 | | - if( zBanner ){ |
| 656 | | - fossil_print(zBanner/*works-like:"%s"*/,zFile); |
| 657 | | - zBanner = 0; |
| 658 | | - } |
| 659 | | - fossil_print(" %s\n", db_column_text(&q,0)); |
| 660 | | - } |
| 661 | | - db_finalize(&q); |
| 662 | | - zBanner = "Artifacts purged that are NOT found in %s:\n"; |
| 663 | | - db_prepare(&q,"SELECT blob.uuid FROM ok, blob" |
| 664 | | - " WHERE blob.rid=ok.rid" |
| 665 | | - " AND blob.uuid NOT IN (SELECT uuid FROM bblob)" |
| 666 | | - " ORDER BY 1" |
| 667 | | - ); |
| 668 | | - while( db_step(&q)==SQLITE_ROW ){ |
| 669 | | - if( zBanner ){ |
| 670 | | - fossil_print(zBanner/*works-like:"%s"*/,zFile); |
| 671 | | - zBanner = 0; |
| 672 | | - } |
| 673 | | - fossil_print(" %s\n", db_column_text(&q,0)); |
| 674 | | - } |
| 675 | | - db_finalize(&q); |
| 676 | | - zBanner = "Artifacts in %s that are not purged:\n"; |
| 677 | | - db_prepare(&q,"SELECT bblob.uuid FROM bblob, blob" |
| 678 | | - " WHERE blob.uuid=bblob.uuid" |
| 679 | | - " AND blob.rid NOT IN ok" |
| 680 | | - " ORDER BY 1" |
| 681 | | - ); |
| 682 | | - while( db_step(&q)==SQLITE_ROW ){ |
| 683 | | - if( zBanner ){ |
| 684 | | - fossil_print(zBanner/*works-like:"%s"*/,zFile); |
| 685 | | - zBanner = 0; |
| 686 | | - } |
| 687 | | - fossil_print(" %s\n", db_column_text(&q,0)); |
| 688 | | - } |
| 689 | | - db_finalize(&q); |
| 646 | + describe_artifacts_to_stdout( |
| 647 | + "IN (SELECT blob.rid FROM ok, blob, bblob" |
| 648 | + " WHERE blob.rid=ok.rid AND blob.uuid=bblob.uuid)", |
| 649 | + "Purged artifacts found in the bundle:"); |
| 650 | + describe_artifacts_to_stdout( |
| 651 | + "IN (SELECT blob.rid FROM ok, blob" |
| 652 | + " WHERE blob.rid=ok.rid " |
| 653 | + " AND blob.uuid NOT IN (SELECT uuid FROM bblob))", |
| 654 | + "Purged artifacts NOT in the bundle:"); |
| 655 | + describe_artifacts_to_stdout( |
| 656 | + "IN (SELECT blob.rid FROM bblob, blob" |
| 657 | + " WHERE blob.uuid=bblob.uuid " |
| 658 | + " AND blob.rid NOT IN ok)", |
| 659 | + "Artifacts in the bundle but not purged:"); |
| 690 | 660 | }else{ |
| 691 | 661 | purge_artifact_list("ok",0,0); |
| 692 | 662 | } |
| 693 | 663 | db_end_transaction(0); |
| 694 | 664 | } |
| 695 | 665 | |