Fossil SCM

Fix the git-fast-export generator so that it does not make links to files that for some reason or another do not exist in the repository. Also fix some stylistic problems in the export code.

drh 2012-11-19 16:41 trunk
Commit c3bfb0083a56efe850b3ca1cd539b85003195d5f
1 file changed +11 -3
+11 -3
--- src/export.c
+++ src/export.c
@@ -166,16 +166,19 @@
166166
167167
/* Step 1: Generate "blob" records for every artifact that is part
168168
** of a check-in
169169
*/
170170
fossil_binary_mode(stdout);
171
- db_multi_exec("CREATE TEMPORARY TABLE newblob(rid INTEGER KEY, srcid INTEGER)");
171
+ db_multi_exec("CREATE TEMP TABLE newblob(rid INTEGER KEY, srcid INTEGER)");
172172
db_multi_exec("CREATE INDEX newblob_src ON newblob(srcid)");
173173
db_multi_exec(
174174
"INSERT INTO newblob"
175175
" SELECT DISTINCT fid,"
176
- " CASE WHEN EXISTS(SELECT 1 FROM delta WHERE rid=fid AND NOT EXISTS(SELECT 1 FROM oldblob WHERE srcid=fid))"
176
+ " CASE WHEN EXISTS(SELECT 1 FROM delta"
177
+ " WHERE rid=fid"
178
+ " AND NOT EXISTS(SELECT 1 FROM oldblob"
179
+ " WHERE srcid=fid))"
177180
" THEN (SELECT srcid FROM delta WHERE rid=fid)"
178181
" ELSE 0"
179182
" END"
180183
" FROM mlink"
181184
" WHERE fid>0 AND NOT EXISTS(SELECT 1 FROM oldblob WHERE rid=fid)");
@@ -247,11 +250,16 @@
247250
printf("committer");
248251
print_person(zUser);
249252
printf(" %s +0000\n", zSecondsSince1970);
250253
if( zComment==0 ) zComment = "null comment";
251254
printf("data %d\n%s\n", (int)strlen(zComment), zComment);
252
- db_prepare(&q3, "SELECT pid FROM plink WHERE cid=%d AND isprim", ckinId);
255
+ db_prepare(&q3,
256
+ "SELECT pid FROM plink"
257
+ " WHERE cid=%d AND isprim"
258
+ " AND pid IN (SELECT objid FROM event)",
259
+ ckinId
260
+ );
253261
if( db_step(&q3) == SQLITE_ROW ){
254262
printf("from :%d\n", COMMITMARK(db_column_int(&q3, 0)));
255263
db_prepare(&q4,
256264
"SELECT pid FROM plink"
257265
" WHERE cid=%d AND NOT isprim"
258266
--- src/export.c
+++ src/export.c
@@ -166,16 +166,19 @@
166
167 /* Step 1: Generate "blob" records for every artifact that is part
168 ** of a check-in
169 */
170 fossil_binary_mode(stdout);
171 db_multi_exec("CREATE TEMPORARY TABLE newblob(rid INTEGER KEY, srcid INTEGER)");
172 db_multi_exec("CREATE INDEX newblob_src ON newblob(srcid)");
173 db_multi_exec(
174 "INSERT INTO newblob"
175 " SELECT DISTINCT fid,"
176 " CASE WHEN EXISTS(SELECT 1 FROM delta WHERE rid=fid AND NOT EXISTS(SELECT 1 FROM oldblob WHERE srcid=fid))"
 
 
 
177 " THEN (SELECT srcid FROM delta WHERE rid=fid)"
178 " ELSE 0"
179 " END"
180 " FROM mlink"
181 " WHERE fid>0 AND NOT EXISTS(SELECT 1 FROM oldblob WHERE rid=fid)");
@@ -247,11 +250,16 @@
247 printf("committer");
248 print_person(zUser);
249 printf(" %s +0000\n", zSecondsSince1970);
250 if( zComment==0 ) zComment = "null comment";
251 printf("data %d\n%s\n", (int)strlen(zComment), zComment);
252 db_prepare(&q3, "SELECT pid FROM plink WHERE cid=%d AND isprim", ckinId);
 
 
 
 
 
253 if( db_step(&q3) == SQLITE_ROW ){
254 printf("from :%d\n", COMMITMARK(db_column_int(&q3, 0)));
255 db_prepare(&q4,
256 "SELECT pid FROM plink"
257 " WHERE cid=%d AND NOT isprim"
258
--- src/export.c
+++ src/export.c
@@ -166,16 +166,19 @@
166
167 /* Step 1: Generate "blob" records for every artifact that is part
168 ** of a check-in
169 */
170 fossil_binary_mode(stdout);
171 db_multi_exec("CREATE TEMP TABLE newblob(rid INTEGER KEY, srcid INTEGER)");
172 db_multi_exec("CREATE INDEX newblob_src ON newblob(srcid)");
173 db_multi_exec(
174 "INSERT INTO newblob"
175 " SELECT DISTINCT fid,"
176 " CASE WHEN EXISTS(SELECT 1 FROM delta"
177 " WHERE rid=fid"
178 " AND NOT EXISTS(SELECT 1 FROM oldblob"
179 " WHERE srcid=fid))"
180 " THEN (SELECT srcid FROM delta WHERE rid=fid)"
181 " ELSE 0"
182 " END"
183 " FROM mlink"
184 " WHERE fid>0 AND NOT EXISTS(SELECT 1 FROM oldblob WHERE rid=fid)");
@@ -247,11 +250,16 @@
250 printf("committer");
251 print_person(zUser);
252 printf(" %s +0000\n", zSecondsSince1970);
253 if( zComment==0 ) zComment = "null comment";
254 printf("data %d\n%s\n", (int)strlen(zComment), zComment);
255 db_prepare(&q3,
256 "SELECT pid FROM plink"
257 " WHERE cid=%d AND isprim"
258 " AND pid IN (SELECT objid FROM event)",
259 ckinId
260 );
261 if( db_step(&q3) == SQLITE_ROW ){
262 printf("from :%d\n", COMMITMARK(db_column_int(&q3, 0)));
263 db_prepare(&q4,
264 "SELECT pid FROM plink"
265 " WHERE cid=%d AND NOT isprim"
266

Keyboard Shortcuts

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