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.

joerg 2011-07-22 19:38 trunk
Commit fca30736219e8c7a40df379f042956545f2e32ce
1 file changed +25 -47
+25 -47
--- src/export.c
+++ src/export.c
@@ -192,17 +192,18 @@
192192
" ORDER BY mtime ASC",
193193
TAG_BRANCH
194194
);
195195
db_prepare(&q2, "INSERT INTO oldcommit VALUES (:rid)");
196196
while( db_step(&q)==SQLITE_ROW ){
197
- Stmt q3;
197
+ Stmt q3, q4;
198198
const char *zSecondsSince1970 = db_column_text(&q, 0);
199199
int ckinId = db_column_int(&q, 1);
200200
const char *zComment = db_column_text(&q, 2);
201201
const char *zUser = db_column_text(&q, 3);
202202
const char *zBranch = db_column_text(&q, 4);
203203
char *zBr;
204
+ int parent;
204205
205206
bag_insert(&vers, ckinId);
206207
db_bind_int(&q2, ":rid", ckinId);
207208
db_step(&q2);
208209
db_reset(&q2);
@@ -217,39 +218,13 @@
217218
print_person(zUser);
218219
printf(" %s +0000\n", zSecondsSince1970);
219220
if( zComment==0 ) zComment = "null comment";
220221
printf("data %d\n%s\n", (int)strlen(zComment), zComment);
221222
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 ){
250224
parent = db_column_int(&q3, 0);
225
+
251226
printf("from :%d\n", COMMITMARK(parent));
252227
db_prepare(&q4,
253228
"SELECT pid FROM plink"
254229
" WHERE cid=%d AND NOT isprim"
255230
" AND NOT EXISTS(SELECT 1 FROM phantom WHERE rid=pid)"
@@ -257,28 +232,31 @@
257232
ckinId);
258233
while( db_step(&q4)==SQLITE_ROW ){
259234
printf("merge :%d\n", COMMITMARK(db_column_int(&q4,0)));
260235
}
261236
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);
280258
db_finalize(&q3);
281259
printf("\n");
282260
}
283261
db_finalize(&q2);
284262
db_finalize(&q);
285263
--- 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

Keyboard Shortcuts

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