Fossil SCM
fix bug with multi-window svndiff
Commit
ea54a29848ba316ce7c7e61b01d053f1ce3170c0
Parent
eb0bf0873379104…
1 file changed
+2
-9
+2
-9
| --- src/import.c | ||
| +++ src/import.c | ||
| @@ -1030,12 +1030,12 @@ | ||
| 1030 | 1030 | u64 lenInst = svn_get_varint(&zDiff); |
| 1031 | 1031 | u64 lenData = svn_get_varint(&zDiff); |
| 1032 | 1032 | const char *zInst = zDiff; |
| 1033 | 1033 | const char *zData = zInst+lenInst; |
| 1034 | 1034 | u64 lenOld = blob_size(pOut); |
| 1035 | - blob_resize(pOut, lenOut); | |
| 1036 | - zOut = blob_buffer(pOut) + lenOld; | |
| 1035 | + blob_resize(pOut, lenOut+lenOld); | |
| 1036 | + zOut = blob_buffer(pOut)+lenOld; | |
| 1037 | 1037 | while( zDiff<zInst+lenInst ){ |
| 1038 | 1038 | u64 lenCpy = (*zDiff)&0x3f; |
| 1039 | 1039 | const char *zCpy; |
| 1040 | 1040 | switch( (*zDiff)&0xC0 ){ |
| 1041 | 1041 | case 0x00: zCpy = blob_buffer(pSrc)+offSrc; break; |
| @@ -1143,11 +1143,10 @@ | ||
| 1143 | 1143 | if( rev>0 ){ |
| 1144 | 1144 | db_multi_exec("INSERT INTO xfiles (trev, tpath, trid, tperm) " |
| 1145 | 1145 | "SELECT %d, tpath, trid, tperm FROM xfiles " |
| 1146 | 1146 | "WHERE trev=%d", rev, rev-1); |
| 1147 | 1147 | } |
| 1148 | -fossil_print("rev: %d\n", rev); | |
| 1149 | 1148 | }else |
| 1150 | 1149 | if( zTemp = svn_find_header(rec, "Node-path") ){ |
| 1151 | 1150 | const char *zPath = zTemp; |
| 1152 | 1151 | const char *zAction = svn_find_header(rec, "Node-action"); |
| 1153 | 1152 | const char *zKind = svn_find_header(rec, "Node-kind"); |
| @@ -1154,11 +1153,10 @@ | ||
| 1154 | 1153 | const char *zSrcPath = svn_find_header(rec, "Node-copyfrom-path"); |
| 1155 | 1154 | const char *zPerm = svn_find_prop(rec, "svn:executable") ? "x" : 0; |
| 1156 | 1155 | int deltaFlag = 0; |
| 1157 | 1156 | int srcRev = -1; |
| 1158 | 1157 | int rid = 0; |
| 1159 | -fossil_print("file: %s ...", zPath); | |
| 1160 | 1158 | if( zTemp = svn_find_header(rec, "Text-delta") ){ |
| 1161 | 1159 | deltaFlag = strncmp(zTemp, "true", 4)==0; |
| 1162 | 1160 | } |
| 1163 | 1161 | if( zSrcPath ){ |
| 1164 | 1162 | zTemp = svn_find_header(rec, "Node-copyfrom-rev"); |
| @@ -1228,24 +1226,20 @@ | ||
| 1228 | 1226 | srcRev, zSrcPath); |
| 1229 | 1227 | } |
| 1230 | 1228 | if( deltaFlag ){ |
| 1231 | 1229 | Blob deltaSrc; |
| 1232 | 1230 | Blob target; |
| 1233 | -fossil_print("diff-size: %d ", blob_size(&rec.content)); | |
| 1234 | 1231 | if( rid!=0 ){ |
| 1235 | 1232 | content_get(rid, &deltaSrc); |
| 1236 | 1233 | }else{ |
| 1237 | 1234 | blob_zero(&deltaSrc); |
| 1238 | 1235 | } |
| 1239 | 1236 | svn_apply_svndiff(&rec.content, &deltaSrc, &target); |
| 1240 | -fossil_print("real-size: %d ", blob_size(&target)); | |
| 1241 | 1237 | rid = content_put(&target); |
| 1242 | 1238 | }else if( rec.contentFlag ){ |
| 1243 | -fossil_print("size: %d ", blob_size(&rec.content)); | |
| 1244 | 1239 | rid = content_put(&rec.content); |
| 1245 | 1240 | } |
| 1246 | -fossil_print("rid: %d ", rid); | |
| 1247 | 1241 | db_bind_int(&insFile, ":rev", rev); |
| 1248 | 1242 | db_bind_int(&insFile, ":rid", rid); |
| 1249 | 1243 | db_bind_text(&insFile, ":path", zPath); |
| 1250 | 1244 | db_bind_text(&insFile, ":perm", zPerm); |
| 1251 | 1245 | db_step(&insFile); |
| @@ -1281,11 +1275,10 @@ | ||
| 1281 | 1275 | } |
| 1282 | 1276 | }else{ |
| 1283 | 1277 | fossil_fatal("Unknown record type"); |
| 1284 | 1278 | } |
| 1285 | 1279 | svn_free_rec(&rec); |
| 1286 | -fossil_print("done\n"); | |
| 1287 | 1280 | } |
| 1288 | 1281 | if( !flatFlag ){ |
| 1289 | 1282 | if( *zBranch ){ |
| 1290 | 1283 | db_bind_text(&setBranch, ":branch", zBranch); |
| 1291 | 1284 | db_bind_int(&setBranch, ":rev", rev); |
| 1292 | 1285 |
| --- src/import.c | |
| +++ src/import.c | |
| @@ -1030,12 +1030,12 @@ | |
| 1030 | u64 lenInst = svn_get_varint(&zDiff); |
| 1031 | u64 lenData = svn_get_varint(&zDiff); |
| 1032 | const char *zInst = zDiff; |
| 1033 | const char *zData = zInst+lenInst; |
| 1034 | u64 lenOld = blob_size(pOut); |
| 1035 | blob_resize(pOut, lenOut); |
| 1036 | zOut = blob_buffer(pOut) + lenOld; |
| 1037 | while( zDiff<zInst+lenInst ){ |
| 1038 | u64 lenCpy = (*zDiff)&0x3f; |
| 1039 | const char *zCpy; |
| 1040 | switch( (*zDiff)&0xC0 ){ |
| 1041 | case 0x00: zCpy = blob_buffer(pSrc)+offSrc; break; |
| @@ -1143,11 +1143,10 @@ | |
| 1143 | if( rev>0 ){ |
| 1144 | db_multi_exec("INSERT INTO xfiles (trev, tpath, trid, tperm) " |
| 1145 | "SELECT %d, tpath, trid, tperm FROM xfiles " |
| 1146 | "WHERE trev=%d", rev, rev-1); |
| 1147 | } |
| 1148 | fossil_print("rev: %d\n", rev); |
| 1149 | }else |
| 1150 | if( zTemp = svn_find_header(rec, "Node-path") ){ |
| 1151 | const char *zPath = zTemp; |
| 1152 | const char *zAction = svn_find_header(rec, "Node-action"); |
| 1153 | const char *zKind = svn_find_header(rec, "Node-kind"); |
| @@ -1154,11 +1153,10 @@ | |
| 1154 | const char *zSrcPath = svn_find_header(rec, "Node-copyfrom-path"); |
| 1155 | const char *zPerm = svn_find_prop(rec, "svn:executable") ? "x" : 0; |
| 1156 | int deltaFlag = 0; |
| 1157 | int srcRev = -1; |
| 1158 | int rid = 0; |
| 1159 | fossil_print("file: %s ...", zPath); |
| 1160 | if( zTemp = svn_find_header(rec, "Text-delta") ){ |
| 1161 | deltaFlag = strncmp(zTemp, "true", 4)==0; |
| 1162 | } |
| 1163 | if( zSrcPath ){ |
| 1164 | zTemp = svn_find_header(rec, "Node-copyfrom-rev"); |
| @@ -1228,24 +1226,20 @@ | |
| 1228 | srcRev, zSrcPath); |
| 1229 | } |
| 1230 | if( deltaFlag ){ |
| 1231 | Blob deltaSrc; |
| 1232 | Blob target; |
| 1233 | fossil_print("diff-size: %d ", blob_size(&rec.content)); |
| 1234 | if( rid!=0 ){ |
| 1235 | content_get(rid, &deltaSrc); |
| 1236 | }else{ |
| 1237 | blob_zero(&deltaSrc); |
| 1238 | } |
| 1239 | svn_apply_svndiff(&rec.content, &deltaSrc, &target); |
| 1240 | fossil_print("real-size: %d ", blob_size(&target)); |
| 1241 | rid = content_put(&target); |
| 1242 | }else if( rec.contentFlag ){ |
| 1243 | fossil_print("size: %d ", blob_size(&rec.content)); |
| 1244 | rid = content_put(&rec.content); |
| 1245 | } |
| 1246 | fossil_print("rid: %d ", rid); |
| 1247 | db_bind_int(&insFile, ":rev", rev); |
| 1248 | db_bind_int(&insFile, ":rid", rid); |
| 1249 | db_bind_text(&insFile, ":path", zPath); |
| 1250 | db_bind_text(&insFile, ":perm", zPerm); |
| 1251 | db_step(&insFile); |
| @@ -1281,11 +1275,10 @@ | |
| 1281 | } |
| 1282 | }else{ |
| 1283 | fossil_fatal("Unknown record type"); |
| 1284 | } |
| 1285 | svn_free_rec(&rec); |
| 1286 | fossil_print("done\n"); |
| 1287 | } |
| 1288 | if( !flatFlag ){ |
| 1289 | if( *zBranch ){ |
| 1290 | db_bind_text(&setBranch, ":branch", zBranch); |
| 1291 | db_bind_int(&setBranch, ":rev", rev); |
| 1292 |
| --- src/import.c | |
| +++ src/import.c | |
| @@ -1030,12 +1030,12 @@ | |
| 1030 | u64 lenInst = svn_get_varint(&zDiff); |
| 1031 | u64 lenData = svn_get_varint(&zDiff); |
| 1032 | const char *zInst = zDiff; |
| 1033 | const char *zData = zInst+lenInst; |
| 1034 | u64 lenOld = blob_size(pOut); |
| 1035 | blob_resize(pOut, lenOut+lenOld); |
| 1036 | zOut = blob_buffer(pOut)+lenOld; |
| 1037 | while( zDiff<zInst+lenInst ){ |
| 1038 | u64 lenCpy = (*zDiff)&0x3f; |
| 1039 | const char *zCpy; |
| 1040 | switch( (*zDiff)&0xC0 ){ |
| 1041 | case 0x00: zCpy = blob_buffer(pSrc)+offSrc; break; |
| @@ -1143,11 +1143,10 @@ | |
| 1143 | if( rev>0 ){ |
| 1144 | db_multi_exec("INSERT INTO xfiles (trev, tpath, trid, tperm) " |
| 1145 | "SELECT %d, tpath, trid, tperm FROM xfiles " |
| 1146 | "WHERE trev=%d", rev, rev-1); |
| 1147 | } |
| 1148 | }else |
| 1149 | if( zTemp = svn_find_header(rec, "Node-path") ){ |
| 1150 | const char *zPath = zTemp; |
| 1151 | const char *zAction = svn_find_header(rec, "Node-action"); |
| 1152 | const char *zKind = svn_find_header(rec, "Node-kind"); |
| @@ -1154,11 +1153,10 @@ | |
| 1153 | const char *zSrcPath = svn_find_header(rec, "Node-copyfrom-path"); |
| 1154 | const char *zPerm = svn_find_prop(rec, "svn:executable") ? "x" : 0; |
| 1155 | int deltaFlag = 0; |
| 1156 | int srcRev = -1; |
| 1157 | int rid = 0; |
| 1158 | if( zTemp = svn_find_header(rec, "Text-delta") ){ |
| 1159 | deltaFlag = strncmp(zTemp, "true", 4)==0; |
| 1160 | } |
| 1161 | if( zSrcPath ){ |
| 1162 | zTemp = svn_find_header(rec, "Node-copyfrom-rev"); |
| @@ -1228,24 +1226,20 @@ | |
| 1226 | srcRev, zSrcPath); |
| 1227 | } |
| 1228 | if( deltaFlag ){ |
| 1229 | Blob deltaSrc; |
| 1230 | Blob target; |
| 1231 | if( rid!=0 ){ |
| 1232 | content_get(rid, &deltaSrc); |
| 1233 | }else{ |
| 1234 | blob_zero(&deltaSrc); |
| 1235 | } |
| 1236 | svn_apply_svndiff(&rec.content, &deltaSrc, &target); |
| 1237 | rid = content_put(&target); |
| 1238 | }else if( rec.contentFlag ){ |
| 1239 | rid = content_put(&rec.content); |
| 1240 | } |
| 1241 | db_bind_int(&insFile, ":rev", rev); |
| 1242 | db_bind_int(&insFile, ":rid", rid); |
| 1243 | db_bind_text(&insFile, ":path", zPath); |
| 1244 | db_bind_text(&insFile, ":perm", zPerm); |
| 1245 | db_step(&insFile); |
| @@ -1281,11 +1275,10 @@ | |
| 1275 | } |
| 1276 | }else{ |
| 1277 | fossil_fatal("Unknown record type"); |
| 1278 | } |
| 1279 | svn_free_rec(&rec); |
| 1280 | } |
| 1281 | if( !flatFlag ){ |
| 1282 | if( *zBranch ){ |
| 1283 | db_bind_text(&setBranch, ":branch", zBranch); |
| 1284 | db_bind_int(&setBranch, ":rev", rev); |
| 1285 |