Fossil SCM

Fix --filter option

baruch 2014-11-04 12:29 svn-import
Commit 64c65816dadaab71c32e118b0a47fd40c4c12a26
1 file changed +19 -13
+19 -13
--- src/import.c
+++ src/import.c
@@ -909,10 +909,26 @@
909909
int nFilter;
910910
int rid;
911911
const char *zParentBranch = 0;
912912
Blob mcksum;
913913
914
+ nBaseFilter = blob_size(&gsvn.filter);
915
+ if( !gsvn.flatFlag ){
916
+ if( strncmp(gsvn.zBranch, gsvn.zTrunk, gsvn.lenTrunk-1)==0 ){
917
+ blob_appendf(&gsvn.filter, "%s*", gsvn.zTrunk);
918
+ }else{
919
+ blob_appendf(&gsvn.filter, "%s%s/*", gsvn.zBranches, gsvn.zBranch);
920
+ }
921
+ }else{
922
+ blob_append(&gsvn.filter, "*", 1);
923
+ }
924
+ if( db_int(0, "SELECT 1 FROM xhist WHERE trev=%d AND tpath GLOB %Q LIMIT 1",
925
+ gsvn.rev, blob_str(&gsvn.filter))==0
926
+ ){
927
+ blob_resize(&gsvn.filter, nBaseFilter);
928
+ return;
929
+ }
914930
db_static_prepare(&insRev, "REPLACE INTO xrevisions (trev, tbranch, tuuid) "
915931
"VALUES(:rev, :branch, "
916932
" (SELECT uuid FROM blob WHERE rid=:rid))");
917933
db_static_prepare(&qParent, "SELECT tuuid, tbranch FROM xrevisions "
918934
"WHERE trev=:rev");
@@ -942,22 +958,12 @@
942958
blob_appendf(&manifest, "C %F\n", gsvn.zComment);
943959
}else{
944960
blob_append(&manifest, "C (no\\scomment)\n", 16);
945961
}
946962
blob_appendf(&manifest, "D %s\n", gsvn.zDate);
947
- nBaseFilter = blob_size(&gsvn.filter);
948
- if( !gsvn.flatFlag ){
949
- if( strncmp(gsvn.zBranch, gsvn.zTrunk, gsvn.lenTrunk-1)==0 ){
950
- blob_appendf(&gsvn.filter, "%s*", gsvn.zTrunk);
951
- }else{
952
- blob_appendf(&gsvn.filter, "%s%s/*", gsvn.zBranches, gsvn.zBranch);
953
- }
954
- }else{
955
- blob_append(&gsvn.filter, "*", 1);
956
- }
957
- db_bind_text(&qFiles, ":filter", blob_str(&gsvn.filter));
958963
nFilter = blob_size(&gsvn.filter)-1;
964
+ db_bind_text(&qFiles, ":filter", blob_str(&gsvn.filter));
959965
while( db_step(&qFiles)==SQLITE_ROW ){
960966
const char *zFile = db_column_text(&qFiles, 0);
961967
int rid = db_column_int(&qFiles, 1);
962968
const char *zPerm = db_column_text(&qFiles, 2);
963969
const char *zUuid;
@@ -1004,15 +1010,15 @@
10041010
md5sum_blob(&manifest, &mcksum);
10051011
blob_appendf(&manifest, "Z %b\n", &mcksum);
10061012
blob_reset(&mcksum);
10071013
10081014
rid = content_put(&manifest);
1009
- blob_reset(&manifest);
10101015
db_bind_int(&insRev, ":rev", gsvn.rev);
10111016
db_bind_text(&insRev, ":branch", gsvn.zBranch);
10121017
db_bind_int(&insRev, ":rid", rid);
10131018
db_step(&insRev);
1019
+ blob_reset(&manifest);
10141020
}
10151021
10161022
static u64 svn_get_varint(const char **pz){
10171023
unsigned int v = 0;
10181024
do{
@@ -1320,11 +1326,11 @@
13201326
** (by default) trunk/, branches/ and tags/
13211327
** Options:
13221328
** --trunk FOLDER Name of trunk folder
13231329
** --branches FOLDER Name of branches folder
13241330
** --tags FOLDER Name of tags folder
1325
-** --fiter PATH Path to project root in repository
1331
+** --filter PATH Path to project root in repository
13261332
** --flat The whole dump is a single branch
13271333
**
13281334
** The --incremental option allows an existing repository to be extended
13291335
** with new content.
13301336
**
13311337
--- src/import.c
+++ src/import.c
@@ -909,10 +909,26 @@
909 int nFilter;
910 int rid;
911 const char *zParentBranch = 0;
912 Blob mcksum;
913
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
914 db_static_prepare(&insRev, "REPLACE INTO xrevisions (trev, tbranch, tuuid) "
915 "VALUES(:rev, :branch, "
916 " (SELECT uuid FROM blob WHERE rid=:rid))");
917 db_static_prepare(&qParent, "SELECT tuuid, tbranch FROM xrevisions "
918 "WHERE trev=:rev");
@@ -942,22 +958,12 @@
942 blob_appendf(&manifest, "C %F\n", gsvn.zComment);
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( !gsvn.flatFlag ){
949 if( strncmp(gsvn.zBranch, gsvn.zTrunk, gsvn.lenTrunk-1)==0 ){
950 blob_appendf(&gsvn.filter, "%s*", gsvn.zTrunk);
951 }else{
952 blob_appendf(&gsvn.filter, "%s%s/*", gsvn.zBranches, gsvn.zBranch);
953 }
954 }else{
955 blob_append(&gsvn.filter, "*", 1);
956 }
957 db_bind_text(&qFiles, ":filter", blob_str(&gsvn.filter));
958 nFilter = blob_size(&gsvn.filter)-1;
 
959 while( db_step(&qFiles)==SQLITE_ROW ){
960 const char *zFile = db_column_text(&qFiles, 0);
961 int rid = db_column_int(&qFiles, 1);
962 const char *zPerm = db_column_text(&qFiles, 2);
963 const char *zUuid;
@@ -1004,15 +1010,15 @@
1004 md5sum_blob(&manifest, &mcksum);
1005 blob_appendf(&manifest, "Z %b\n", &mcksum);
1006 blob_reset(&mcksum);
1007
1008 rid = content_put(&manifest);
1009 blob_reset(&manifest);
1010 db_bind_int(&insRev, ":rev", gsvn.rev);
1011 db_bind_text(&insRev, ":branch", gsvn.zBranch);
1012 db_bind_int(&insRev, ":rid", rid);
1013 db_step(&insRev);
 
1014 }
1015
1016 static u64 svn_get_varint(const char **pz){
1017 unsigned int v = 0;
1018 do{
@@ -1320,11 +1326,11 @@
1320 ** (by default) trunk/, branches/ and tags/
1321 ** Options:
1322 ** --trunk FOLDER Name of trunk folder
1323 ** --branches FOLDER Name of branches folder
1324 ** --tags FOLDER Name of tags folder
1325 ** --fiter PATH Path to project root in repository
1326 ** --flat The whole dump is a single branch
1327 **
1328 ** The --incremental option allows an existing repository to be extended
1329 ** with new content.
1330 **
1331
--- src/import.c
+++ src/import.c
@@ -909,10 +909,26 @@
909 int nFilter;
910 int rid;
911 const char *zParentBranch = 0;
912 Blob mcksum;
913
914 nBaseFilter = blob_size(&gsvn.filter);
915 if( !gsvn.flatFlag ){
916 if( strncmp(gsvn.zBranch, gsvn.zTrunk, gsvn.lenTrunk-1)==0 ){
917 blob_appendf(&gsvn.filter, "%s*", gsvn.zTrunk);
918 }else{
919 blob_appendf(&gsvn.filter, "%s%s/*", gsvn.zBranches, gsvn.zBranch);
920 }
921 }else{
922 blob_append(&gsvn.filter, "*", 1);
923 }
924 if( db_int(0, "SELECT 1 FROM xhist WHERE trev=%d AND tpath GLOB %Q LIMIT 1",
925 gsvn.rev, blob_str(&gsvn.filter))==0
926 ){
927 blob_resize(&gsvn.filter, nBaseFilter);
928 return;
929 }
930 db_static_prepare(&insRev, "REPLACE INTO xrevisions (trev, tbranch, tuuid) "
931 "VALUES(:rev, :branch, "
932 " (SELECT uuid FROM blob WHERE rid=:rid))");
933 db_static_prepare(&qParent, "SELECT tuuid, tbranch FROM xrevisions "
934 "WHERE trev=:rev");
@@ -942,22 +958,12 @@
958 blob_appendf(&manifest, "C %F\n", gsvn.zComment);
959 }else{
960 blob_append(&manifest, "C (no\\scomment)\n", 16);
961 }
962 blob_appendf(&manifest, "D %s\n", gsvn.zDate);
 
 
 
 
 
 
 
 
 
 
 
963 nFilter = blob_size(&gsvn.filter)-1;
964 db_bind_text(&qFiles, ":filter", blob_str(&gsvn.filter));
965 while( db_step(&qFiles)==SQLITE_ROW ){
966 const char *zFile = db_column_text(&qFiles, 0);
967 int rid = db_column_int(&qFiles, 1);
968 const char *zPerm = db_column_text(&qFiles, 2);
969 const char *zUuid;
@@ -1004,15 +1010,15 @@
1010 md5sum_blob(&manifest, &mcksum);
1011 blob_appendf(&manifest, "Z %b\n", &mcksum);
1012 blob_reset(&mcksum);
1013
1014 rid = content_put(&manifest);
 
1015 db_bind_int(&insRev, ":rev", gsvn.rev);
1016 db_bind_text(&insRev, ":branch", gsvn.zBranch);
1017 db_bind_int(&insRev, ":rid", rid);
1018 db_step(&insRev);
1019 blob_reset(&manifest);
1020 }
1021
1022 static u64 svn_get_varint(const char **pz){
1023 unsigned int v = 0;
1024 do{
@@ -1320,11 +1326,11 @@
1326 ** (by default) trunk/, branches/ and tags/
1327 ** Options:
1328 ** --trunk FOLDER Name of trunk folder
1329 ** --branches FOLDER Name of branches folder
1330 ** --tags FOLDER Name of tags folder
1331 ** --filter PATH Path to project root in repository
1332 ** --flat The whole dump is a single branch
1333 **
1334 ** The --incremental option allows an existing repository to be extended
1335 ** with new content.
1336 **
1337

Keyboard Shortcuts

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