Fossil SCM

Improved handling of check-in diff display when files have changed names but are otherwise unmodified. Requires a rebuild to get the display exactly right since the MLINK table needs to be recomputed.

drh 2011-06-02 20:49 trunk
Commit 067cda2645c038e5a4b3e6473f8ac558b6554ff3
2 files changed +17 -7 +1 -1
+17 -7
--- src/info.c
+++ src/info.c
@@ -280,18 +280,21 @@
280280
*/
281281
static void append_file_change_line(
282282
const char *zName, /* Name of the file that has changed */
283283
const char *zOld, /* blob.uuid before change. NULL for added files */
284284
const char *zNew, /* blob.uuid after change. NULL for deletes */
285
+ const char *zOldName, /* Prior name. NULL if no name change. */
285286
int showDiff, /* Show edit diffs if true */
286287
int mperm /* EXE permission for zNew */
287288
){
288289
if( !g.okHistory ){
289290
if( zNew==0 ){
290291
@ <p>Deleted %h(zName)</p>
291292
}else if( zOld==0 ){
292293
@ <p>Added %h(zName)</p>
294
+ }else if( zOldName!=0 && fossil_strcmp(zName,zOldName)!=0 ){
295
+ @ <p>Name change from %h(zOldName) to %h(zName)
293296
}else if( fossil_strcmp(zNew, zOld)==0 ){
294297
@ <p>Execute permission %s(mperm?"set":"cleared") for %h(zName)</p>
295298
}else{
296299
@ <p>Changes to %h(zName)</p>
297300
}
@@ -304,10 +307,14 @@
304307
if( zOld && zNew ){
305308
if( fossil_strcmp(zOld, zNew)!=0 ){
306309
@ <p>Modified <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
307310
@ from <a href="%s(g.zTop)/artifact/%s(zOld)">[%S(zOld)]</a>
308311
@ to <a href="%s(g.zTop)/artifact/%s(zNew)">[%S(zNew)].</a>
312
+ }else if( zOldName!=0 && fossil_strcmp(zName,zOldName)!=0 ){
313
+ @ <p>Name change from
314
+ @ from <a href="%s(g.zTop)/finfo?name=%T(zOldName)">%h(zOldName)</a>
315
+ @ to <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>.
309316
}else{
310317
@ <p>Execute permission %s(mperm?"set":"cleared") for
311318
@ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
312319
}
313320
}else if( zOld ){
@@ -319,11 +326,11 @@
319326
}
320327
if( showDiff ){
321328
@ <blockquote><pre>
322329
append_diff(zOld, zNew);
323330
@ </pre></blockquote>
324
- }else if( zOld && zNew ){
331
+ }else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){
325332
@ &nbsp;&nbsp;
326333
@ <a href="%s(g.zTop)/fdiff?v1=%S(zOld)&amp;v2=%S(zNew)">[diff]</a>
327334
}
328335
@ </p>
329336
}
@@ -511,13 +518,15 @@
511518
}
512519
}
513520
@ &nbsp;&nbsp;
514521
@ <a href="%s(g.zTop)/vpatch?from=%S(zParent)&to=%S(zUuid)">[patch]</a><br/>
515522
db_prepare(&q,
516
- "SELECT name, mperm,"
523
+ "SELECT name,"
524
+ " mperm,"
517525
" (SELECT uuid FROM blob WHERE rid=mlink.pid),"
518
- " (SELECT uuid FROM blob WHERE rid=mlink.fid)"
526
+ " (SELECT uuid FROM blob WHERE rid=mlink.fid),"
527
+ " (SELECT name FROM filename WHERE filename.fnid=mlink.pfnid)"
519528
" FROM mlink JOIN filename ON filename.fnid=mlink.fnid"
520529
" WHERE mlink.mid=%d"
521530
" ORDER BY name",
522531
rid
523532
);
@@ -524,11 +533,12 @@
524533
while( db_step(&q)==SQLITE_ROW ){
525534
const char *zName = db_column_text(&q,0);
526535
int mperm = db_column_int(&q, 1);
527536
const char *zOld = db_column_text(&q,2);
528537
const char *zNew = db_column_text(&q,3);
529
- append_file_change_line(zName, zOld, zNew, showDiff, mperm);
538
+ const char *zOldName = db_column_text(&q, 4);
539
+ append_file_change_line(zName, zOld, zNew, zOldName, showDiff, mperm);
530540
}
531541
db_finalize(&q);
532542
}
533543
style_footer();
534544
}
@@ -715,25 +725,25 @@
715725
}else{
716726
cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName);
717727
}
718728
if( cmp<0 ){
719729
append_file_change_line(pFileFrom->zName,
720
- pFileFrom->zUuid, 0, 0, 0);
730
+ pFileFrom->zUuid, 0, 0, 0, 0);
721731
pFileFrom = manifest_file_next(pFrom, 0);
722732
}else if( cmp>0 ){
723733
append_file_change_line(pFileTo->zName,
724
- 0, pFileTo->zUuid, 0,
734
+ 0, pFileTo->zUuid, 0, 0,
725735
manifest_file_mperm(pFileTo));
726736
pFileTo = manifest_file_next(pTo, 0);
727737
}else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){
728738
/* No changes */
729739
pFileFrom = manifest_file_next(pFrom, 0);
730740
pFileTo = manifest_file_next(pTo, 0);
731741
}else{
732742
append_file_change_line(pFileFrom->zName,
733743
pFileFrom->zUuid,
734
- pFileTo->zUuid, showDetail,
744
+ pFileTo->zUuid, 0, showDetail,
735745
manifest_file_mperm(pFileTo));
736746
pFileFrom = manifest_file_next(pFrom, 0);
737747
pFileTo = manifest_file_next(pTo, 0);
738748
}
739749
}
740750
--- src/info.c
+++ src/info.c
@@ -280,18 +280,21 @@
280 */
281 static void append_file_change_line(
282 const char *zName, /* Name of the file that has changed */
283 const char *zOld, /* blob.uuid before change. NULL for added files */
284 const char *zNew, /* blob.uuid after change. NULL for deletes */
 
285 int showDiff, /* Show edit diffs if true */
286 int mperm /* EXE permission for zNew */
287 ){
288 if( !g.okHistory ){
289 if( zNew==0 ){
290 @ <p>Deleted %h(zName)</p>
291 }else if( zOld==0 ){
292 @ <p>Added %h(zName)</p>
 
 
293 }else if( fossil_strcmp(zNew, zOld)==0 ){
294 @ <p>Execute permission %s(mperm?"set":"cleared") for %h(zName)</p>
295 }else{
296 @ <p>Changes to %h(zName)</p>
297 }
@@ -304,10 +307,14 @@
304 if( zOld && zNew ){
305 if( fossil_strcmp(zOld, zNew)!=0 ){
306 @ <p>Modified <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
307 @ from <a href="%s(g.zTop)/artifact/%s(zOld)">[%S(zOld)]</a>
308 @ to <a href="%s(g.zTop)/artifact/%s(zNew)">[%S(zNew)].</a>
 
 
 
 
309 }else{
310 @ <p>Execute permission %s(mperm?"set":"cleared") for
311 @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
312 }
313 }else if( zOld ){
@@ -319,11 +326,11 @@
319 }
320 if( showDiff ){
321 @ <blockquote><pre>
322 append_diff(zOld, zNew);
323 @ </pre></blockquote>
324 }else if( zOld && zNew ){
325 @ &nbsp;&nbsp;
326 @ <a href="%s(g.zTop)/fdiff?v1=%S(zOld)&amp;v2=%S(zNew)">[diff]</a>
327 }
328 @ </p>
329 }
@@ -511,13 +518,15 @@
511 }
512 }
513 @ &nbsp;&nbsp;
514 @ <a href="%s(g.zTop)/vpatch?from=%S(zParent)&to=%S(zUuid)">[patch]</a><br/>
515 db_prepare(&q,
516 "SELECT name, mperm,"
 
517 " (SELECT uuid FROM blob WHERE rid=mlink.pid),"
518 " (SELECT uuid FROM blob WHERE rid=mlink.fid)"
 
519 " FROM mlink JOIN filename ON filename.fnid=mlink.fnid"
520 " WHERE mlink.mid=%d"
521 " ORDER BY name",
522 rid
523 );
@@ -524,11 +533,12 @@
524 while( db_step(&q)==SQLITE_ROW ){
525 const char *zName = db_column_text(&q,0);
526 int mperm = db_column_int(&q, 1);
527 const char *zOld = db_column_text(&q,2);
528 const char *zNew = db_column_text(&q,3);
529 append_file_change_line(zName, zOld, zNew, showDiff, mperm);
 
530 }
531 db_finalize(&q);
532 }
533 style_footer();
534 }
@@ -715,25 +725,25 @@
715 }else{
716 cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName);
717 }
718 if( cmp<0 ){
719 append_file_change_line(pFileFrom->zName,
720 pFileFrom->zUuid, 0, 0, 0);
721 pFileFrom = manifest_file_next(pFrom, 0);
722 }else if( cmp>0 ){
723 append_file_change_line(pFileTo->zName,
724 0, pFileTo->zUuid, 0,
725 manifest_file_mperm(pFileTo));
726 pFileTo = manifest_file_next(pTo, 0);
727 }else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){
728 /* No changes */
729 pFileFrom = manifest_file_next(pFrom, 0);
730 pFileTo = manifest_file_next(pTo, 0);
731 }else{
732 append_file_change_line(pFileFrom->zName,
733 pFileFrom->zUuid,
734 pFileTo->zUuid, showDetail,
735 manifest_file_mperm(pFileTo));
736 pFileFrom = manifest_file_next(pFrom, 0);
737 pFileTo = manifest_file_next(pTo, 0);
738 }
739 }
740
--- src/info.c
+++ src/info.c
@@ -280,18 +280,21 @@
280 */
281 static void append_file_change_line(
282 const char *zName, /* Name of the file that has changed */
283 const char *zOld, /* blob.uuid before change. NULL for added files */
284 const char *zNew, /* blob.uuid after change. NULL for deletes */
285 const char *zOldName, /* Prior name. NULL if no name change. */
286 int showDiff, /* Show edit diffs if true */
287 int mperm /* EXE permission for zNew */
288 ){
289 if( !g.okHistory ){
290 if( zNew==0 ){
291 @ <p>Deleted %h(zName)</p>
292 }else if( zOld==0 ){
293 @ <p>Added %h(zName)</p>
294 }else if( zOldName!=0 && fossil_strcmp(zName,zOldName)!=0 ){
295 @ <p>Name change from %h(zOldName) to %h(zName)
296 }else if( fossil_strcmp(zNew, zOld)==0 ){
297 @ <p>Execute permission %s(mperm?"set":"cleared") for %h(zName)</p>
298 }else{
299 @ <p>Changes to %h(zName)</p>
300 }
@@ -304,10 +307,14 @@
307 if( zOld && zNew ){
308 if( fossil_strcmp(zOld, zNew)!=0 ){
309 @ <p>Modified <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
310 @ from <a href="%s(g.zTop)/artifact/%s(zOld)">[%S(zOld)]</a>
311 @ to <a href="%s(g.zTop)/artifact/%s(zNew)">[%S(zNew)].</a>
312 }else if( zOldName!=0 && fossil_strcmp(zName,zOldName)!=0 ){
313 @ <p>Name change from
314 @ from <a href="%s(g.zTop)/finfo?name=%T(zOldName)">%h(zOldName)</a>
315 @ to <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>.
316 }else{
317 @ <p>Execute permission %s(mperm?"set":"cleared") for
318 @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a>
319 }
320 }else if( zOld ){
@@ -319,11 +326,11 @@
326 }
327 if( showDiff ){
328 @ <blockquote><pre>
329 append_diff(zOld, zNew);
330 @ </pre></blockquote>
331 }else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){
332 @ &nbsp;&nbsp;
333 @ <a href="%s(g.zTop)/fdiff?v1=%S(zOld)&amp;v2=%S(zNew)">[diff]</a>
334 }
335 @ </p>
336 }
@@ -511,13 +518,15 @@
518 }
519 }
520 @ &nbsp;&nbsp;
521 @ <a href="%s(g.zTop)/vpatch?from=%S(zParent)&to=%S(zUuid)">[patch]</a><br/>
522 db_prepare(&q,
523 "SELECT name,"
524 " mperm,"
525 " (SELECT uuid FROM blob WHERE rid=mlink.pid),"
526 " (SELECT uuid FROM blob WHERE rid=mlink.fid),"
527 " (SELECT name FROM filename WHERE filename.fnid=mlink.pfnid)"
528 " FROM mlink JOIN filename ON filename.fnid=mlink.fnid"
529 " WHERE mlink.mid=%d"
530 " ORDER BY name",
531 rid
532 );
@@ -524,11 +533,12 @@
533 while( db_step(&q)==SQLITE_ROW ){
534 const char *zName = db_column_text(&q,0);
535 int mperm = db_column_int(&q, 1);
536 const char *zOld = db_column_text(&q,2);
537 const char *zNew = db_column_text(&q,3);
538 const char *zOldName = db_column_text(&q, 4);
539 append_file_change_line(zName, zOld, zNew, zOldName, showDiff, mperm);
540 }
541 db_finalize(&q);
542 }
543 style_footer();
544 }
@@ -715,25 +725,25 @@
725 }else{
726 cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName);
727 }
728 if( cmp<0 ){
729 append_file_change_line(pFileFrom->zName,
730 pFileFrom->zUuid, 0, 0, 0, 0);
731 pFileFrom = manifest_file_next(pFrom, 0);
732 }else if( cmp>0 ){
733 append_file_change_line(pFileTo->zName,
734 0, pFileTo->zUuid, 0, 0,
735 manifest_file_mperm(pFileTo));
736 pFileTo = manifest_file_next(pTo, 0);
737 }else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){
738 /* No changes */
739 pFileFrom = manifest_file_next(pFrom, 0);
740 pFileTo = manifest_file_next(pTo, 0);
741 }else{
742 append_file_change_line(pFileFrom->zName,
743 pFileFrom->zUuid,
744 pFileTo->zUuid, 0, showDetail,
745 manifest_file_mperm(pFileTo));
746 pFileFrom = manifest_file_next(pFrom, 0);
747 pFileTo = manifest_file_next(pTo, 0);
748 }
749 }
750
+1 -1
--- src/manifest.c
+++ src/manifest.c
@@ -1323,11 +1323,11 @@
13231323
if( pChildFile ){
13241324
add_one_mlink(cid, 0, pChildFile->zUuid, pChildFile->zName, 0,
13251325
isPublic, manifest_file_mperm(pChildFile));
13261326
}
13271327
}
1328
- }else if( pChild->zBaseline==0 ){
1328
+ }else if( pChild->zBaseline==0 && pParent->zBaseline!=0 ){
13291329
/* Parent is a delta but pChild is a baseline. Look for files that are
13301330
** present in pParent but which are missing from pChild and mark them
13311331
** has having been deleted. */
13321332
manifest_file_rewind(pParent);
13331333
while( (pParentFile = manifest_file_next(pParent,0))!=0 ){
13341334
--- src/manifest.c
+++ src/manifest.c
@@ -1323,11 +1323,11 @@
1323 if( pChildFile ){
1324 add_one_mlink(cid, 0, pChildFile->zUuid, pChildFile->zName, 0,
1325 isPublic, manifest_file_mperm(pChildFile));
1326 }
1327 }
1328 }else if( pChild->zBaseline==0 ){
1329 /* Parent is a delta but pChild is a baseline. Look for files that are
1330 ** present in pParent but which are missing from pChild and mark them
1331 ** has having been deleted. */
1332 manifest_file_rewind(pParent);
1333 while( (pParentFile = manifest_file_next(pParent,0))!=0 ){
1334
--- src/manifest.c
+++ src/manifest.c
@@ -1323,11 +1323,11 @@
1323 if( pChildFile ){
1324 add_one_mlink(cid, 0, pChildFile->zUuid, pChildFile->zName, 0,
1325 isPublic, manifest_file_mperm(pChildFile));
1326 }
1327 }
1328 }else if( pChild->zBaseline==0 && pParent->zBaseline!=0 ){
1329 /* Parent is a delta but pChild is a baseline. Look for files that are
1330 ** present in pParent but which are missing from pChild and mark them
1331 ** has having been deleted. */
1332 manifest_file_rewind(pParent);
1333 while( (pParentFile = manifest_file_next(pParent,0))!=0 ){
1334

Keyboard Shortcuts

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