Fossil SCM
Move glob_match(pKeep) out of the locate_unmanaged_files()/vfile_dir_scan() functions. This allows a note to be printed (with -v/--verbose) which explains why "fossil.exe" is not deleted by 'fossil clean -f --ignore ""'. No change of functionality (except for the addition of the note)
Commit
389d0d79396c530fe61d6882640b2a1af5d8f4ae
Parent
1b4b8a95b29d1e8…
1 file changed
+17
-3
+17
-3
| --- src/checkin.c | ||
| +++ src/checkin.c | ||
| @@ -589,11 +589,11 @@ | ||
| 589 | 589 | pClean = glob_create(zCleanFlag); |
| 590 | 590 | nRoot = (int)strlen(g.zLocalRoot); |
| 591 | 591 | if( !dirsOnlyFlag ){ |
| 592 | 592 | Stmt q; |
| 593 | 593 | Blob repo; |
| 594 | - locate_unmanaged_files(g.argc-2, g.argv+2, scanFlags, pIgnore, pKeep); | |
| 594 | + locate_unmanaged_files(g.argc-2, g.argv+2, scanFlags, pIgnore, 0); | |
| 595 | 595 | db_prepare(&q, |
| 596 | 596 | "SELECT %Q || x FROM sfile" |
| 597 | 597 | " WHERE x NOT IN (%s)" |
| 598 | 598 | " ORDER BY 1", |
| 599 | 599 | g.zLocalRoot, fossil_all_reserved_names(0) |
| @@ -602,10 +602,17 @@ | ||
| 602 | 602 | db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo); |
| 603 | 603 | } |
| 604 | 604 | db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)"); |
| 605 | 605 | while( db_step(&q)==SQLITE_ROW ){ |
| 606 | 606 | const char *zName = db_column_text(&q, 0); |
| 607 | + if( glob_match(pKeep, zName+nRoot) ){ | |
| 608 | + if( verboseFlag ){ | |
| 609 | + fossil_print("KEPT file \"%s\" not removed (due to --keep" | |
| 610 | + " or \"keep-glob\")\n", zName+nRoot); | |
| 611 | + } | |
| 612 | + continue; | |
| 613 | + } | |
| 607 | 614 | if( !allFileFlag && !dryRunFlag && !glob_match(pClean, zName+nRoot) ){ |
| 608 | 615 | Blob ans; |
| 609 | 616 | char cReply; |
| 610 | 617 | char *prompt = mprintf("Remove unmanaged file \"%s\" (a=all/y/N)? ", |
| 611 | 618 | zName+nRoot); |
| @@ -632,21 +639,28 @@ | ||
| 632 | 639 | if( emptyDirsFlag ){ |
| 633 | 640 | Glob *pEmptyDirs = glob_create(db_get("empty-dirs", 0)); |
| 634 | 641 | Stmt q; |
| 635 | 642 | Blob root; |
| 636 | 643 | blob_init(&root, g.zLocalRoot, nRoot - 1); |
| 637 | - vfile_dir_scan(&root, blob_size(&root), scanFlags, pIgnore, pKeep, | |
| 638 | - pEmptyDirs); | |
| 644 | + vfile_dir_scan(&root, blob_size(&root), scanFlags, pIgnore, | |
| 645 | + pEmptyDirs, 0); | |
| 639 | 646 | blob_reset(&root); |
| 640 | 647 | db_prepare(&q, |
| 641 | 648 | "SELECT %Q || x FROM dscan_temp" |
| 642 | 649 | " WHERE x NOT IN (%s) AND y = 0" |
| 643 | 650 | " ORDER BY 1 DESC", |
| 644 | 651 | g.zLocalRoot, fossil_all_reserved_names(0) |
| 645 | 652 | ); |
| 646 | 653 | while( db_step(&q)==SQLITE_ROW ){ |
| 647 | 654 | const char *zName = db_column_text(&q, 0); |
| 655 | + if( glob_match(pKeep, zName+nRoot) ){ | |
| 656 | + if( verboseFlag ){ | |
| 657 | + fossil_print("KEPT directory \"%s\" not removed (due to --keep" | |
| 658 | + " or \"keep-glob\")\n", zName+nRoot); | |
| 659 | + } | |
| 660 | + continue; | |
| 661 | + } | |
| 648 | 662 | if( !allDirFlag && !dryRunFlag && !glob_match(pClean, zName+nRoot) ){ |
| 649 | 663 | Blob ans; |
| 650 | 664 | char cReply; |
| 651 | 665 | char *prompt = mprintf("Remove empty directory \"%s\" (a=all/y/N)? ", |
| 652 | 666 | zName+nRoot); |
| 653 | 667 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -589,11 +589,11 @@ | |
| 589 | pClean = glob_create(zCleanFlag); |
| 590 | nRoot = (int)strlen(g.zLocalRoot); |
| 591 | if( !dirsOnlyFlag ){ |
| 592 | Stmt q; |
| 593 | Blob repo; |
| 594 | locate_unmanaged_files(g.argc-2, g.argv+2, scanFlags, pIgnore, pKeep); |
| 595 | db_prepare(&q, |
| 596 | "SELECT %Q || x FROM sfile" |
| 597 | " WHERE x NOT IN (%s)" |
| 598 | " ORDER BY 1", |
| 599 | g.zLocalRoot, fossil_all_reserved_names(0) |
| @@ -602,10 +602,17 @@ | |
| 602 | db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo); |
| 603 | } |
| 604 | db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)"); |
| 605 | while( db_step(&q)==SQLITE_ROW ){ |
| 606 | const char *zName = db_column_text(&q, 0); |
| 607 | if( !allFileFlag && !dryRunFlag && !glob_match(pClean, zName+nRoot) ){ |
| 608 | Blob ans; |
| 609 | char cReply; |
| 610 | char *prompt = mprintf("Remove unmanaged file \"%s\" (a=all/y/N)? ", |
| 611 | zName+nRoot); |
| @@ -632,21 +639,28 @@ | |
| 632 | if( emptyDirsFlag ){ |
| 633 | Glob *pEmptyDirs = glob_create(db_get("empty-dirs", 0)); |
| 634 | Stmt q; |
| 635 | Blob root; |
| 636 | blob_init(&root, g.zLocalRoot, nRoot - 1); |
| 637 | vfile_dir_scan(&root, blob_size(&root), scanFlags, pIgnore, pKeep, |
| 638 | pEmptyDirs); |
| 639 | blob_reset(&root); |
| 640 | db_prepare(&q, |
| 641 | "SELECT %Q || x FROM dscan_temp" |
| 642 | " WHERE x NOT IN (%s) AND y = 0" |
| 643 | " ORDER BY 1 DESC", |
| 644 | g.zLocalRoot, fossil_all_reserved_names(0) |
| 645 | ); |
| 646 | while( db_step(&q)==SQLITE_ROW ){ |
| 647 | const char *zName = db_column_text(&q, 0); |
| 648 | if( !allDirFlag && !dryRunFlag && !glob_match(pClean, zName+nRoot) ){ |
| 649 | Blob ans; |
| 650 | char cReply; |
| 651 | char *prompt = mprintf("Remove empty directory \"%s\" (a=all/y/N)? ", |
| 652 | zName+nRoot); |
| 653 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -589,11 +589,11 @@ | |
| 589 | pClean = glob_create(zCleanFlag); |
| 590 | nRoot = (int)strlen(g.zLocalRoot); |
| 591 | if( !dirsOnlyFlag ){ |
| 592 | Stmt q; |
| 593 | Blob repo; |
| 594 | locate_unmanaged_files(g.argc-2, g.argv+2, scanFlags, pIgnore, 0); |
| 595 | db_prepare(&q, |
| 596 | "SELECT %Q || x FROM sfile" |
| 597 | " WHERE x NOT IN (%s)" |
| 598 | " ORDER BY 1", |
| 599 | g.zLocalRoot, fossil_all_reserved_names(0) |
| @@ -602,10 +602,17 @@ | |
| 602 | db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo); |
| 603 | } |
| 604 | db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)"); |
| 605 | while( db_step(&q)==SQLITE_ROW ){ |
| 606 | const char *zName = db_column_text(&q, 0); |
| 607 | if( glob_match(pKeep, zName+nRoot) ){ |
| 608 | if( verboseFlag ){ |
| 609 | fossil_print("KEPT file \"%s\" not removed (due to --keep" |
| 610 | " or \"keep-glob\")\n", zName+nRoot); |
| 611 | } |
| 612 | continue; |
| 613 | } |
| 614 | if( !allFileFlag && !dryRunFlag && !glob_match(pClean, zName+nRoot) ){ |
| 615 | Blob ans; |
| 616 | char cReply; |
| 617 | char *prompt = mprintf("Remove unmanaged file \"%s\" (a=all/y/N)? ", |
| 618 | zName+nRoot); |
| @@ -632,21 +639,28 @@ | |
| 639 | if( emptyDirsFlag ){ |
| 640 | Glob *pEmptyDirs = glob_create(db_get("empty-dirs", 0)); |
| 641 | Stmt q; |
| 642 | Blob root; |
| 643 | blob_init(&root, g.zLocalRoot, nRoot - 1); |
| 644 | vfile_dir_scan(&root, blob_size(&root), scanFlags, pIgnore, |
| 645 | pEmptyDirs, 0); |
| 646 | blob_reset(&root); |
| 647 | db_prepare(&q, |
| 648 | "SELECT %Q || x FROM dscan_temp" |
| 649 | " WHERE x NOT IN (%s) AND y = 0" |
| 650 | " ORDER BY 1 DESC", |
| 651 | g.zLocalRoot, fossil_all_reserved_names(0) |
| 652 | ); |
| 653 | while( db_step(&q)==SQLITE_ROW ){ |
| 654 | const char *zName = db_column_text(&q, 0); |
| 655 | if( glob_match(pKeep, zName+nRoot) ){ |
| 656 | if( verboseFlag ){ |
| 657 | fossil_print("KEPT directory \"%s\" not removed (due to --keep" |
| 658 | " or \"keep-glob\")\n", zName+nRoot); |
| 659 | } |
| 660 | continue; |
| 661 | } |
| 662 | if( !allDirFlag && !dryRunFlag && !glob_match(pClean, zName+nRoot) ){ |
| 663 | Blob ans; |
| 664 | char cReply; |
| 665 | char *prompt = mprintf("Remove empty directory \"%s\" (a=all/y/N)? ", |
| 666 | zName+nRoot); |
| 667 |