Fossil SCM
make "fossil rm FOO" work as expected on case-insensitive file systems, where committed files "foo/*" exist.
Commit
fa6311a5078112d1fcb92f93859f54b2dddd9e11
Parent
878f7008ab86e24…
1 file changed
+6
-4
+6
-4
| --- src/add.c | ||
| +++ src/add.c | ||
| @@ -346,13 +346,14 @@ | ||
| 346 | 346 | zTreeName = blob_str(&treeName); |
| 347 | 347 | db_multi_exec( |
| 348 | 348 | "INSERT OR IGNORE INTO sfile" |
| 349 | 349 | " SELECT pathname FROM vfile" |
| 350 | 350 | " WHERE (pathname=%Q %s" |
| 351 | - " OR (pathname>'%q/' AND pathname<'%q0'))" | |
| 351 | + " OR (pathname>'%q/' %s AND pathname<'%q0' %s))" | |
| 352 | 352 | " AND NOT deleted", |
| 353 | - zTreeName, filename_collation(), zTreeName, zTreeName | |
| 353 | + zTreeName, filename_collation(), zTreeName, | |
| 354 | + filename_collation(), zTreeName, filename_collation() | |
| 354 | 355 | ); |
| 355 | 356 | blob_reset(&treeName); |
| 356 | 357 | } |
| 357 | 358 | |
| 358 | 359 | db_prepare(&loop, "SELECT x FROM sfile"); |
| @@ -649,13 +650,14 @@ | ||
| 649 | 650 | zOrig = blob_str(&orig); |
| 650 | 651 | nOrig = blob_size(&orig); |
| 651 | 652 | db_prepare(&q, |
| 652 | 653 | "SELECT pathname FROM vfile" |
| 653 | 654 | " WHERE vid=%d" |
| 654 | - " AND (pathname='%q' %s OR (pathname>'%q/' AND pathname<'%q0'))" | |
| 655 | + " AND (pathname='%q' %s OR (pathname>'%q/' %s AND pathname<'%q0' %s))" | |
| 655 | 656 | " ORDER BY 1", |
| 656 | - vid, zOrig, filename_collation(), zOrig, zOrig | |
| 657 | + vid, zOrig, filename_collation(), zOrig, filename_collation(), | |
| 658 | + zOrig, filename_collation() | |
| 657 | 659 | ); |
| 658 | 660 | while( db_step(&q)==SQLITE_ROW ){ |
| 659 | 661 | const char *zPath = db_column_text(&q, 0); |
| 660 | 662 | int nPath = db_column_bytes(&q, 0); |
| 661 | 663 | const char *zTail; |
| 662 | 664 |
| --- src/add.c | |
| +++ src/add.c | |
| @@ -346,13 +346,14 @@ | |
| 346 | zTreeName = blob_str(&treeName); |
| 347 | db_multi_exec( |
| 348 | "INSERT OR IGNORE INTO sfile" |
| 349 | " SELECT pathname FROM vfile" |
| 350 | " WHERE (pathname=%Q %s" |
| 351 | " OR (pathname>'%q/' AND pathname<'%q0'))" |
| 352 | " AND NOT deleted", |
| 353 | zTreeName, filename_collation(), zTreeName, zTreeName |
| 354 | ); |
| 355 | blob_reset(&treeName); |
| 356 | } |
| 357 | |
| 358 | db_prepare(&loop, "SELECT x FROM sfile"); |
| @@ -649,13 +650,14 @@ | |
| 649 | zOrig = blob_str(&orig); |
| 650 | nOrig = blob_size(&orig); |
| 651 | db_prepare(&q, |
| 652 | "SELECT pathname FROM vfile" |
| 653 | " WHERE vid=%d" |
| 654 | " AND (pathname='%q' %s OR (pathname>'%q/' AND pathname<'%q0'))" |
| 655 | " ORDER BY 1", |
| 656 | vid, zOrig, filename_collation(), zOrig, zOrig |
| 657 | ); |
| 658 | while( db_step(&q)==SQLITE_ROW ){ |
| 659 | const char *zPath = db_column_text(&q, 0); |
| 660 | int nPath = db_column_bytes(&q, 0); |
| 661 | const char *zTail; |
| 662 |
| --- src/add.c | |
| +++ src/add.c | |
| @@ -346,13 +346,14 @@ | |
| 346 | zTreeName = blob_str(&treeName); |
| 347 | db_multi_exec( |
| 348 | "INSERT OR IGNORE INTO sfile" |
| 349 | " SELECT pathname FROM vfile" |
| 350 | " WHERE (pathname=%Q %s" |
| 351 | " OR (pathname>'%q/' %s AND pathname<'%q0' %s))" |
| 352 | " AND NOT deleted", |
| 353 | zTreeName, filename_collation(), zTreeName, |
| 354 | filename_collation(), zTreeName, filename_collation() |
| 355 | ); |
| 356 | blob_reset(&treeName); |
| 357 | } |
| 358 | |
| 359 | db_prepare(&loop, "SELECT x FROM sfile"); |
| @@ -649,13 +650,14 @@ | |
| 650 | zOrig = blob_str(&orig); |
| 651 | nOrig = blob_size(&orig); |
| 652 | db_prepare(&q, |
| 653 | "SELECT pathname FROM vfile" |
| 654 | " WHERE vid=%d" |
| 655 | " AND (pathname='%q' %s OR (pathname>'%q/' %s AND pathname<'%q0' %s))" |
| 656 | " ORDER BY 1", |
| 657 | vid, zOrig, filename_collation(), zOrig, filename_collation(), |
| 658 | zOrig, filename_collation() |
| 659 | ); |
| 660 | while( db_step(&q)==SQLITE_ROW ){ |
| 661 | const char *zPath = db_column_text(&q, 0); |
| 662 | int nPath = db_column_bytes(&q, 0); |
| 663 | const char *zTail; |
| 664 |