Fossil SCM

Improvements to the the /finfo ancestry calculation.

drh 2015-01-27 02:08 trunk
Commit 116921fd86659636a379315dfa30ff7ed4978e18
1 file changed +15 -16
+15 -16
--- src/finfo.c
+++ src/finfo.c
@@ -294,11 +294,11 @@
294294
const char *zA;
295295
const char *zB;
296296
int n;
297297
int baseCheckin;
298298
int fnid;
299
-
299
+ Bag ancestor;
300300
Blob title;
301301
Blob sql;
302302
HQuery url;
303303
GraphContext *pGraph;
304304
int brBg = P("brbg")!=0;
@@ -320,10 +320,18 @@
320320
if( fnid==0 ){
321321
@ No such file: %h(zFilename)
322322
style_footer();
323323
return;
324324
}
325
+ if( baseCheckin ){
326
+ int baseFid = db_int(0,
327
+ "SELECT fid FROM mlink WHERE fnid=%d AND mid=%d",
328
+ fnid, baseCheckin
329
+ );
330
+ bag_init(&ancestor);
331
+ if( baseFid ) bag_insert(&ancestor, baseFid);
332
+ }
325333
url_add_parameter(&url, "name", zFilename);
326334
blob_zero(&sql);
327335
blob_append_sql(&sql,
328336
"SELECT"
329337
" datetime(min(event.mtime)%s)," /* Date of change */
@@ -342,24 +350,10 @@
342350
" FROM mlink, event"
343351
" WHERE mlink.fnid=%d"
344352
" AND event.objid=mlink.mid",
345353
timeline_utc(), TAG_BRANCH, fnid
346354
);
347
- if( baseCheckin ){
348
- blob_append_sql(&sql,
349
- " AND mlink.fid IN ("
350
- " WITH RECURSIVE x(fid) AS ("
351
- " SELECT mlink.fid FROM mlink"
352
- " WHERE mlink.mid=%d AND mlink.fnid=%d"
353
- " UNION"
354
- " SELECT mlink.pid FROM mlink, x"
355
- " WHERE mlink.fid=x.fid AND mlink.pid>0 AND +mlink.fnid=%d"
356
- " ) SELECT fid FROM x)"
357
- " AND event.mtime<=(SELECT mtime FROM event WHERE objid=%d)",
358
- baseCheckin, fnid, fnid, baseCheckin
359
- );
360
- }
361355
if( (zA = P("a"))!=0 ){
362356
blob_append_sql(&sql, " AND event.mtime>=julianday('%q')", zA);
363357
url_add_parameter(&url, "a", zA);
364358
}
365359
if( (zB = P("b"))!=0 ){
@@ -416,20 +410,24 @@
416410
int gidx;
417411
char zTime[10];
418412
int nParent = 0;
419413
int aParent[GR_MAX_RAIL];
420414
static Stmt qparent;
415
+
416
+ if( baseCheckin && frid && !bag_find(&ancestor, frid) ) continue;
421417
db_static_prepare(&qparent,
422418
"SELECT DISTINCT pid FROM mlink"
423419
" WHERE fid=:fid AND mid=:mid AND pid>0 AND fnid=:fnid"
424420
" ORDER BY isaux /*sort*/"
425421
);
426422
db_bind_int(&qparent, ":fid", frid);
427423
db_bind_int(&qparent, ":mid", fmid);
428424
db_bind_int(&qparent, ":fnid", fnid);
429425
while( db_step(&qparent)==SQLITE_ROW && nParent<ArraySize(aParent) ){
430
- aParent[nParent++] = db_column_int(&qparent, 0);
426
+ aParent[nParent] = db_column_int(&qparent, 0);
427
+ if( baseCheckin ) bag_insert(&ancestor, aParent[nParent]);
428
+ nParent++;
431429
}
432430
db_reset(&qparent);
433431
if( zBr==0 ) zBr = "trunk";
434432
if( uBg ){
435433
zBgClr = hash_color(zUser);
@@ -509,10 +507,11 @@
509507
@ parents=%d(aParent[0])
510508
for(ii=1; ii<nParent; ii++){
511509
@ %d(aParent[ii])
512510
}
513511
}
512
+ @ %z(href("%R/finfo?name=%T&ci=%s&debug=1",zFilename,zCkin))[ancestry]</a>
514513
}
515514
tag_private_status(frid);
516515
@ </td></tr>
517516
}
518517
db_finalize(&q);
519518
--- src/finfo.c
+++ src/finfo.c
@@ -294,11 +294,11 @@
294 const char *zA;
295 const char *zB;
296 int n;
297 int baseCheckin;
298 int fnid;
299
300 Blob title;
301 Blob sql;
302 HQuery url;
303 GraphContext *pGraph;
304 int brBg = P("brbg")!=0;
@@ -320,10 +320,18 @@
320 if( fnid==0 ){
321 @ No such file: %h(zFilename)
322 style_footer();
323 return;
324 }
 
 
 
 
 
 
 
 
325 url_add_parameter(&url, "name", zFilename);
326 blob_zero(&sql);
327 blob_append_sql(&sql,
328 "SELECT"
329 " datetime(min(event.mtime)%s)," /* Date of change */
@@ -342,24 +350,10 @@
342 " FROM mlink, event"
343 " WHERE mlink.fnid=%d"
344 " AND event.objid=mlink.mid",
345 timeline_utc(), TAG_BRANCH, fnid
346 );
347 if( baseCheckin ){
348 blob_append_sql(&sql,
349 " AND mlink.fid IN ("
350 " WITH RECURSIVE x(fid) AS ("
351 " SELECT mlink.fid FROM mlink"
352 " WHERE mlink.mid=%d AND mlink.fnid=%d"
353 " UNION"
354 " SELECT mlink.pid FROM mlink, x"
355 " WHERE mlink.fid=x.fid AND mlink.pid>0 AND +mlink.fnid=%d"
356 " ) SELECT fid FROM x)"
357 " AND event.mtime<=(SELECT mtime FROM event WHERE objid=%d)",
358 baseCheckin, fnid, fnid, baseCheckin
359 );
360 }
361 if( (zA = P("a"))!=0 ){
362 blob_append_sql(&sql, " AND event.mtime>=julianday('%q')", zA);
363 url_add_parameter(&url, "a", zA);
364 }
365 if( (zB = P("b"))!=0 ){
@@ -416,20 +410,24 @@
416 int gidx;
417 char zTime[10];
418 int nParent = 0;
419 int aParent[GR_MAX_RAIL];
420 static Stmt qparent;
 
 
421 db_static_prepare(&qparent,
422 "SELECT DISTINCT pid FROM mlink"
423 " WHERE fid=:fid AND mid=:mid AND pid>0 AND fnid=:fnid"
424 " ORDER BY isaux /*sort*/"
425 );
426 db_bind_int(&qparent, ":fid", frid);
427 db_bind_int(&qparent, ":mid", fmid);
428 db_bind_int(&qparent, ":fnid", fnid);
429 while( db_step(&qparent)==SQLITE_ROW && nParent<ArraySize(aParent) ){
430 aParent[nParent++] = db_column_int(&qparent, 0);
 
 
431 }
432 db_reset(&qparent);
433 if( zBr==0 ) zBr = "trunk";
434 if( uBg ){
435 zBgClr = hash_color(zUser);
@@ -509,10 +507,11 @@
509 @ parents=%d(aParent[0])
510 for(ii=1; ii<nParent; ii++){
511 @ %d(aParent[ii])
512 }
513 }
 
514 }
515 tag_private_status(frid);
516 @ </td></tr>
517 }
518 db_finalize(&q);
519
--- src/finfo.c
+++ src/finfo.c
@@ -294,11 +294,11 @@
294 const char *zA;
295 const char *zB;
296 int n;
297 int baseCheckin;
298 int fnid;
299 Bag ancestor;
300 Blob title;
301 Blob sql;
302 HQuery url;
303 GraphContext *pGraph;
304 int brBg = P("brbg")!=0;
@@ -320,10 +320,18 @@
320 if( fnid==0 ){
321 @ No such file: %h(zFilename)
322 style_footer();
323 return;
324 }
325 if( baseCheckin ){
326 int baseFid = db_int(0,
327 "SELECT fid FROM mlink WHERE fnid=%d AND mid=%d",
328 fnid, baseCheckin
329 );
330 bag_init(&ancestor);
331 if( baseFid ) bag_insert(&ancestor, baseFid);
332 }
333 url_add_parameter(&url, "name", zFilename);
334 blob_zero(&sql);
335 blob_append_sql(&sql,
336 "SELECT"
337 " datetime(min(event.mtime)%s)," /* Date of change */
@@ -342,24 +350,10 @@
350 " FROM mlink, event"
351 " WHERE mlink.fnid=%d"
352 " AND event.objid=mlink.mid",
353 timeline_utc(), TAG_BRANCH, fnid
354 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
355 if( (zA = P("a"))!=0 ){
356 blob_append_sql(&sql, " AND event.mtime>=julianday('%q')", zA);
357 url_add_parameter(&url, "a", zA);
358 }
359 if( (zB = P("b"))!=0 ){
@@ -416,20 +410,24 @@
410 int gidx;
411 char zTime[10];
412 int nParent = 0;
413 int aParent[GR_MAX_RAIL];
414 static Stmt qparent;
415
416 if( baseCheckin && frid && !bag_find(&ancestor, frid) ) continue;
417 db_static_prepare(&qparent,
418 "SELECT DISTINCT pid FROM mlink"
419 " WHERE fid=:fid AND mid=:mid AND pid>0 AND fnid=:fnid"
420 " ORDER BY isaux /*sort*/"
421 );
422 db_bind_int(&qparent, ":fid", frid);
423 db_bind_int(&qparent, ":mid", fmid);
424 db_bind_int(&qparent, ":fnid", fnid);
425 while( db_step(&qparent)==SQLITE_ROW && nParent<ArraySize(aParent) ){
426 aParent[nParent] = db_column_int(&qparent, 0);
427 if( baseCheckin ) bag_insert(&ancestor, aParent[nParent]);
428 nParent++;
429 }
430 db_reset(&qparent);
431 if( zBr==0 ) zBr = "trunk";
432 if( uBg ){
433 zBgClr = hash_color(zUser);
@@ -509,10 +507,11 @@
507 @ parents=%d(aParent[0])
508 for(ii=1; ii<nParent; ii++){
509 @ %d(aParent[ii])
510 }
511 }
512 @ %z(href("%R/finfo?name=%T&ci=%s&debug=1",zFilename,zCkin))[ancestry]</a>
513 }
514 tag_private_status(frid);
515 @ </td></tr>
516 }
517 db_finalize(&q);
518

Keyboard Shortcuts

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