| Ticket UUID: | 80d3ba8b0ff0098d33350f24a37982f396b45e15 | ||
| Title: | fossil add can't add two files whose names only differ by an underscore or dash | ||
| Status: | Fixed | Type: | Code_Defect |
| Severity: | Severe | Priority: | |
| Subsystem: | Resolution: | Fixed | |
| Last Modified: | 2010-03-02 18:20:53 | ||
| Version Found In: | 1efd09ed4f | ||
| Description & Comments: | |||
the following steps reproduce this problem. in summary, when adding two files whose names differ only by a dash and underscore, e.g. a-1.txt and a_1.txt, only the file with the dash in its name will be added, even though fossil add reports that both were added. this test was conducted using powershell on windows 7 64 bit. i can test it on windows xp later this week. i don't have a non-windows box to test this on.
PS C:\rev\src> fossil new test.fossil project-id: 9968296e3e87d77b514493152ecc682e94e015cc server-id: 37ea13bc92c88ff92f41f5ec8c921a88eeca87a8 admin-user: rev (initial password is "4cabdf") PS C:\rev\src> md test PS C:\rev\src> cd test PS C:\rev\src\test> fossil open ..\test.fossil PS C:\rev\src\test> echo "hello" > a_1.txt PS C:\rev\src\test> echo "goodbye" > a-1.txt PS C:\rev\src\test> lsDirectory: C:\rev\src\test rwilson added on 2010-03-02 17:17:01: from add.c:
#ifdef __MINGW32__
if( db_exists("SELECT 1 FROM vfile WHERE pathname LIKE %Q", zPath) ){
db_multi_exec("UPDATE vfile SET deleted=0 WHERE pathname LIKE %Q", zPath);
}
#else
if( db_exists("SELECT 1 FROM vfile WHERE pathname=%Q", zPath) ){
db_multi_exec("UPDATE vfile SET deleted=0 WHERE pathname=%Q", zPath);
}
#endif
the problem is that LIKE treats dash and underscore oddly:
PS C:\Documents and Settings\ma088024> sqlite3
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table test (path);
sqlite> insert into test values("a-1.txt");
sqlite> insert into test values("a_1.txt");
sqlite> select * from test;
a-1.txt
a_1.txt
sqlite> select * from test where path like 'a-1.txt';
a-1.txt
sqlite> select * from test where path like 'a_1.txt';
a-1.txt
a_1.txt
sqlite> .quit
apparently, "-" is NOT LIKE "_", but "_" is LIKE "-". this latter condition results in the confusion that this ticket describes. rwilson added on 2010-03-02 18:05:30: | |||