Fossil SCM
Fixes to "export --git". Changes spaces in tag names to "_" since Git cannot deal with spaces in tag names. Make sure the name of the committer is well-formed according to git's definition of well-formedness.
Commit
b707622f29b6081daa275b315ae60c5a0be7ceda
Parent
d3a1663a09b0ee7…
1 file changed
+10
-3
+10
-3
| --- src/export.c | ||
| +++ src/export.c | ||
| @@ -39,11 +39,11 @@ | ||
| 39 | 39 | db_bind_text(&q, ":user", zUser); |
| 40 | 40 | if( db_step(&q)!=SQLITE_ROW ){ |
| 41 | 41 | db_reset(&q); |
| 42 | 42 | for(i=0; zUser[i] && zUser[i]!='>' && zUser[i]!='<'; i++){} |
| 43 | 43 | if( zUser[i]==0 ){ |
| 44 | - printf(" <%s>", zUser); | |
| 44 | + printf(" %s <%s>", zUser, zUser); | |
| 45 | 45 | return; |
| 46 | 46 | } |
| 47 | 47 | zName = mprintf("%s", zUser); |
| 48 | 48 | for(i=j=0; zName[i]; i++){ |
| 49 | 49 | if( zName[i]!='<' && zName[i]!='>' ){ |
| @@ -56,11 +56,11 @@ | ||
| 56 | 56 | return; |
| 57 | 57 | } |
| 58 | 58 | zContact = db_column_text(&q, 0); |
| 59 | 59 | for(i=0; zContact[i] && zContact[i]!='>' && zContact[i]!='<'; i++){} |
| 60 | 60 | if( zContact[i]==0 ){ |
| 61 | - printf(" %s <%s>", zContact, zUser); | |
| 61 | + printf(" %s <%s>", zContact[0] ? zContact : zUser, zUser); | |
| 62 | 62 | db_reset(&q); |
| 63 | 63 | return; |
| 64 | 64 | } |
| 65 | 65 | if( zContact[i]=='<' ){ |
| 66 | 66 | zEmail = mprintf("%s", &zContact[i]); |
| @@ -196,17 +196,24 @@ | ||
| 196 | 196 | " FROM tagxref JOIN tag USING(tagid)" |
| 197 | 197 | " WHERE tagtype=1 AND tagname GLOB 'sym-*'" |
| 198 | 198 | ); |
| 199 | 199 | while( db_step(&q)==SQLITE_ROW ){ |
| 200 | 200 | const char *zTagname = db_column_text(&q, 0); |
| 201 | + char *zEncoded = 0; | |
| 201 | 202 | int rid = db_column_int(&q, 1); |
| 202 | 203 | const char *zSecSince1970 = db_column_text(&q, 2); |
| 204 | + int i; | |
| 203 | 205 | if( rid==0 || !bag_find(&vers, rid) ) continue; |
| 204 | 206 | zTagname += 4; |
| 205 | - printf("tag %s\n", zTagname); | |
| 207 | + zEncoded = mprintf("%s", zTagname); | |
| 208 | + for(i=0; zEncoded[i]; i++){ | |
| 209 | + if( !fossil_isalnum(zEncoded[i]) ) zEncoded[i] = '_'; | |
| 210 | + } | |
| 211 | + printf("tag %s\n", zEncoded); | |
| 206 | 212 | printf("from :%d\n", rid+firstCkin); |
| 207 | 213 | printf("tagger <tagger> %s +0000\n", zSecSince1970); |
| 208 | 214 | printf("data 0\n"); |
| 215 | + fossil_free(zEncoded); | |
| 209 | 216 | } |
| 210 | 217 | db_finalize(&q); |
| 211 | 218 | bag_clear(&vers); |
| 212 | 219 | } |
| 213 | 220 |
| --- src/export.c | |
| +++ src/export.c | |
| @@ -39,11 +39,11 @@ | |
| 39 | db_bind_text(&q, ":user", zUser); |
| 40 | if( db_step(&q)!=SQLITE_ROW ){ |
| 41 | db_reset(&q); |
| 42 | for(i=0; zUser[i] && zUser[i]!='>' && zUser[i]!='<'; i++){} |
| 43 | if( zUser[i]==0 ){ |
| 44 | printf(" <%s>", zUser); |
| 45 | return; |
| 46 | } |
| 47 | zName = mprintf("%s", zUser); |
| 48 | for(i=j=0; zName[i]; i++){ |
| 49 | if( zName[i]!='<' && zName[i]!='>' ){ |
| @@ -56,11 +56,11 @@ | |
| 56 | return; |
| 57 | } |
| 58 | zContact = db_column_text(&q, 0); |
| 59 | for(i=0; zContact[i] && zContact[i]!='>' && zContact[i]!='<'; i++){} |
| 60 | if( zContact[i]==0 ){ |
| 61 | printf(" %s <%s>", zContact, zUser); |
| 62 | db_reset(&q); |
| 63 | return; |
| 64 | } |
| 65 | if( zContact[i]=='<' ){ |
| 66 | zEmail = mprintf("%s", &zContact[i]); |
| @@ -196,17 +196,24 @@ | |
| 196 | " FROM tagxref JOIN tag USING(tagid)" |
| 197 | " WHERE tagtype=1 AND tagname GLOB 'sym-*'" |
| 198 | ); |
| 199 | while( db_step(&q)==SQLITE_ROW ){ |
| 200 | const char *zTagname = db_column_text(&q, 0); |
| 201 | int rid = db_column_int(&q, 1); |
| 202 | const char *zSecSince1970 = db_column_text(&q, 2); |
| 203 | if( rid==0 || !bag_find(&vers, rid) ) continue; |
| 204 | zTagname += 4; |
| 205 | printf("tag %s\n", zTagname); |
| 206 | printf("from :%d\n", rid+firstCkin); |
| 207 | printf("tagger <tagger> %s +0000\n", zSecSince1970); |
| 208 | printf("data 0\n"); |
| 209 | } |
| 210 | db_finalize(&q); |
| 211 | bag_clear(&vers); |
| 212 | } |
| 213 |
| --- src/export.c | |
| +++ src/export.c | |
| @@ -39,11 +39,11 @@ | |
| 39 | db_bind_text(&q, ":user", zUser); |
| 40 | if( db_step(&q)!=SQLITE_ROW ){ |
| 41 | db_reset(&q); |
| 42 | for(i=0; zUser[i] && zUser[i]!='>' && zUser[i]!='<'; i++){} |
| 43 | if( zUser[i]==0 ){ |
| 44 | printf(" %s <%s>", zUser, zUser); |
| 45 | return; |
| 46 | } |
| 47 | zName = mprintf("%s", zUser); |
| 48 | for(i=j=0; zName[i]; i++){ |
| 49 | if( zName[i]!='<' && zName[i]!='>' ){ |
| @@ -56,11 +56,11 @@ | |
| 56 | return; |
| 57 | } |
| 58 | zContact = db_column_text(&q, 0); |
| 59 | for(i=0; zContact[i] && zContact[i]!='>' && zContact[i]!='<'; i++){} |
| 60 | if( zContact[i]==0 ){ |
| 61 | printf(" %s <%s>", zContact[0] ? zContact : zUser, zUser); |
| 62 | db_reset(&q); |
| 63 | return; |
| 64 | } |
| 65 | if( zContact[i]=='<' ){ |
| 66 | zEmail = mprintf("%s", &zContact[i]); |
| @@ -196,17 +196,24 @@ | |
| 196 | " FROM tagxref JOIN tag USING(tagid)" |
| 197 | " WHERE tagtype=1 AND tagname GLOB 'sym-*'" |
| 198 | ); |
| 199 | while( db_step(&q)==SQLITE_ROW ){ |
| 200 | const char *zTagname = db_column_text(&q, 0); |
| 201 | char *zEncoded = 0; |
| 202 | int rid = db_column_int(&q, 1); |
| 203 | const char *zSecSince1970 = db_column_text(&q, 2); |
| 204 | int i; |
| 205 | if( rid==0 || !bag_find(&vers, rid) ) continue; |
| 206 | zTagname += 4; |
| 207 | zEncoded = mprintf("%s", zTagname); |
| 208 | for(i=0; zEncoded[i]; i++){ |
| 209 | if( !fossil_isalnum(zEncoded[i]) ) zEncoded[i] = '_'; |
| 210 | } |
| 211 | printf("tag %s\n", zEncoded); |
| 212 | printf("from :%d\n", rid+firstCkin); |
| 213 | printf("tagger <tagger> %s +0000\n", zSecSince1970); |
| 214 | printf("data 0\n"); |
| 215 | fossil_free(zEncoded); |
| 216 | } |
| 217 | db_finalize(&q); |
| 218 | bag_clear(&vers); |
| 219 | } |
| 220 |