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.
Commit
067cda2645c038e5a4b3e6473f8ac558b6554ff3
Parent
74ecc4d646ba781…
2 files changed
+17
-7
+1
-1
+17
-7
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -280,18 +280,21 @@ | ||
| 280 | 280 | */ |
| 281 | 281 | static void append_file_change_line( |
| 282 | 282 | const char *zName, /* Name of the file that has changed */ |
| 283 | 283 | const char *zOld, /* blob.uuid before change. NULL for added files */ |
| 284 | 284 | const char *zNew, /* blob.uuid after change. NULL for deletes */ |
| 285 | + const char *zOldName, /* Prior name. NULL if no name change. */ | |
| 285 | 286 | int showDiff, /* Show edit diffs if true */ |
| 286 | 287 | int mperm /* EXE permission for zNew */ |
| 287 | 288 | ){ |
| 288 | 289 | if( !g.okHistory ){ |
| 289 | 290 | if( zNew==0 ){ |
| 290 | 291 | @ <p>Deleted %h(zName)</p> |
| 291 | 292 | }else if( zOld==0 ){ |
| 292 | 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) | |
| 293 | 296 | }else if( fossil_strcmp(zNew, zOld)==0 ){ |
| 294 | 297 | @ <p>Execute permission %s(mperm?"set":"cleared") for %h(zName)</p> |
| 295 | 298 | }else{ |
| 296 | 299 | @ <p>Changes to %h(zName)</p> |
| 297 | 300 | } |
| @@ -304,10 +307,14 @@ | ||
| 304 | 307 | if( zOld && zNew ){ |
| 305 | 308 | if( fossil_strcmp(zOld, zNew)!=0 ){ |
| 306 | 309 | @ <p>Modified <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a> |
| 307 | 310 | @ from <a href="%s(g.zTop)/artifact/%s(zOld)">[%S(zOld)]</a> |
| 308 | 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>. | |
| 309 | 316 | }else{ |
| 310 | 317 | @ <p>Execute permission %s(mperm?"set":"cleared") for |
| 311 | 318 | @ <a href="%s(g.zTop)/finfo?name=%T(zName)">%h(zName)</a> |
| 312 | 319 | } |
| 313 | 320 | }else if( zOld ){ |
| @@ -319,11 +326,11 @@ | ||
| 319 | 326 | } |
| 320 | 327 | if( showDiff ){ |
| 321 | 328 | @ <blockquote><pre> |
| 322 | 329 | append_diff(zOld, zNew); |
| 323 | 330 | @ </pre></blockquote> |
| 324 | - }else if( zOld && zNew ){ | |
| 331 | + }else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){ | |
| 325 | 332 | @ |
| 326 | 333 | @ <a href="%s(g.zTop)/fdiff?v1=%S(zOld)&v2=%S(zNew)">[diff]</a> |
| 327 | 334 | } |
| 328 | 335 | @ </p> |
| 329 | 336 | } |
| @@ -511,13 +518,15 @@ | ||
| 511 | 518 | } |
| 512 | 519 | } |
| 513 | 520 | @ |
| 514 | 521 | @ <a href="%s(g.zTop)/vpatch?from=%S(zParent)&to=%S(zUuid)">[patch]</a><br/> |
| 515 | 522 | db_prepare(&q, |
| 516 | - "SELECT name, mperm," | |
| 523 | + "SELECT name," | |
| 524 | + " mperm," | |
| 517 | 525 | " (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)" | |
| 519 | 528 | " FROM mlink JOIN filename ON filename.fnid=mlink.fnid" |
| 520 | 529 | " WHERE mlink.mid=%d" |
| 521 | 530 | " ORDER BY name", |
| 522 | 531 | rid |
| 523 | 532 | ); |
| @@ -524,11 +533,12 @@ | ||
| 524 | 533 | while( db_step(&q)==SQLITE_ROW ){ |
| 525 | 534 | const char *zName = db_column_text(&q,0); |
| 526 | 535 | int mperm = db_column_int(&q, 1); |
| 527 | 536 | const char *zOld = db_column_text(&q,2); |
| 528 | 537 | 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); | |
| 530 | 540 | } |
| 531 | 541 | db_finalize(&q); |
| 532 | 542 | } |
| 533 | 543 | style_footer(); |
| 534 | 544 | } |
| @@ -715,25 +725,25 @@ | ||
| 715 | 725 | }else{ |
| 716 | 726 | cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName); |
| 717 | 727 | } |
| 718 | 728 | if( cmp<0 ){ |
| 719 | 729 | append_file_change_line(pFileFrom->zName, |
| 720 | - pFileFrom->zUuid, 0, 0, 0); | |
| 730 | + pFileFrom->zUuid, 0, 0, 0, 0); | |
| 721 | 731 | pFileFrom = manifest_file_next(pFrom, 0); |
| 722 | 732 | }else if( cmp>0 ){ |
| 723 | 733 | append_file_change_line(pFileTo->zName, |
| 724 | - 0, pFileTo->zUuid, 0, | |
| 734 | + 0, pFileTo->zUuid, 0, 0, | |
| 725 | 735 | manifest_file_mperm(pFileTo)); |
| 726 | 736 | pFileTo = manifest_file_next(pTo, 0); |
| 727 | 737 | }else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){ |
| 728 | 738 | /* No changes */ |
| 729 | 739 | pFileFrom = manifest_file_next(pFrom, 0); |
| 730 | 740 | pFileTo = manifest_file_next(pTo, 0); |
| 731 | 741 | }else{ |
| 732 | 742 | append_file_change_line(pFileFrom->zName, |
| 733 | 743 | pFileFrom->zUuid, |
| 734 | - pFileTo->zUuid, showDetail, | |
| 744 | + pFileTo->zUuid, 0, showDetail, | |
| 735 | 745 | manifest_file_mperm(pFileTo)); |
| 736 | 746 | pFileFrom = manifest_file_next(pFrom, 0); |
| 737 | 747 | pFileTo = manifest_file_next(pTo, 0); |
| 738 | 748 | } |
| 739 | 749 | } |
| 740 | 750 |
| --- 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 | @ |
| 326 | @ <a href="%s(g.zTop)/fdiff?v1=%S(zOld)&v2=%S(zNew)">[diff]</a> |
| 327 | } |
| 328 | @ </p> |
| 329 | } |
| @@ -511,13 +518,15 @@ | |
| 511 | } |
| 512 | } |
| 513 | @ |
| 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 | @ |
| 333 | @ <a href="%s(g.zTop)/fdiff?v1=%S(zOld)&v2=%S(zNew)">[diff]</a> |
| 334 | } |
| 335 | @ </p> |
| 336 | } |
| @@ -511,13 +518,15 @@ | |
| 518 | } |
| 519 | } |
| 520 | @ |
| 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 @@ | ||
| 1323 | 1323 | if( pChildFile ){ |
| 1324 | 1324 | add_one_mlink(cid, 0, pChildFile->zUuid, pChildFile->zName, 0, |
| 1325 | 1325 | isPublic, manifest_file_mperm(pChildFile)); |
| 1326 | 1326 | } |
| 1327 | 1327 | } |
| 1328 | - }else if( pChild->zBaseline==0 ){ | |
| 1328 | + }else if( pChild->zBaseline==0 && pParent->zBaseline!=0 ){ | |
| 1329 | 1329 | /* Parent is a delta but pChild is a baseline. Look for files that are |
| 1330 | 1330 | ** present in pParent but which are missing from pChild and mark them |
| 1331 | 1331 | ** has having been deleted. */ |
| 1332 | 1332 | manifest_file_rewind(pParent); |
| 1333 | 1333 | while( (pParentFile = manifest_file_next(pParent,0))!=0 ){ |
| 1334 | 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 ){ |
| 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 |