Fossil SCM

Fix bug when deleting whole folder

baruch 2014-11-03 14:50 svn-import
Commit 05537c6fc04045f423ceba6e15c8dd4929efe574
1 file changed +21 -12
+21 -12
--- src/import.c
+++ src/import.c
@@ -921,10 +921,13 @@
921921
db_static_prepare(&qTags, "SELECT ttag FROM xtags WHERE trev=:rev");
922922
if( !gsvn.flatFlag ){
923923
if( gsvn.parent<0 ){
924924
gsvn.parent = db_int(-1, "SELECT ifnull(max(trev),-1) FROM xrevisions "
925925
"WHERE tbranch=%Q", gsvn.zBranch);
926
+ if( gsvn.parent<0 ){
927
+ gsvn.parent = db_int(-1, "SELECT ifnull(max(trev),-1) FROM xrevisions");
928
+ }
926929
}
927930
db_bind_int(&insRev, ":rev", gsvn.rev);
928931
db_bind_text(&insRev, ":branch", gsvn.zBranch);
929932
db_bind_int(&insRev, ":rid", 0);
930933
db_step(&insRev);
@@ -940,17 +943,17 @@
940943
}else{
941944
blob_append(&manifest, "C (no\\scomment)\n", 16);
942945
}
943946
blob_appendf(&manifest, "D %s\n", gsvn.zDate);
944947
nBaseFilter = blob_size(&gsvn.filter);
945
- if( strcmp(gsvn.zBranch, gsvn.zTrunk)==0 ){
948
+ if( strncmp(gsvn.zBranch, gsvn.zTrunk, gsvn.lenTrunk-1)==0 ){
946949
blob_appendf(&gsvn.filter, "%s*", gsvn.zTrunk);
947950
}else{
948951
blob_appendf(&gsvn.filter, "%s%s/*", gsvn.zBranches, gsvn.zBranch);
949952
}
950953
db_bind_text(&qFiles, ":filter", blob_str(&gsvn.filter));
951
- nFilter = blob_size(&gsvn.filter);
954
+ nFilter = blob_size(&gsvn.filter)-1;
952955
while( db_step(&qFiles)==SQLITE_ROW ){
953956
const char *zFile = db_column_text(&qFiles, 0);
954957
int rid = db_column_int(&qFiles, 1);
955958
const char *zPerm = db_column_text(&qFiles, 2);
956959
const char *zUuid;
@@ -966,13 +969,13 @@
966969
zParentUuid = db_column_text(&qParent, 0);
967970
blob_appendf(&manifest, "P %s\n", zParentUuid);
968971
if( !gsvn.flatFlag ){
969972
zParentBranch = db_column_text(&qParent, 1);
970973
if( strcmp(gsvn.zBranch, zParentBranch)!=0 ){
971
- blob_appendf(&manifest, "T *branch * %s\n", gsvn.zBranch);
972
- blob_appendf(&manifest, "T *sym-%s *\n", gsvn.zBranch);
973
- zParentBranch = mprintf("%s", zParentBranch);
974
+ blob_appendf(&manifest, "T *branch * %F\n", gsvn.zBranch);
975
+ blob_appendf(&manifest, "T *sym-%F *\n", gsvn.zBranch);
976
+ zParentBranch = mprintf("%F", zParentBranch);
974977
}else{
975978
zParentBranch = 0;
976979
}
977980
}
978981
}else{
@@ -1069,10 +1072,11 @@
10691072
const char *zTemp;
10701073
const char *zUuid;
10711074
Stmt addHist;
10721075
Stmt insTag;
10731076
Stmt cpyPath;
1077
+ Stmt delPath;
10741078
int bHasFiles;
10751079
10761080
/* version */
10771081
if( svn_read_rec(pIn, &rec)
10781082
&& (zTemp = svn_find_header(rec, "SVN-fs-dump-format-version")) ){
@@ -1100,11 +1104,16 @@
11001104
" SELECT tpath, trid, tperm, max(trev) trev FROM xhist"
11011105
" WHERE trev<=:srcrev GROUP BY tpath"
11021106
" ) WHERE trid NOTNULL)"
11031107
"INSERT INTO xhist (trev, tpath, trid, tperm)"
11041108
" SELECT :rev, :path||substr(tpath, length(:srcpath)+1), trid, tperm"
1105
- " FROM xsrc WHERE tpath>:srcpath||'/' AND tpath<:srcpath||0"
1109
+ " FROM xsrc WHERE tpath>:srcpath||'/' AND tpath<:srcpath||'0'"
1110
+ );
1111
+ db_prepare(&delPath,
1112
+ "INSERT INTO xhist (trev, tpath, trid, tperm)"
1113
+ " SELECT :rev, tpath, NULL, NULL"
1114
+ " FROM xfiles WHERE (tpath>:path||'/' AND tpath<:path||'0') OR tpath=:path"
11061115
);
11071116
gsvn.rev = -1;
11081117
while( svn_read_rec(pIn, &rec) ){
11091118
if( (zTemp = svn_find_header(rec, "Revision-number")) ){ /* revision node */
11101119
/* finish previous revision */
@@ -1124,10 +1133,11 @@
11241133
gsvn.zBranch = 0;
11251134
bHasFiles = 0;
11261135
fossil_print("\rImporting SVN revision: %d", gsvn.rev);
11271136
db_bind_int(&addHist, ":rev", gsvn.rev);
11281137
db_bind_int(&cpyPath, ":rev", gsvn.rev);
1138
+ db_bind_int(&delPath, ":rev", gsvn.rev);
11291139
}else
11301140
if( (zTemp = svn_find_header(rec, "Node-path")) ){ /* file/dir node */
11311141
const char *zPath = zTemp;
11321142
const char *zAction = svn_find_header(rec, "Node-action");
11331143
const char *zKind = svn_find_header(rec, "Node-kind");
@@ -1178,15 +1188,13 @@
11781188
}
11791189
}
11801190
if( strncmp(zAction, "delete", 6)==0
11811191
|| strncmp(zAction, "replace", 7)==0 )
11821192
{
1183
- db_bind_null(&addHist, ":rid");
1184
- db_bind_text(&addHist, ":path", zPath);
1185
- db_bind_null(&addHist, ":perm");
1186
- db_step(&addHist);
1187
- db_reset(&addHist);
1193
+ db_bind_text(&delPath, ":path", zPath);
1194
+ db_step(&delPath);
1195
+ db_reset(&delPath);
11881196
} /* no 'else' here since 'replace' does both a 'delete' and an 'add' */
11891197
if( strncmp(zAction, "add", 3)==0
11901198
|| strncmp(zAction, "replace", 7)==0 )
11911199
{
11921200
if( zKind==0 ){
@@ -1271,19 +1279,20 @@
12711279
}else{
12721280
fossil_fatal("Unknown record type");
12731281
}
12741282
svn_free_rec(&rec);
12751283
}
1276
- if( gsvn.rev>0 ){
1284
+ if( bHasFiles ){
12771285
svn_create_manifest();
12781286
}
12791287
fossil_free(gsvn.zUser);
12801288
fossil_free(gsvn.zComment);
12811289
fossil_free(gsvn.zDate);
12821290
db_finalize(&addHist);
12831291
db_finalize(&insTag);
12841292
db_finalize(&cpyPath);
1293
+ db_finalize(&delPath);
12851294
fossil_print(" Done!\n");
12861295
}
12871296
12881297
/*
12891298
** COMMAND: import
12901299
--- src/import.c
+++ src/import.c
@@ -921,10 +921,13 @@
921 db_static_prepare(&qTags, "SELECT ttag FROM xtags WHERE trev=:rev");
922 if( !gsvn.flatFlag ){
923 if( gsvn.parent<0 ){
924 gsvn.parent = db_int(-1, "SELECT ifnull(max(trev),-1) FROM xrevisions "
925 "WHERE tbranch=%Q", gsvn.zBranch);
 
 
 
926 }
927 db_bind_int(&insRev, ":rev", gsvn.rev);
928 db_bind_text(&insRev, ":branch", gsvn.zBranch);
929 db_bind_int(&insRev, ":rid", 0);
930 db_step(&insRev);
@@ -940,17 +943,17 @@
940 }else{
941 blob_append(&manifest, "C (no\\scomment)\n", 16);
942 }
943 blob_appendf(&manifest, "D %s\n", gsvn.zDate);
944 nBaseFilter = blob_size(&gsvn.filter);
945 if( strcmp(gsvn.zBranch, gsvn.zTrunk)==0 ){
946 blob_appendf(&gsvn.filter, "%s*", gsvn.zTrunk);
947 }else{
948 blob_appendf(&gsvn.filter, "%s%s/*", gsvn.zBranches, gsvn.zBranch);
949 }
950 db_bind_text(&qFiles, ":filter", blob_str(&gsvn.filter));
951 nFilter = blob_size(&gsvn.filter);
952 while( db_step(&qFiles)==SQLITE_ROW ){
953 const char *zFile = db_column_text(&qFiles, 0);
954 int rid = db_column_int(&qFiles, 1);
955 const char *zPerm = db_column_text(&qFiles, 2);
956 const char *zUuid;
@@ -966,13 +969,13 @@
966 zParentUuid = db_column_text(&qParent, 0);
967 blob_appendf(&manifest, "P %s\n", zParentUuid);
968 if( !gsvn.flatFlag ){
969 zParentBranch = db_column_text(&qParent, 1);
970 if( strcmp(gsvn.zBranch, zParentBranch)!=0 ){
971 blob_appendf(&manifest, "T *branch * %s\n", gsvn.zBranch);
972 blob_appendf(&manifest, "T *sym-%s *\n", gsvn.zBranch);
973 zParentBranch = mprintf("%s", zParentBranch);
974 }else{
975 zParentBranch = 0;
976 }
977 }
978 }else{
@@ -1069,10 +1072,11 @@
1069 const char *zTemp;
1070 const char *zUuid;
1071 Stmt addHist;
1072 Stmt insTag;
1073 Stmt cpyPath;
 
1074 int bHasFiles;
1075
1076 /* version */
1077 if( svn_read_rec(pIn, &rec)
1078 && (zTemp = svn_find_header(rec, "SVN-fs-dump-format-version")) ){
@@ -1100,11 +1104,16 @@
1100 " SELECT tpath, trid, tperm, max(trev) trev FROM xhist"
1101 " WHERE trev<=:srcrev GROUP BY tpath"
1102 " ) WHERE trid NOTNULL)"
1103 "INSERT INTO xhist (trev, tpath, trid, tperm)"
1104 " SELECT :rev, :path||substr(tpath, length(:srcpath)+1), trid, tperm"
1105 " FROM xsrc WHERE tpath>:srcpath||'/' AND tpath<:srcpath||0"
 
 
 
 
 
1106 );
1107 gsvn.rev = -1;
1108 while( svn_read_rec(pIn, &rec) ){
1109 if( (zTemp = svn_find_header(rec, "Revision-number")) ){ /* revision node */
1110 /* finish previous revision */
@@ -1124,10 +1133,11 @@
1124 gsvn.zBranch = 0;
1125 bHasFiles = 0;
1126 fossil_print("\rImporting SVN revision: %d", gsvn.rev);
1127 db_bind_int(&addHist, ":rev", gsvn.rev);
1128 db_bind_int(&cpyPath, ":rev", gsvn.rev);
 
1129 }else
1130 if( (zTemp = svn_find_header(rec, "Node-path")) ){ /* file/dir node */
1131 const char *zPath = zTemp;
1132 const char *zAction = svn_find_header(rec, "Node-action");
1133 const char *zKind = svn_find_header(rec, "Node-kind");
@@ -1178,15 +1188,13 @@
1178 }
1179 }
1180 if( strncmp(zAction, "delete", 6)==0
1181 || strncmp(zAction, "replace", 7)==0 )
1182 {
1183 db_bind_null(&addHist, ":rid");
1184 db_bind_text(&addHist, ":path", zPath);
1185 db_bind_null(&addHist, ":perm");
1186 db_step(&addHist);
1187 db_reset(&addHist);
1188 } /* no 'else' here since 'replace' does both a 'delete' and an 'add' */
1189 if( strncmp(zAction, "add", 3)==0
1190 || strncmp(zAction, "replace", 7)==0 )
1191 {
1192 if( zKind==0 ){
@@ -1271,19 +1279,20 @@
1271 }else{
1272 fossil_fatal("Unknown record type");
1273 }
1274 svn_free_rec(&rec);
1275 }
1276 if( gsvn.rev>0 ){
1277 svn_create_manifest();
1278 }
1279 fossil_free(gsvn.zUser);
1280 fossil_free(gsvn.zComment);
1281 fossil_free(gsvn.zDate);
1282 db_finalize(&addHist);
1283 db_finalize(&insTag);
1284 db_finalize(&cpyPath);
 
1285 fossil_print(" Done!\n");
1286 }
1287
1288 /*
1289 ** COMMAND: import
1290
--- src/import.c
+++ src/import.c
@@ -921,10 +921,13 @@
921 db_static_prepare(&qTags, "SELECT ttag FROM xtags WHERE trev=:rev");
922 if( !gsvn.flatFlag ){
923 if( gsvn.parent<0 ){
924 gsvn.parent = db_int(-1, "SELECT ifnull(max(trev),-1) FROM xrevisions "
925 "WHERE tbranch=%Q", gsvn.zBranch);
926 if( gsvn.parent<0 ){
927 gsvn.parent = db_int(-1, "SELECT ifnull(max(trev),-1) FROM xrevisions");
928 }
929 }
930 db_bind_int(&insRev, ":rev", gsvn.rev);
931 db_bind_text(&insRev, ":branch", gsvn.zBranch);
932 db_bind_int(&insRev, ":rid", 0);
933 db_step(&insRev);
@@ -940,17 +943,17 @@
943 }else{
944 blob_append(&manifest, "C (no\\scomment)\n", 16);
945 }
946 blob_appendf(&manifest, "D %s\n", gsvn.zDate);
947 nBaseFilter = blob_size(&gsvn.filter);
948 if( strncmp(gsvn.zBranch, gsvn.zTrunk, gsvn.lenTrunk-1)==0 ){
949 blob_appendf(&gsvn.filter, "%s*", gsvn.zTrunk);
950 }else{
951 blob_appendf(&gsvn.filter, "%s%s/*", gsvn.zBranches, gsvn.zBranch);
952 }
953 db_bind_text(&qFiles, ":filter", blob_str(&gsvn.filter));
954 nFilter = blob_size(&gsvn.filter)-1;
955 while( db_step(&qFiles)==SQLITE_ROW ){
956 const char *zFile = db_column_text(&qFiles, 0);
957 int rid = db_column_int(&qFiles, 1);
958 const char *zPerm = db_column_text(&qFiles, 2);
959 const char *zUuid;
@@ -966,13 +969,13 @@
969 zParentUuid = db_column_text(&qParent, 0);
970 blob_appendf(&manifest, "P %s\n", zParentUuid);
971 if( !gsvn.flatFlag ){
972 zParentBranch = db_column_text(&qParent, 1);
973 if( strcmp(gsvn.zBranch, zParentBranch)!=0 ){
974 blob_appendf(&manifest, "T *branch * %F\n", gsvn.zBranch);
975 blob_appendf(&manifest, "T *sym-%F *\n", gsvn.zBranch);
976 zParentBranch = mprintf("%F", zParentBranch);
977 }else{
978 zParentBranch = 0;
979 }
980 }
981 }else{
@@ -1069,10 +1072,11 @@
1072 const char *zTemp;
1073 const char *zUuid;
1074 Stmt addHist;
1075 Stmt insTag;
1076 Stmt cpyPath;
1077 Stmt delPath;
1078 int bHasFiles;
1079
1080 /* version */
1081 if( svn_read_rec(pIn, &rec)
1082 && (zTemp = svn_find_header(rec, "SVN-fs-dump-format-version")) ){
@@ -1100,11 +1104,16 @@
1104 " SELECT tpath, trid, tperm, max(trev) trev FROM xhist"
1105 " WHERE trev<=:srcrev GROUP BY tpath"
1106 " ) WHERE trid NOTNULL)"
1107 "INSERT INTO xhist (trev, tpath, trid, tperm)"
1108 " SELECT :rev, :path||substr(tpath, length(:srcpath)+1), trid, tperm"
1109 " FROM xsrc WHERE tpath>:srcpath||'/' AND tpath<:srcpath||'0'"
1110 );
1111 db_prepare(&delPath,
1112 "INSERT INTO xhist (trev, tpath, trid, tperm)"
1113 " SELECT :rev, tpath, NULL, NULL"
1114 " FROM xfiles WHERE (tpath>:path||'/' AND tpath<:path||'0') OR tpath=:path"
1115 );
1116 gsvn.rev = -1;
1117 while( svn_read_rec(pIn, &rec) ){
1118 if( (zTemp = svn_find_header(rec, "Revision-number")) ){ /* revision node */
1119 /* finish previous revision */
@@ -1124,10 +1133,11 @@
1133 gsvn.zBranch = 0;
1134 bHasFiles = 0;
1135 fossil_print("\rImporting SVN revision: %d", gsvn.rev);
1136 db_bind_int(&addHist, ":rev", gsvn.rev);
1137 db_bind_int(&cpyPath, ":rev", gsvn.rev);
1138 db_bind_int(&delPath, ":rev", gsvn.rev);
1139 }else
1140 if( (zTemp = svn_find_header(rec, "Node-path")) ){ /* file/dir node */
1141 const char *zPath = zTemp;
1142 const char *zAction = svn_find_header(rec, "Node-action");
1143 const char *zKind = svn_find_header(rec, "Node-kind");
@@ -1178,15 +1188,13 @@
1188 }
1189 }
1190 if( strncmp(zAction, "delete", 6)==0
1191 || strncmp(zAction, "replace", 7)==0 )
1192 {
1193 db_bind_text(&delPath, ":path", zPath);
1194 db_step(&delPath);
1195 db_reset(&delPath);
 
 
1196 } /* no 'else' here since 'replace' does both a 'delete' and an 'add' */
1197 if( strncmp(zAction, "add", 3)==0
1198 || strncmp(zAction, "replace", 7)==0 )
1199 {
1200 if( zKind==0 ){
@@ -1271,19 +1279,20 @@
1279 }else{
1280 fossil_fatal("Unknown record type");
1281 }
1282 svn_free_rec(&rec);
1283 }
1284 if( bHasFiles ){
1285 svn_create_manifest();
1286 }
1287 fossil_free(gsvn.zUser);
1288 fossil_free(gsvn.zComment);
1289 fossil_free(gsvn.zDate);
1290 db_finalize(&addHist);
1291 db_finalize(&insTag);
1292 db_finalize(&cpyPath);
1293 db_finalize(&delPath);
1294 fossil_print(" Done!\n");
1295 }
1296
1297 /*
1298 ** COMMAND: import
1299

Keyboard Shortcuts

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