Fossil SCM

support for deleted files

baruch 2014-10-21 14:41 svn-import
Commit 332788691888bea6a139488b5e89f2861d7a8138
1 file changed +26 -6
+26 -6
--- src/import.c
+++ src/import.c
@@ -949,10 +949,11 @@
949949
int ver;
950950
const char *zTemp;
951951
const char *zUuid;
952952
Stmt insRev;
953953
Stmt insFile;
954
+ Stmt delFile;
954955
int rev = 0;
955956
956957
/* version */
957958
if( svn_read_rec(pIn, &rec)
958959
&& (zTemp = svn_find_header(rec, "SVN-fs-dump-format-version")) ){
@@ -969,17 +970,21 @@
969970
fossil_fatal("Missing UUID!");
970971
}
971972
svn_free_rec(&rec);
972973
/* content */
973974
db_prepare(&insRev,
974
- "INSERT INTO xrevisions (trev, tuser, tmsg, ttime)"
975
+ "INSERT INTO xrevisions (trev, tuser, tmsg, ttime) "
975976
"VALUES(:rev, :user, :msg, :time)"
976977
);
977978
db_prepare(&insFile,
978
- "INSERT INTO xfiles (trev, tpath, trid, tperm)"
979
+ "INSERT INTO xfiles (trev, tpath, trid, tperm) "
979980
"VALUES(:rev, :path, :rid, :perm)"
980981
);
982
+ db_prepare(&delFile,
983
+ "DELETE FROM xfiles "
984
+ "WHERE trev=:rev AND (tpath=:path OR tpath GLOB :path || '/*')"
985
+ );
981986
while( svn_read_rec(pIn, &rec) ){
982987
if( zTemp = svn_find_header(rec, "Revision-number") ){
983988
const char *zUser = svn_find_prop(rec, "svn:author");
984989
const char *zLog = svn_find_prop(rec, "svn:log");
985990
const char *zDate = svn_find_prop(rec, "svn:date");
@@ -990,10 +995,15 @@
990995
db_bind_text(&insRev, ":msg", zLog);
991996
db_bind_text(&insRev, ":time", zDate);
992997
db_step(&insRev);
993998
db_reset(&insRev);
994999
fossil_free(zDate);
1000
+ if( rev>0 ){
1001
+ db_multi_exec("INSERT INTO xfiles (trev, tpath, trid, tperm) "
1002
+ "SELECT %d, tpath, trid, tperm FROM xfiles "
1003
+ "WHERE trev=%d", rev, rev-1);
1004
+ }
9951005
}else
9961006
if( zTemp = svn_find_header(rec, "Node-path") ){
9971007
const char *zPath = zTemp;
9981008
const char *zAction = svn_find_header(rec, "Node-action");
9991009
const char *zKind = svn_find_header(rec, "Node-kind");
@@ -1003,13 +1013,17 @@
10031013
int rid = 0;
10041014
if( zKind && strncmp(zKind, "dir", 3)==0 ){
10051015
svn_free_rec(&rec);
10061016
continue;
10071017
}
1008
- zTemp = svn_find_header(rec, "Node-copyfrom-rev");
1009
- if( zTemp ){
1010
- srcRev = atoi(zTemp);
1018
+ if( zSrcPath ){
1019
+ zTemp = svn_find_header(rec, "Node-copyfrom-rev");
1020
+ if( zTemp ){
1021
+ srcRev = atoi(zTemp);
1022
+ }else{
1023
+ fossil_fatal("Missing copyfrom-rev");
1024
+ }
10111025
}
10121026
rid = content_put(&rec.content);
10131027
if( strncmp(zAction, "add", 3)==0 ){
10141028
db_bind_int(&insFile, ":rev", rev);
10151029
db_bind_int(&insFile, ":rid", rid);
@@ -1025,10 +1039,14 @@
10251039
db_bind_text(&insFile, ":perm", zPerm);
10261040
db_step(&insFile);
10271041
db_reset(&insFile);
10281042
}else
10291043
if( strncmp(zAction, "delete", 6)==0 ){
1044
+ db_bind_int(&delFile, ":rev", rev);
1045
+ db_bind_text(&delFile, ":path", zPath);
1046
+ db_step(&delFile);
1047
+ db_reset(&delFile);
10301048
}else
10311049
if( strncmp(zAction, "replace", 7)==0 ){
10321050
}else{
10331051
}
10341052
}else{
@@ -1037,10 +1055,11 @@
10371055
svn_free_rec(&rec);
10381056
}
10391057
svn_create_manifests();
10401058
db_finalize(&insRev);
10411059
db_finalize(&insFile);
1060
+ db_finalize(&delFile);
10421061
}
10431062
10441063
/*
10451064
** COMMAND: import
10461065
**
@@ -1135,11 +1154,12 @@
11351154
db_multi_exec(
11361155
"CREATE TEMP TABLE xrevisions("
11371156
" trev INT, tuser TEXT, tmsg TEXT, ttime DATETIME"
11381157
");"
11391158
"CREATE TEMP TABLE xfiles("
1140
- " trev INT, tpath TEXT, trid TEXT, tperm TEXT"
1159
+ " trev INT, tpath TEXT, trid TEXT, tperm TEXT,"
1160
+ " UNIQUE (trev, tpath) ON CONFLICT REPLACE"
11411161
");"
11421162
);
11431163
11441164
svn_dump_import(pIn);
11451165
}
11461166
--- src/import.c
+++ src/import.c
@@ -949,10 +949,11 @@
949 int ver;
950 const char *zTemp;
951 const char *zUuid;
952 Stmt insRev;
953 Stmt insFile;
 
954 int rev = 0;
955
956 /* version */
957 if( svn_read_rec(pIn, &rec)
958 && (zTemp = svn_find_header(rec, "SVN-fs-dump-format-version")) ){
@@ -969,17 +970,21 @@
969 fossil_fatal("Missing UUID!");
970 }
971 svn_free_rec(&rec);
972 /* content */
973 db_prepare(&insRev,
974 "INSERT INTO xrevisions (trev, tuser, tmsg, ttime)"
975 "VALUES(:rev, :user, :msg, :time)"
976 );
977 db_prepare(&insFile,
978 "INSERT INTO xfiles (trev, tpath, trid, tperm)"
979 "VALUES(:rev, :path, :rid, :perm)"
980 );
 
 
 
 
981 while( svn_read_rec(pIn, &rec) ){
982 if( zTemp = svn_find_header(rec, "Revision-number") ){
983 const char *zUser = svn_find_prop(rec, "svn:author");
984 const char *zLog = svn_find_prop(rec, "svn:log");
985 const char *zDate = svn_find_prop(rec, "svn:date");
@@ -990,10 +995,15 @@
990 db_bind_text(&insRev, ":msg", zLog);
991 db_bind_text(&insRev, ":time", zDate);
992 db_step(&insRev);
993 db_reset(&insRev);
994 fossil_free(zDate);
 
 
 
 
 
995 }else
996 if( zTemp = svn_find_header(rec, "Node-path") ){
997 const char *zPath = zTemp;
998 const char *zAction = svn_find_header(rec, "Node-action");
999 const char *zKind = svn_find_header(rec, "Node-kind");
@@ -1003,13 +1013,17 @@
1003 int rid = 0;
1004 if( zKind && strncmp(zKind, "dir", 3)==0 ){
1005 svn_free_rec(&rec);
1006 continue;
1007 }
1008 zTemp = svn_find_header(rec, "Node-copyfrom-rev");
1009 if( zTemp ){
1010 srcRev = atoi(zTemp);
 
 
 
 
1011 }
1012 rid = content_put(&rec.content);
1013 if( strncmp(zAction, "add", 3)==0 ){
1014 db_bind_int(&insFile, ":rev", rev);
1015 db_bind_int(&insFile, ":rid", rid);
@@ -1025,10 +1039,14 @@
1025 db_bind_text(&insFile, ":perm", zPerm);
1026 db_step(&insFile);
1027 db_reset(&insFile);
1028 }else
1029 if( strncmp(zAction, "delete", 6)==0 ){
 
 
 
 
1030 }else
1031 if( strncmp(zAction, "replace", 7)==0 ){
1032 }else{
1033 }
1034 }else{
@@ -1037,10 +1055,11 @@
1037 svn_free_rec(&rec);
1038 }
1039 svn_create_manifests();
1040 db_finalize(&insRev);
1041 db_finalize(&insFile);
 
1042 }
1043
1044 /*
1045 ** COMMAND: import
1046 **
@@ -1135,11 +1154,12 @@
1135 db_multi_exec(
1136 "CREATE TEMP TABLE xrevisions("
1137 " trev INT, tuser TEXT, tmsg TEXT, ttime DATETIME"
1138 ");"
1139 "CREATE TEMP TABLE xfiles("
1140 " trev INT, tpath TEXT, trid TEXT, tperm TEXT"
 
1141 ");"
1142 );
1143
1144 svn_dump_import(pIn);
1145 }
1146
--- src/import.c
+++ src/import.c
@@ -949,10 +949,11 @@
949 int ver;
950 const char *zTemp;
951 const char *zUuid;
952 Stmt insRev;
953 Stmt insFile;
954 Stmt delFile;
955 int rev = 0;
956
957 /* version */
958 if( svn_read_rec(pIn, &rec)
959 && (zTemp = svn_find_header(rec, "SVN-fs-dump-format-version")) ){
@@ -969,17 +970,21 @@
970 fossil_fatal("Missing UUID!");
971 }
972 svn_free_rec(&rec);
973 /* content */
974 db_prepare(&insRev,
975 "INSERT INTO xrevisions (trev, tuser, tmsg, ttime) "
976 "VALUES(:rev, :user, :msg, :time)"
977 );
978 db_prepare(&insFile,
979 "INSERT INTO xfiles (trev, tpath, trid, tperm) "
980 "VALUES(:rev, :path, :rid, :perm)"
981 );
982 db_prepare(&delFile,
983 "DELETE FROM xfiles "
984 "WHERE trev=:rev AND (tpath=:path OR tpath GLOB :path || '/*')"
985 );
986 while( svn_read_rec(pIn, &rec) ){
987 if( zTemp = svn_find_header(rec, "Revision-number") ){
988 const char *zUser = svn_find_prop(rec, "svn:author");
989 const char *zLog = svn_find_prop(rec, "svn:log");
990 const char *zDate = svn_find_prop(rec, "svn:date");
@@ -990,10 +995,15 @@
995 db_bind_text(&insRev, ":msg", zLog);
996 db_bind_text(&insRev, ":time", zDate);
997 db_step(&insRev);
998 db_reset(&insRev);
999 fossil_free(zDate);
1000 if( rev>0 ){
1001 db_multi_exec("INSERT INTO xfiles (trev, tpath, trid, tperm) "
1002 "SELECT %d, tpath, trid, tperm FROM xfiles "
1003 "WHERE trev=%d", rev, rev-1);
1004 }
1005 }else
1006 if( zTemp = svn_find_header(rec, "Node-path") ){
1007 const char *zPath = zTemp;
1008 const char *zAction = svn_find_header(rec, "Node-action");
1009 const char *zKind = svn_find_header(rec, "Node-kind");
@@ -1003,13 +1013,17 @@
1013 int rid = 0;
1014 if( zKind && strncmp(zKind, "dir", 3)==0 ){
1015 svn_free_rec(&rec);
1016 continue;
1017 }
1018 if( zSrcPath ){
1019 zTemp = svn_find_header(rec, "Node-copyfrom-rev");
1020 if( zTemp ){
1021 srcRev = atoi(zTemp);
1022 }else{
1023 fossil_fatal("Missing copyfrom-rev");
1024 }
1025 }
1026 rid = content_put(&rec.content);
1027 if( strncmp(zAction, "add", 3)==0 ){
1028 db_bind_int(&insFile, ":rev", rev);
1029 db_bind_int(&insFile, ":rid", rid);
@@ -1025,10 +1039,14 @@
1039 db_bind_text(&insFile, ":perm", zPerm);
1040 db_step(&insFile);
1041 db_reset(&insFile);
1042 }else
1043 if( strncmp(zAction, "delete", 6)==0 ){
1044 db_bind_int(&delFile, ":rev", rev);
1045 db_bind_text(&delFile, ":path", zPath);
1046 db_step(&delFile);
1047 db_reset(&delFile);
1048 }else
1049 if( strncmp(zAction, "replace", 7)==0 ){
1050 }else{
1051 }
1052 }else{
@@ -1037,10 +1055,11 @@
1055 svn_free_rec(&rec);
1056 }
1057 svn_create_manifests();
1058 db_finalize(&insRev);
1059 db_finalize(&insFile);
1060 db_finalize(&delFile);
1061 }
1062
1063 /*
1064 ** COMMAND: import
1065 **
@@ -1135,11 +1154,12 @@
1154 db_multi_exec(
1155 "CREATE TEMP TABLE xrevisions("
1156 " trev INT, tuser TEXT, tmsg TEXT, ttime DATETIME"
1157 ");"
1158 "CREATE TEMP TABLE xfiles("
1159 " trev INT, tpath TEXT, trid TEXT, tperm TEXT,"
1160 " UNIQUE (trev, tpath) ON CONFLICT REPLACE"
1161 ");"
1162 );
1163
1164 svn_dump_import(pIn);
1165 }
1166

Keyboard Shortcuts

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