Fossil SCM

On systems with case-insensitive filenames, allow "fossil rename OLD NEW" where OLD and NEW differ only in case.

drh 2015-10-19 14:52 trunk
Commit fd2dbf436855e9e6fb74b980338a5cade5e83f76
1 file changed +12 -4
+12 -4
--- src/add.c
+++ src/add.c
@@ -713,12 +713,16 @@
713713
){
714714
int x = db_int(-1, "SELECT deleted FROM vfile WHERE pathname=%Q %s",
715715
zNew, filename_collation());
716716
if( x>=0 ){
717717
if( x==0 ){
718
- fossil_fatal("cannot rename '%s' to '%s' since another file named '%s'"
719
- " is currently under management", zOrig, zNew, zNew);
718
+ if( !filenames_are_case_sensitive() && fossil_stricmp(zOrig,zNew)==0 ){
719
+ /* Case change only */
720
+ }else{
721
+ fossil_fatal("cannot rename '%s' to '%s' since another file named '%s'"
722
+ " is currently under management", zOrig, zNew, zNew);
723
+ }
720724
}else{
721725
fossil_fatal("cannot rename '%s' to '%s' since the delete of '%s' has "
722726
"not yet been committed", zOrig, zNew, zNew);
723727
}
724728
}
@@ -743,19 +747,23 @@
743747
const char *zNewName /* The new name of the file on disk. */
744748
){
745749
static int tableCreated = 0;
746750
Blob fullOldName;
747751
Blob fullNewName;
752
+ char *zOld, *zNew;
748753
if( !tableCreated ){
749754
db_multi_exec("CREATE TEMP TABLE fmove(x TEXT PRIMARY KEY %s, y TEXT %s)",
750755
filename_collation(), filename_collation());
751756
tableCreated = 1;
752757
}
753758
file_tree_name(zOldName, &fullOldName, 1, 1);
759
+ zOld = blob_str(&fullOldName);
754760
file_tree_name(zNewName, &fullNewName, 1, 1);
755
- db_multi_exec("INSERT INTO fmove VALUES('%q','%q');",
756
- blob_str(&fullOldName), blob_str(&fullNewName));
761
+ zNew = blob_str(&fullNewName);
762
+ if( filenames_are_case_sensitive() || fossil_stricmp(zOld,zNew)!=0 ){
763
+ db_multi_exec("INSERT INTO fmove VALUES('%q','%q');", zOld, zNew);
764
+ }
757765
blob_reset(&fullNewName);
758766
blob_reset(&fullOldName);
759767
}
760768
761769
/*
762770
--- src/add.c
+++ src/add.c
@@ -713,12 +713,16 @@
713 ){
714 int x = db_int(-1, "SELECT deleted FROM vfile WHERE pathname=%Q %s",
715 zNew, filename_collation());
716 if( x>=0 ){
717 if( x==0 ){
718 fossil_fatal("cannot rename '%s' to '%s' since another file named '%s'"
719 " is currently under management", zOrig, zNew, zNew);
 
 
 
 
720 }else{
721 fossil_fatal("cannot rename '%s' to '%s' since the delete of '%s' has "
722 "not yet been committed", zOrig, zNew, zNew);
723 }
724 }
@@ -743,19 +747,23 @@
743 const char *zNewName /* The new name of the file on disk. */
744 ){
745 static int tableCreated = 0;
746 Blob fullOldName;
747 Blob fullNewName;
 
748 if( !tableCreated ){
749 db_multi_exec("CREATE TEMP TABLE fmove(x TEXT PRIMARY KEY %s, y TEXT %s)",
750 filename_collation(), filename_collation());
751 tableCreated = 1;
752 }
753 file_tree_name(zOldName, &fullOldName, 1, 1);
 
754 file_tree_name(zNewName, &fullNewName, 1, 1);
755 db_multi_exec("INSERT INTO fmove VALUES('%q','%q');",
756 blob_str(&fullOldName), blob_str(&fullNewName));
 
 
757 blob_reset(&fullNewName);
758 blob_reset(&fullOldName);
759 }
760
761 /*
762
--- src/add.c
+++ src/add.c
@@ -713,12 +713,16 @@
713 ){
714 int x = db_int(-1, "SELECT deleted FROM vfile WHERE pathname=%Q %s",
715 zNew, filename_collation());
716 if( x>=0 ){
717 if( x==0 ){
718 if( !filenames_are_case_sensitive() && fossil_stricmp(zOrig,zNew)==0 ){
719 /* Case change only */
720 }else{
721 fossil_fatal("cannot rename '%s' to '%s' since another file named '%s'"
722 " is currently under management", zOrig, zNew, zNew);
723 }
724 }else{
725 fossil_fatal("cannot rename '%s' to '%s' since the delete of '%s' has "
726 "not yet been committed", zOrig, zNew, zNew);
727 }
728 }
@@ -743,19 +747,23 @@
747 const char *zNewName /* The new name of the file on disk. */
748 ){
749 static int tableCreated = 0;
750 Blob fullOldName;
751 Blob fullNewName;
752 char *zOld, *zNew;
753 if( !tableCreated ){
754 db_multi_exec("CREATE TEMP TABLE fmove(x TEXT PRIMARY KEY %s, y TEXT %s)",
755 filename_collation(), filename_collation());
756 tableCreated = 1;
757 }
758 file_tree_name(zOldName, &fullOldName, 1, 1);
759 zOld = blob_str(&fullOldName);
760 file_tree_name(zNewName, &fullNewName, 1, 1);
761 zNew = blob_str(&fullNewName);
762 if( filenames_are_case_sensitive() || fossil_stricmp(zOld,zNew)!=0 ){
763 db_multi_exec("INSERT INTO fmove VALUES('%q','%q');", zOld, zNew);
764 }
765 blob_reset(&fullNewName);
766 blob_reset(&fullOldName);
767 }
768
769 /*
770

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button