Fossil SCM
Fix --filter option
Commit
64c65816dadaab71c32e118b0a47fd40c4c12a26
Parent
57fa3896f3b489c…
1 file changed
+19
-13
+19
-13
| --- src/import.c | ||
| +++ src/import.c | ||
| @@ -909,10 +909,26 @@ | ||
| 909 | 909 | int nFilter; |
| 910 | 910 | int rid; |
| 911 | 911 | const char *zParentBranch = 0; |
| 912 | 912 | Blob mcksum; |
| 913 | 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 | + } | |
| 914 | 930 | db_static_prepare(&insRev, "REPLACE INTO xrevisions (trev, tbranch, tuuid) " |
| 915 | 931 | "VALUES(:rev, :branch, " |
| 916 | 932 | " (SELECT uuid FROM blob WHERE rid=:rid))"); |
| 917 | 933 | db_static_prepare(&qParent, "SELECT tuuid, tbranch FROM xrevisions " |
| 918 | 934 | "WHERE trev=:rev"); |
| @@ -942,22 +958,12 @@ | ||
| 942 | 958 | blob_appendf(&manifest, "C %F\n", gsvn.zComment); |
| 943 | 959 | }else{ |
| 944 | 960 | blob_append(&manifest, "C (no\\scomment)\n", 16); |
| 945 | 961 | } |
| 946 | 962 | 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 | 963 | nFilter = blob_size(&gsvn.filter)-1; |
| 964 | + db_bind_text(&qFiles, ":filter", blob_str(&gsvn.filter)); | |
| 959 | 965 | while( db_step(&qFiles)==SQLITE_ROW ){ |
| 960 | 966 | const char *zFile = db_column_text(&qFiles, 0); |
| 961 | 967 | int rid = db_column_int(&qFiles, 1); |
| 962 | 968 | const char *zPerm = db_column_text(&qFiles, 2); |
| 963 | 969 | const char *zUuid; |
| @@ -1004,15 +1010,15 @@ | ||
| 1004 | 1010 | md5sum_blob(&manifest, &mcksum); |
| 1005 | 1011 | blob_appendf(&manifest, "Z %b\n", &mcksum); |
| 1006 | 1012 | blob_reset(&mcksum); |
| 1007 | 1013 | |
| 1008 | 1014 | rid = content_put(&manifest); |
| 1009 | - blob_reset(&manifest); | |
| 1010 | 1015 | db_bind_int(&insRev, ":rev", gsvn.rev); |
| 1011 | 1016 | db_bind_text(&insRev, ":branch", gsvn.zBranch); |
| 1012 | 1017 | db_bind_int(&insRev, ":rid", rid); |
| 1013 | 1018 | db_step(&insRev); |
| 1019 | + blob_reset(&manifest); | |
| 1014 | 1020 | } |
| 1015 | 1021 | |
| 1016 | 1022 | static u64 svn_get_varint(const char **pz){ |
| 1017 | 1023 | unsigned int v = 0; |
| 1018 | 1024 | do{ |
| @@ -1320,11 +1326,11 @@ | ||
| 1320 | 1326 | ** (by default) trunk/, branches/ and tags/ |
| 1321 | 1327 | ** Options: |
| 1322 | 1328 | ** --trunk FOLDER Name of trunk folder |
| 1323 | 1329 | ** --branches FOLDER Name of branches folder |
| 1324 | 1330 | ** --tags FOLDER Name of tags folder |
| 1325 | -** --fiter PATH Path to project root in repository | |
| 1331 | +** --filter PATH Path to project root in repository | |
| 1326 | 1332 | ** --flat The whole dump is a single branch |
| 1327 | 1333 | ** |
| 1328 | 1334 | ** The --incremental option allows an existing repository to be extended |
| 1329 | 1335 | ** with new content. |
| 1330 | 1336 | ** |
| 1331 | 1337 |
| --- 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 |