Fossil SCM

Improved handling of branches and tags in the "fossil import" command.

drh 2010-11-10 20:56 trunk
Commit b2f637510a69c2ae0ecd6eb017158a05402e1cd5
1 file changed +24 -3
+24 -3
--- src/import.c
+++ src/import.c
@@ -33,11 +33,12 @@
3333
char *aData; /* Data content */
3434
char *zMark; /* The current mark */
3535
char *zDate; /* Date/time stamp */
3636
char *zUser; /* User name */
3737
char *zComment; /* Comment of a commit */
38
- char *zFrom; /* from value */
38
+ char *zFrom; /* from value as a UUID */
39
+ char *zFromMark; /* The mark of the "from" field */
3940
int nMerge; /* Number of merge values */
4041
int nMergeAlloc; /* Number of slots in azMerge[] */
4142
char **azMerge; /* Merge values */
4243
int nFile; /* Number of aFile values */
4344
int nFileAlloc; /* Number of slots in aFile[] */
@@ -65,10 +66,11 @@
6566
fossil_free(gg.zMark); gg.zMark = 0;
6667
fossil_free(gg.zDate); gg.zDate = 0;
6768
fossil_free(gg.zUser); gg.zUser = 0;
6869
fossil_free(gg.zComment); gg.zComment = 0;
6970
fossil_free(gg.zFrom); gg.zFrom = 0;
71
+ fossil_free(gg.zFromMark); gg.zFromMark = 0;
7072
for(i=0; i<gg.nMerge; i++){
7173
fossil_free(gg.azMerge[i]); gg.azMerge[i] = 0;
7274
}
7375
gg.nMerge = 0;
7476
for(i=0; i<gg.nFile; i++){
@@ -177,10 +179,11 @@
177179
** Use data accumulated in gg from a "commit" record to add a new
178180
** manifest artifact to the BLOB table.
179181
*/
180182
static void finish_commit(void){
181183
int i;
184
+ char *zFromBranch;
182185
Blob record, cksum;
183186
qsort(gg.aFile, gg.nFile, sizeof(gg.aFile[0]), mfile_cmp);
184187
blob_zero(&record);
185188
blob_appendf(&record, "C %F\n", gg.zComment);
186189
blob_appendf(&record, "D %s\n", gg.zDate);
@@ -196,11 +199,27 @@
196199
blob_appendf(&record, "P %s", gg.zFrom);
197200
for(i=0; i<gg.nMerge; i++){
198201
blob_appendf(&record, " %s", gg.azMerge[i]);
199202
}
200203
blob_append(&record, "\n", 1);
204
+ zFromBranch = db_text(0, "SELECT brnm FROM xbranch WHERE tname=%Q",
205
+ gg.zFromMark);
206
+ }else{
207
+ zFromBranch = 0;
208
+ }
209
+ if( zFromBranch==0 || strcmp(zFromBranch, gg.zBranch)!=0 ){
210
+ blob_appendf(&record, "T *branch * %F\n", gg.zBranch);
211
+ blob_appendf(&record, "T *sym-%F *\n", gg.zBranch);
212
+ if( zFromBranch ){
213
+ blob_appendf(&record, "T -sym-%F *\n", zFromBranch);
214
+ }
215
+ }
216
+ if( gg.zFrom==0 ){
217
+ blob_appendf(&record, "T +sym-trunk *\n");
201218
}
219
+ db_multi_exec("INSERT INTO xbranch(tname, brnm) VALUES(%Q,%Q)",
220
+ gg.zMark, gg.zBranch);
202221
blob_appendf(&record, "U %F\n", gg.zUser);
203222
md5sum_blob(&record, &cksum);
204223
blob_appendf(&record, "Z %b\n", &cksum);
205224
fast_insert_content(&record, gg.zMark);
206225
blob_reset(&record);
@@ -419,10 +438,12 @@
419438
gg.zDate = db_text(0, "SELECT datetime(%lld, 'unixepoch')", secSince1970);
420439
gg.zDate[10] = 'T';
421440
}else
422441
if( memcmp(zLine, "from ", 5)==0 ){
423442
trim_newline(&zLine[5]);
443
+ fossil_free(gg.zFromMark);
444
+ gg.zFromMark = import_strdup(&zLine[5]);
424445
fossil_free(gg.zFrom);
425446
gg.zFrom = resolve_committish(&zLine[5]);
426447
}else
427448
if( memcmp(zLine, "merge ", 6)==0 ){
428449
trim_newline(&zLine[6]);
@@ -554,12 +575,12 @@
554575
if( forceFlag ) unlink(g.argv[2]);
555576
db_create_repository(g.argv[2]);
556577
db_open_repository(g.argv[2]);
557578
db_open_config(0);
558579
db_multi_exec(
559
- "ATTACH ':memory:' AS mem1;"
560
- "CREATE TABLE mem1.xtag(tname TEXT UNIQUE, trid INT, tuuid TEXT);"
580
+ "CREATE TEMP TABLE xtag(tname TEXT UNIQUE, trid INT, tuuid TEXT);"
581
+ "CREATE TEMP TABLE xbranch(tname TEXT UNIQUE, brnm TEXT);"
561582
);
562583
db_begin_transaction();
563584
db_initial_setup(0, 0, 1);
564585
git_fast_import(pIn);
565586
db_end_transaction(0);
566587
--- src/import.c
+++ src/import.c
@@ -33,11 +33,12 @@
33 char *aData; /* Data content */
34 char *zMark; /* The current mark */
35 char *zDate; /* Date/time stamp */
36 char *zUser; /* User name */
37 char *zComment; /* Comment of a commit */
38 char *zFrom; /* from value */
 
39 int nMerge; /* Number of merge values */
40 int nMergeAlloc; /* Number of slots in azMerge[] */
41 char **azMerge; /* Merge values */
42 int nFile; /* Number of aFile values */
43 int nFileAlloc; /* Number of slots in aFile[] */
@@ -65,10 +66,11 @@
65 fossil_free(gg.zMark); gg.zMark = 0;
66 fossil_free(gg.zDate); gg.zDate = 0;
67 fossil_free(gg.zUser); gg.zUser = 0;
68 fossil_free(gg.zComment); gg.zComment = 0;
69 fossil_free(gg.zFrom); gg.zFrom = 0;
 
70 for(i=0; i<gg.nMerge; i++){
71 fossil_free(gg.azMerge[i]); gg.azMerge[i] = 0;
72 }
73 gg.nMerge = 0;
74 for(i=0; i<gg.nFile; i++){
@@ -177,10 +179,11 @@
177 ** Use data accumulated in gg from a "commit" record to add a new
178 ** manifest artifact to the BLOB table.
179 */
180 static void finish_commit(void){
181 int i;
 
182 Blob record, cksum;
183 qsort(gg.aFile, gg.nFile, sizeof(gg.aFile[0]), mfile_cmp);
184 blob_zero(&record);
185 blob_appendf(&record, "C %F\n", gg.zComment);
186 blob_appendf(&record, "D %s\n", gg.zDate);
@@ -196,11 +199,27 @@
196 blob_appendf(&record, "P %s", gg.zFrom);
197 for(i=0; i<gg.nMerge; i++){
198 blob_appendf(&record, " %s", gg.azMerge[i]);
199 }
200 blob_append(&record, "\n", 1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201 }
 
 
202 blob_appendf(&record, "U %F\n", gg.zUser);
203 md5sum_blob(&record, &cksum);
204 blob_appendf(&record, "Z %b\n", &cksum);
205 fast_insert_content(&record, gg.zMark);
206 blob_reset(&record);
@@ -419,10 +438,12 @@
419 gg.zDate = db_text(0, "SELECT datetime(%lld, 'unixepoch')", secSince1970);
420 gg.zDate[10] = 'T';
421 }else
422 if( memcmp(zLine, "from ", 5)==0 ){
423 trim_newline(&zLine[5]);
 
 
424 fossil_free(gg.zFrom);
425 gg.zFrom = resolve_committish(&zLine[5]);
426 }else
427 if( memcmp(zLine, "merge ", 6)==0 ){
428 trim_newline(&zLine[6]);
@@ -554,12 +575,12 @@
554 if( forceFlag ) unlink(g.argv[2]);
555 db_create_repository(g.argv[2]);
556 db_open_repository(g.argv[2]);
557 db_open_config(0);
558 db_multi_exec(
559 "ATTACH ':memory:' AS mem1;"
560 "CREATE TABLE mem1.xtag(tname TEXT UNIQUE, trid INT, tuuid TEXT);"
561 );
562 db_begin_transaction();
563 db_initial_setup(0, 0, 1);
564 git_fast_import(pIn);
565 db_end_transaction(0);
566
--- src/import.c
+++ src/import.c
@@ -33,11 +33,12 @@
33 char *aData; /* Data content */
34 char *zMark; /* The current mark */
35 char *zDate; /* Date/time stamp */
36 char *zUser; /* User name */
37 char *zComment; /* Comment of a commit */
38 char *zFrom; /* from value as a UUID */
39 char *zFromMark; /* The mark of the "from" field */
40 int nMerge; /* Number of merge values */
41 int nMergeAlloc; /* Number of slots in azMerge[] */
42 char **azMerge; /* Merge values */
43 int nFile; /* Number of aFile values */
44 int nFileAlloc; /* Number of slots in aFile[] */
@@ -65,10 +66,11 @@
66 fossil_free(gg.zMark); gg.zMark = 0;
67 fossil_free(gg.zDate); gg.zDate = 0;
68 fossil_free(gg.zUser); gg.zUser = 0;
69 fossil_free(gg.zComment); gg.zComment = 0;
70 fossil_free(gg.zFrom); gg.zFrom = 0;
71 fossil_free(gg.zFromMark); gg.zFromMark = 0;
72 for(i=0; i<gg.nMerge; i++){
73 fossil_free(gg.azMerge[i]); gg.azMerge[i] = 0;
74 }
75 gg.nMerge = 0;
76 for(i=0; i<gg.nFile; i++){
@@ -177,10 +179,11 @@
179 ** Use data accumulated in gg from a "commit" record to add a new
180 ** manifest artifact to the BLOB table.
181 */
182 static void finish_commit(void){
183 int i;
184 char *zFromBranch;
185 Blob record, cksum;
186 qsort(gg.aFile, gg.nFile, sizeof(gg.aFile[0]), mfile_cmp);
187 blob_zero(&record);
188 blob_appendf(&record, "C %F\n", gg.zComment);
189 blob_appendf(&record, "D %s\n", gg.zDate);
@@ -196,11 +199,27 @@
199 blob_appendf(&record, "P %s", gg.zFrom);
200 for(i=0; i<gg.nMerge; i++){
201 blob_appendf(&record, " %s", gg.azMerge[i]);
202 }
203 blob_append(&record, "\n", 1);
204 zFromBranch = db_text(0, "SELECT brnm FROM xbranch WHERE tname=%Q",
205 gg.zFromMark);
206 }else{
207 zFromBranch = 0;
208 }
209 if( zFromBranch==0 || strcmp(zFromBranch, gg.zBranch)!=0 ){
210 blob_appendf(&record, "T *branch * %F\n", gg.zBranch);
211 blob_appendf(&record, "T *sym-%F *\n", gg.zBranch);
212 if( zFromBranch ){
213 blob_appendf(&record, "T -sym-%F *\n", zFromBranch);
214 }
215 }
216 if( gg.zFrom==0 ){
217 blob_appendf(&record, "T +sym-trunk *\n");
218 }
219 db_multi_exec("INSERT INTO xbranch(tname, brnm) VALUES(%Q,%Q)",
220 gg.zMark, gg.zBranch);
221 blob_appendf(&record, "U %F\n", gg.zUser);
222 md5sum_blob(&record, &cksum);
223 blob_appendf(&record, "Z %b\n", &cksum);
224 fast_insert_content(&record, gg.zMark);
225 blob_reset(&record);
@@ -419,10 +438,12 @@
438 gg.zDate = db_text(0, "SELECT datetime(%lld, 'unixepoch')", secSince1970);
439 gg.zDate[10] = 'T';
440 }else
441 if( memcmp(zLine, "from ", 5)==0 ){
442 trim_newline(&zLine[5]);
443 fossil_free(gg.zFromMark);
444 gg.zFromMark = import_strdup(&zLine[5]);
445 fossil_free(gg.zFrom);
446 gg.zFrom = resolve_committish(&zLine[5]);
447 }else
448 if( memcmp(zLine, "merge ", 6)==0 ){
449 trim_newline(&zLine[6]);
@@ -554,12 +575,12 @@
575 if( forceFlag ) unlink(g.argv[2]);
576 db_create_repository(g.argv[2]);
577 db_open_repository(g.argv[2]);
578 db_open_config(0);
579 db_multi_exec(
580 "CREATE TEMP TABLE xtag(tname TEXT UNIQUE, trid INT, tuuid TEXT);"
581 "CREATE TEMP TABLE xbranch(tname TEXT UNIQUE, brnm TEXT);"
582 );
583 db_begin_transaction();
584 db_initial_setup(0, 0, 1);
585 git_fast_import(pIn);
586 db_end_transaction(0);
587

Keyboard Shortcuts

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