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.
Commit
c3bfb0083a56efe850b3ca1cd539b85003195d5f
Parent
90676f48f09d191…
1 file changed
+11
-3
+11
-3
| --- src/export.c | ||
| +++ src/export.c | ||
| @@ -166,16 +166,19 @@ | ||
| 166 | 166 | |
| 167 | 167 | /* Step 1: Generate "blob" records for every artifact that is part |
| 168 | 168 | ** of a check-in |
| 169 | 169 | */ |
| 170 | 170 | 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)"); | |
| 172 | 172 | db_multi_exec("CREATE INDEX newblob_src ON newblob(srcid)"); |
| 173 | 173 | db_multi_exec( |
| 174 | 174 | "INSERT INTO newblob" |
| 175 | 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))" | |
| 176 | + " CASE WHEN EXISTS(SELECT 1 FROM delta" | |
| 177 | + " WHERE rid=fid" | |
| 178 | + " AND NOT EXISTS(SELECT 1 FROM oldblob" | |
| 179 | + " WHERE srcid=fid))" | |
| 177 | 180 | " THEN (SELECT srcid FROM delta WHERE rid=fid)" |
| 178 | 181 | " ELSE 0" |
| 179 | 182 | " END" |
| 180 | 183 | " FROM mlink" |
| 181 | 184 | " WHERE fid>0 AND NOT EXISTS(SELECT 1 FROM oldblob WHERE rid=fid)"); |
| @@ -247,11 +250,16 @@ | ||
| 247 | 250 | printf("committer"); |
| 248 | 251 | print_person(zUser); |
| 249 | 252 | printf(" %s +0000\n", zSecondsSince1970); |
| 250 | 253 | if( zComment==0 ) zComment = "null comment"; |
| 251 | 254 | 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 | + ); | |
| 253 | 261 | if( db_step(&q3) == SQLITE_ROW ){ |
| 254 | 262 | printf("from :%d\n", COMMITMARK(db_column_int(&q3, 0))); |
| 255 | 263 | db_prepare(&q4, |
| 256 | 264 | "SELECT pid FROM plink" |
| 257 | 265 | " WHERE cid=%d AND NOT isprim" |
| 258 | 266 |
| --- 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 |