Fossil SCM
Fix "stash diff" command so if file on filesystem is same as the stashed file, don't print "CHANGED" and skip the diff. This match regular "fossil diff" command.
Commit
71b0c80bbcce72c6eb10c10a0768e9cc3018fd7468067faae6626470dd21df63
Parent
07592007ce0a923…
2 files changed
+1
-1
+13
-3
+1
-1
| --- src/diffcmd.c | ||
| +++ src/diffcmd.c | ||
| @@ -776,11 +776,11 @@ | ||
| 776 | 776 | |
| 777 | 777 | /* |
| 778 | 778 | ** Return true if the disk file is identical to the Blob. Return zero |
| 779 | 779 | ** if the files differ in any way. |
| 780 | 780 | */ |
| 781 | -static int file_same_as_blob(Blob *blob, const char *zDiskFile){ | |
| 781 | +int file_same_as_blob(Blob *blob, const char *zDiskFile){ | |
| 782 | 782 | Blob file; |
| 783 | 783 | int rc = 0; |
| 784 | 784 | if( blob_size(blob)!=file_size(zDiskFile, ExtFILE) ) return 0; |
| 785 | 785 | blob_zero(&file); |
| 786 | 786 | blob_read_from_file(&file, zDiskFile, ExtFILE); |
| 787 | 787 |
| --- src/diffcmd.c | |
| +++ src/diffcmd.c | |
| @@ -776,11 +776,11 @@ | |
| 776 | |
| 777 | /* |
| 778 | ** Return true if the disk file is identical to the Blob. Return zero |
| 779 | ** if the files differ in any way. |
| 780 | */ |
| 781 | static int file_same_as_blob(Blob *blob, const char *zDiskFile){ |
| 782 | Blob file; |
| 783 | int rc = 0; |
| 784 | if( blob_size(blob)!=file_size(zDiskFile, ExtFILE) ) return 0; |
| 785 | blob_zero(&file); |
| 786 | blob_read_from_file(&file, zDiskFile, ExtFILE); |
| 787 |
| --- src/diffcmd.c | |
| +++ src/diffcmd.c | |
| @@ -776,11 +776,11 @@ | |
| 776 | |
| 777 | /* |
| 778 | ** Return true if the disk file is identical to the Blob. Return zero |
| 779 | ** if the files differ in any way. |
| 780 | */ |
| 781 | int file_same_as_blob(Blob *blob, const char *zDiskFile){ |
| 782 | Blob file; |
| 783 | int rc = 0; |
| 784 | if( blob_size(blob)!=file_size(zDiskFile, ExtFILE) ) return 0; |
| 785 | blob_zero(&file); |
| 786 | blob_read_from_file(&file, zDiskFile, ExtFILE); |
| 787 |
+13
-3
| --- src/stash.c | ||
| +++ src/stash.c | ||
| @@ -447,24 +447,34 @@ | ||
| 447 | 447 | } |
| 448 | 448 | }else{ |
| 449 | 449 | Blob delta; |
| 450 | 450 | int isOrigLink = file_islink(zOPath); |
| 451 | 451 | db_ephemeral_blob(&q, 6, &delta); |
| 452 | - if( !bWebpage ) fossil_print("CHANGED %s\n", zNew); | |
| 453 | 452 | if( !isOrigLink != !isLink ){ |
| 453 | + if( !bWebpage ) fossil_print("CHANGED %s\n", zNew); | |
| 454 | 454 | diff_print_index(zNew, pCfg, 0); |
| 455 | 455 | diff_print_filenames(zOrig, zNew, pCfg, 0); |
| 456 | 456 | printf(DIFF_CANNOT_COMPUTE_SYMLINK); |
| 457 | 457 | }else{ |
| 458 | + int isChanged = 0; | |
| 458 | 459 | content_get(rid, &a); |
| 459 | 460 | blob_delta_apply(&a, &delta, &b); |
| 460 | 461 | if( fBaseline ){ |
| 461 | - diff_file_mem(&a, &b, zNew, pCfg); | |
| 462 | - }else{ | |
| 462 | + if( blob_compare(&a, &b) ){ | |
| 463 | + isChanged = 1; | |
| 464 | + if( !bWebpage ) fossil_print("CHANGED %s\n", zNew); | |
| 465 | + diff_file_mem(&a, &b, zNew, pCfg); | |
| 466 | + } | |
| 467 | + }else if( !file_same_as_blob(&b, zOPath) ){ | |
| 468 | + isChanged = 1; | |
| 469 | + if( !bWebpage ) fossil_print("CHANGED %s\n", zNew); | |
| 463 | 470 | pCfg->diffFlags ^= DIFF_INVERT; |
| 464 | 471 | diff_file(&b, zOPath, zNew, pCfg, 0); |
| 465 | 472 | pCfg->diffFlags ^= DIFF_INVERT; |
| 473 | + } | |
| 474 | + if( !bWebpage && !isChanged && pCfg->diffFlags & DIFF_VERBOSE ){ | |
| 475 | + fossil_print("UNCHANGED %s\n", zNew); | |
| 466 | 476 | } |
| 467 | 477 | blob_reset(&a); |
| 468 | 478 | blob_reset(&b); |
| 469 | 479 | } |
| 470 | 480 | blob_reset(&delta); |
| 471 | 481 |
| --- src/stash.c | |
| +++ src/stash.c | |
| @@ -447,24 +447,34 @@ | |
| 447 | } |
| 448 | }else{ |
| 449 | Blob delta; |
| 450 | int isOrigLink = file_islink(zOPath); |
| 451 | db_ephemeral_blob(&q, 6, &delta); |
| 452 | if( !bWebpage ) fossil_print("CHANGED %s\n", zNew); |
| 453 | if( !isOrigLink != !isLink ){ |
| 454 | diff_print_index(zNew, pCfg, 0); |
| 455 | diff_print_filenames(zOrig, zNew, pCfg, 0); |
| 456 | printf(DIFF_CANNOT_COMPUTE_SYMLINK); |
| 457 | }else{ |
| 458 | content_get(rid, &a); |
| 459 | blob_delta_apply(&a, &delta, &b); |
| 460 | if( fBaseline ){ |
| 461 | diff_file_mem(&a, &b, zNew, pCfg); |
| 462 | }else{ |
| 463 | pCfg->diffFlags ^= DIFF_INVERT; |
| 464 | diff_file(&b, zOPath, zNew, pCfg, 0); |
| 465 | pCfg->diffFlags ^= DIFF_INVERT; |
| 466 | } |
| 467 | blob_reset(&a); |
| 468 | blob_reset(&b); |
| 469 | } |
| 470 | blob_reset(&delta); |
| 471 |
| --- src/stash.c | |
| +++ src/stash.c | |
| @@ -447,24 +447,34 @@ | |
| 447 | } |
| 448 | }else{ |
| 449 | Blob delta; |
| 450 | int isOrigLink = file_islink(zOPath); |
| 451 | db_ephemeral_blob(&q, 6, &delta); |
| 452 | if( !isOrigLink != !isLink ){ |
| 453 | if( !bWebpage ) fossil_print("CHANGED %s\n", zNew); |
| 454 | diff_print_index(zNew, pCfg, 0); |
| 455 | diff_print_filenames(zOrig, zNew, pCfg, 0); |
| 456 | printf(DIFF_CANNOT_COMPUTE_SYMLINK); |
| 457 | }else{ |
| 458 | int isChanged = 0; |
| 459 | content_get(rid, &a); |
| 460 | blob_delta_apply(&a, &delta, &b); |
| 461 | if( fBaseline ){ |
| 462 | if( blob_compare(&a, &b) ){ |
| 463 | isChanged = 1; |
| 464 | if( !bWebpage ) fossil_print("CHANGED %s\n", zNew); |
| 465 | diff_file_mem(&a, &b, zNew, pCfg); |
| 466 | } |
| 467 | }else if( !file_same_as_blob(&b, zOPath) ){ |
| 468 | isChanged = 1; |
| 469 | if( !bWebpage ) fossil_print("CHANGED %s\n", zNew); |
| 470 | pCfg->diffFlags ^= DIFF_INVERT; |
| 471 | diff_file(&b, zOPath, zNew, pCfg, 0); |
| 472 | pCfg->diffFlags ^= DIFF_INVERT; |
| 473 | } |
| 474 | if( !bWebpage && !isChanged && pCfg->diffFlags & DIFF_VERBOSE ){ |
| 475 | fossil_print("UNCHANGED %s\n", zNew); |
| 476 | } |
| 477 | blob_reset(&a); |
| 478 | blob_reset(&b); |
| 479 | } |
| 480 | blob_reset(&delta); |
| 481 |