Fossil SCM
Since the mlink table contains entries with pid=0 for non-empty manifests without parents, drop the original non-incremental commit logic by folding the few special cases into the mlink/plink based output.
Commit
fca30736219e8c7a40df379f042956545f2e32ce
Parent
75f02948fa23f6c…
1 file changed
+25
-47
+25
-47
| --- src/export.c | ||
| +++ src/export.c | ||
| @@ -192,17 +192,18 @@ | ||
| 192 | 192 | " ORDER BY mtime ASC", |
| 193 | 193 | TAG_BRANCH |
| 194 | 194 | ); |
| 195 | 195 | db_prepare(&q2, "INSERT INTO oldcommit VALUES (:rid)"); |
| 196 | 196 | while( db_step(&q)==SQLITE_ROW ){ |
| 197 | - Stmt q3; | |
| 197 | + Stmt q3, q4; | |
| 198 | 198 | const char *zSecondsSince1970 = db_column_text(&q, 0); |
| 199 | 199 | int ckinId = db_column_int(&q, 1); |
| 200 | 200 | const char *zComment = db_column_text(&q, 2); |
| 201 | 201 | const char *zUser = db_column_text(&q, 3); |
| 202 | 202 | const char *zBranch = db_column_text(&q, 4); |
| 203 | 203 | char *zBr; |
| 204 | + int parent; | |
| 204 | 205 | |
| 205 | 206 | bag_insert(&vers, ckinId); |
| 206 | 207 | db_bind_int(&q2, ":rid", ckinId); |
| 207 | 208 | db_step(&q2); |
| 208 | 209 | db_reset(&q2); |
| @@ -217,39 +218,13 @@ | ||
| 217 | 218 | print_person(zUser); |
| 218 | 219 | printf(" %s +0000\n", zSecondsSince1970); |
| 219 | 220 | if( zComment==0 ) zComment = "null comment"; |
| 220 | 221 | printf("data %d\n%s\n", (int)strlen(zComment), zComment); |
| 221 | 222 | db_prepare(&q3, "SELECT pid FROM plink WHERE cid=%d AND isprim", ckinId); |
| 222 | - if( db_step(&q3) != SQLITE_ROW ){ | |
| 223 | - const char *zFromType; | |
| 224 | - Manifest *p; | |
| 225 | - ManifestFile *pFile; | |
| 226 | - | |
| 227 | - zFromType = "from"; | |
| 228 | - p = manifest_get(ckinId, CFTYPE_ANY); | |
| 229 | - for(i=0; i<p->nParent; i++){ | |
| 230 | - int pid = fast_uuid_to_rid(p->azParent[i]); | |
| 231 | - if( pid==0 || !bag_find(&vers, pid) ) continue; | |
| 232 | - printf("%s :%d\n", zFromType, COMMITMARK(fast_uuid_to_rid(p->azParent[i]))); | |
| 233 | - zFromType = "merge"; | |
| 234 | - } | |
| 235 | - printf("deleteall\n"); | |
| 236 | - manifest_file_rewind(p); | |
| 237 | - while( (pFile=manifest_file_next(p, 0))!=0 ){ | |
| 238 | - int fid = fast_uuid_to_rid(pFile->zUuid); | |
| 239 | - const char *zPerm = "100644"; | |
| 240 | - if( fid==0 ) continue; | |
| 241 | - if( pFile->zPerm && strstr(pFile->zPerm,"x") ) zPerm = "100755"; | |
| 242 | - if( !bag_find(&blobs, fid) ) continue; | |
| 243 | - printf("M %s :%d %s\n", zPerm, BLOBMARK(fid), pFile->zName); | |
| 244 | - } | |
| 245 | - manifest_cache_insert(p); | |
| 246 | - }else{ | |
| 247 | - Stmt q4; | |
| 248 | - int parent; | |
| 249 | - | |
| 223 | + if( db_step(&q3) == SQLITE_ROW ){ | |
| 250 | 224 | parent = db_column_int(&q3, 0); |
| 225 | + | |
| 251 | 226 | printf("from :%d\n", COMMITMARK(parent)); |
| 252 | 227 | db_prepare(&q4, |
| 253 | 228 | "SELECT pid FROM plink" |
| 254 | 229 | " WHERE cid=%d AND NOT isprim" |
| 255 | 230 | " AND NOT EXISTS(SELECT 1 FROM phantom WHERE rid=pid)" |
| @@ -257,28 +232,31 @@ | ||
| 257 | 232 | ckinId); |
| 258 | 233 | while( db_step(&q4)==SQLITE_ROW ){ |
| 259 | 234 | printf("merge :%d\n", COMMITMARK(db_column_int(&q4,0))); |
| 260 | 235 | } |
| 261 | 236 | db_finalize(&q4); |
| 262 | - | |
| 263 | - db_prepare(&q4, | |
| 264 | - "SELECT filename.name, mlink.fid, mlink.mperm FROM mlink" | |
| 265 | - " JOIN filename ON filename.fnid=mlink.fnid" | |
| 266 | - " WHERE mlink.mid=%d", | |
| 267 | - parent | |
| 268 | - ); | |
| 269 | - while( db_step(&q4)==SQLITE_ROW ){ | |
| 270 | - const char *zName = db_column_text(&q4,0); | |
| 271 | - int zNew = db_column_int(&q4,1); | |
| 272 | - int mPerm = db_column_int(&q4,2); | |
| 273 | - if( zNew==0) | |
| 274 | - printf("D %s\n", zName); | |
| 275 | - else if( bag_find(&blobs, zNew) ) | |
| 276 | - printf("M %s :%d %s\n", mPerm ? "100755" : "100644", BLOBMARK(zNew), zName); | |
| 277 | - } | |
| 278 | - db_finalize(&q4); | |
| 279 | - } | |
| 237 | + }else{ | |
| 238 | + parent = 0; | |
| 239 | + printf("deleteall\n"); | |
| 240 | + } | |
| 241 | + | |
| 242 | + db_prepare(&q4, | |
| 243 | + "SELECT filename.name, mlink.fid, mlink.mperm FROM mlink" | |
| 244 | + " JOIN filename ON filename.fnid=mlink.fnid" | |
| 245 | + " WHERE mlink.mid=%d", | |
| 246 | + parent | |
| 247 | + ); | |
| 248 | + while( db_step(&q4)==SQLITE_ROW ){ | |
| 249 | + const char *zName = db_column_text(&q4,0); | |
| 250 | + int zNew = db_column_int(&q4,1); | |
| 251 | + int mPerm = db_column_int(&q4,2); | |
| 252 | + if( zNew==0) | |
| 253 | + printf("D %s\n", zName); | |
| 254 | + else if( bag_find(&blobs, zNew) ) | |
| 255 | + printf("M %s :%d %s\n", mPerm ? "100755" : "100644", BLOBMARK(zNew), zName); | |
| 256 | + } | |
| 257 | + db_finalize(&q4); | |
| 280 | 258 | db_finalize(&q3); |
| 281 | 259 | printf("\n"); |
| 282 | 260 | } |
| 283 | 261 | db_finalize(&q2); |
| 284 | 262 | db_finalize(&q); |
| 285 | 263 |
| --- src/export.c | |
| +++ src/export.c | |
| @@ -192,17 +192,18 @@ | |
| 192 | " ORDER BY mtime ASC", |
| 193 | TAG_BRANCH |
| 194 | ); |
| 195 | db_prepare(&q2, "INSERT INTO oldcommit VALUES (:rid)"); |
| 196 | while( db_step(&q)==SQLITE_ROW ){ |
| 197 | Stmt q3; |
| 198 | const char *zSecondsSince1970 = db_column_text(&q, 0); |
| 199 | int ckinId = db_column_int(&q, 1); |
| 200 | const char *zComment = db_column_text(&q, 2); |
| 201 | const char *zUser = db_column_text(&q, 3); |
| 202 | const char *zBranch = db_column_text(&q, 4); |
| 203 | char *zBr; |
| 204 | |
| 205 | bag_insert(&vers, ckinId); |
| 206 | db_bind_int(&q2, ":rid", ckinId); |
| 207 | db_step(&q2); |
| 208 | db_reset(&q2); |
| @@ -217,39 +218,13 @@ | |
| 217 | print_person(zUser); |
| 218 | printf(" %s +0000\n", zSecondsSince1970); |
| 219 | if( zComment==0 ) zComment = "null comment"; |
| 220 | printf("data %d\n%s\n", (int)strlen(zComment), zComment); |
| 221 | db_prepare(&q3, "SELECT pid FROM plink WHERE cid=%d AND isprim", ckinId); |
| 222 | if( db_step(&q3) != SQLITE_ROW ){ |
| 223 | const char *zFromType; |
| 224 | Manifest *p; |
| 225 | ManifestFile *pFile; |
| 226 | |
| 227 | zFromType = "from"; |
| 228 | p = manifest_get(ckinId, CFTYPE_ANY); |
| 229 | for(i=0; i<p->nParent; i++){ |
| 230 | int pid = fast_uuid_to_rid(p->azParent[i]); |
| 231 | if( pid==0 || !bag_find(&vers, pid) ) continue; |
| 232 | printf("%s :%d\n", zFromType, COMMITMARK(fast_uuid_to_rid(p->azParent[i]))); |
| 233 | zFromType = "merge"; |
| 234 | } |
| 235 | printf("deleteall\n"); |
| 236 | manifest_file_rewind(p); |
| 237 | while( (pFile=manifest_file_next(p, 0))!=0 ){ |
| 238 | int fid = fast_uuid_to_rid(pFile->zUuid); |
| 239 | const char *zPerm = "100644"; |
| 240 | if( fid==0 ) continue; |
| 241 | if( pFile->zPerm && strstr(pFile->zPerm,"x") ) zPerm = "100755"; |
| 242 | if( !bag_find(&blobs, fid) ) continue; |
| 243 | printf("M %s :%d %s\n", zPerm, BLOBMARK(fid), pFile->zName); |
| 244 | } |
| 245 | manifest_cache_insert(p); |
| 246 | }else{ |
| 247 | Stmt q4; |
| 248 | int parent; |
| 249 | |
| 250 | parent = db_column_int(&q3, 0); |
| 251 | printf("from :%d\n", COMMITMARK(parent)); |
| 252 | db_prepare(&q4, |
| 253 | "SELECT pid FROM plink" |
| 254 | " WHERE cid=%d AND NOT isprim" |
| 255 | " AND NOT EXISTS(SELECT 1 FROM phantom WHERE rid=pid)" |
| @@ -257,28 +232,31 @@ | |
| 257 | ckinId); |
| 258 | while( db_step(&q4)==SQLITE_ROW ){ |
| 259 | printf("merge :%d\n", COMMITMARK(db_column_int(&q4,0))); |
| 260 | } |
| 261 | db_finalize(&q4); |
| 262 | |
| 263 | db_prepare(&q4, |
| 264 | "SELECT filename.name, mlink.fid, mlink.mperm FROM mlink" |
| 265 | " JOIN filename ON filename.fnid=mlink.fnid" |
| 266 | " WHERE mlink.mid=%d", |
| 267 | parent |
| 268 | ); |
| 269 | while( db_step(&q4)==SQLITE_ROW ){ |
| 270 | const char *zName = db_column_text(&q4,0); |
| 271 | int zNew = db_column_int(&q4,1); |
| 272 | int mPerm = db_column_int(&q4,2); |
| 273 | if( zNew==0) |
| 274 | printf("D %s\n", zName); |
| 275 | else if( bag_find(&blobs, zNew) ) |
| 276 | printf("M %s :%d %s\n", mPerm ? "100755" : "100644", BLOBMARK(zNew), zName); |
| 277 | } |
| 278 | db_finalize(&q4); |
| 279 | } |
| 280 | db_finalize(&q3); |
| 281 | printf("\n"); |
| 282 | } |
| 283 | db_finalize(&q2); |
| 284 | db_finalize(&q); |
| 285 |
| --- src/export.c | |
| +++ src/export.c | |
| @@ -192,17 +192,18 @@ | |
| 192 | " ORDER BY mtime ASC", |
| 193 | TAG_BRANCH |
| 194 | ); |
| 195 | db_prepare(&q2, "INSERT INTO oldcommit VALUES (:rid)"); |
| 196 | while( db_step(&q)==SQLITE_ROW ){ |
| 197 | Stmt q3, q4; |
| 198 | const char *zSecondsSince1970 = db_column_text(&q, 0); |
| 199 | int ckinId = db_column_int(&q, 1); |
| 200 | const char *zComment = db_column_text(&q, 2); |
| 201 | const char *zUser = db_column_text(&q, 3); |
| 202 | const char *zBranch = db_column_text(&q, 4); |
| 203 | char *zBr; |
| 204 | int parent; |
| 205 | |
| 206 | bag_insert(&vers, ckinId); |
| 207 | db_bind_int(&q2, ":rid", ckinId); |
| 208 | db_step(&q2); |
| 209 | db_reset(&q2); |
| @@ -217,39 +218,13 @@ | |
| 218 | print_person(zUser); |
| 219 | printf(" %s +0000\n", zSecondsSince1970); |
| 220 | if( zComment==0 ) zComment = "null comment"; |
| 221 | printf("data %d\n%s\n", (int)strlen(zComment), zComment); |
| 222 | db_prepare(&q3, "SELECT pid FROM plink WHERE cid=%d AND isprim", ckinId); |
| 223 | if( db_step(&q3) == SQLITE_ROW ){ |
| 224 | parent = db_column_int(&q3, 0); |
| 225 | |
| 226 | printf("from :%d\n", COMMITMARK(parent)); |
| 227 | db_prepare(&q4, |
| 228 | "SELECT pid FROM plink" |
| 229 | " WHERE cid=%d AND NOT isprim" |
| 230 | " AND NOT EXISTS(SELECT 1 FROM phantom WHERE rid=pid)" |
| @@ -257,28 +232,31 @@ | |
| 232 | ckinId); |
| 233 | while( db_step(&q4)==SQLITE_ROW ){ |
| 234 | printf("merge :%d\n", COMMITMARK(db_column_int(&q4,0))); |
| 235 | } |
| 236 | db_finalize(&q4); |
| 237 | }else{ |
| 238 | parent = 0; |
| 239 | printf("deleteall\n"); |
| 240 | } |
| 241 | |
| 242 | db_prepare(&q4, |
| 243 | "SELECT filename.name, mlink.fid, mlink.mperm FROM mlink" |
| 244 | " JOIN filename ON filename.fnid=mlink.fnid" |
| 245 | " WHERE mlink.mid=%d", |
| 246 | parent |
| 247 | ); |
| 248 | while( db_step(&q4)==SQLITE_ROW ){ |
| 249 | const char *zName = db_column_text(&q4,0); |
| 250 | int zNew = db_column_int(&q4,1); |
| 251 | int mPerm = db_column_int(&q4,2); |
| 252 | if( zNew==0) |
| 253 | printf("D %s\n", zName); |
| 254 | else if( bag_find(&blobs, zNew) ) |
| 255 | printf("M %s :%d %s\n", mPerm ? "100755" : "100644", BLOBMARK(zNew), zName); |
| 256 | } |
| 257 | db_finalize(&q4); |
| 258 | db_finalize(&q3); |
| 259 | printf("\n"); |
| 260 | } |
| 261 | db_finalize(&q2); |
| 262 | db_finalize(&q); |
| 263 |