| | @@ -161,10 +161,13 @@ |
| 161 | 161 | const char *zRight, /* Name of the right file */ |
| 162 | 162 | DiffConfig *pCfg, /* Diff configuration */ |
| 163 | 163 | Blob *pOut /* Write to this blob, or stdout of this is NULL */ |
| 164 | 164 | ){ |
| 165 | 165 | u64 diffFlags = pCfg->diffFlags; |
| 166 | + /* Standardize on /dev/null, regardless of platform. */ |
| 167 | + if( pCfg->diffFlags & DIFF_FILE_ADDED ) zLeft = "/dev/null"; |
| 168 | + if( pCfg->diffFlags & DIFF_FILE_DELETED ) zRight = "/dev/null"; |
| 166 | 169 | if( diffFlags & (DIFF_BRIEF|DIFF_RAW) ){ |
| 167 | 170 | /* no-op */ |
| 168 | 171 | }else if( diffFlags & DIFF_DEBUG ){ |
| 169 | 172 | blob_appendf(pOut, "FILE-LEFT %s\nFILE-RIGHT %s\n", zLeft, zRight); |
| 170 | 173 | }else if( diffFlags & DIFF_WEBPAGE ){ |
| | @@ -714,26 +717,31 @@ |
| 714 | 717 | }else{ |
| 715 | 718 | blob_set(&fname, g.zLocalRoot); |
| 716 | 719 | blob_append(&fname, zPathname, -1); |
| 717 | 720 | } |
| 718 | 721 | zFullName = blob_str(&fname); |
| 722 | + pCfg->diffFlags &= (~DIFF_FILE_MASK); |
| 719 | 723 | if( isDeleted ){ |
| 720 | 724 | if( !isNumStat ){ fossil_print("DELETED %s\n", zPathname); } |
| 725 | + pCfg->diffFlags |= DIFF_FILE_DELETED; |
| 721 | 726 | if( !asNewFile ){ showDiff = 0; zFullName = NULL_DEVICE; } |
| 722 | 727 | }else if( file_access(zFullName, F_OK) ){ |
| 723 | 728 | if( !isNumStat ){ fossil_print("MISSING %s\n", zPathname); } |
| 724 | 729 | if( !asNewFile ){ showDiff = 0; } |
| 725 | 730 | }else if( isNew ){ |
| 726 | 731 | if( !isNumStat ){ fossil_print("ADDED %s\n", zPathname); } |
| 732 | + pCfg->diffFlags |= DIFF_FILE_ADDED; |
| 727 | 733 | srcid = 0; |
| 728 | 734 | if( !asNewFile ){ showDiff = 0; } |
| 729 | 735 | }else if( isChnged==3 ){ |
| 730 | 736 | if( !isNumStat ){ fossil_print("ADDED_BY_MERGE %s\n", zPathname); } |
| 737 | + pCfg->diffFlags |= DIFF_FILE_ADDED; |
| 731 | 738 | srcid = 0; |
| 732 | 739 | if( !asNewFile ){ showDiff = 0; } |
| 733 | 740 | }else if( isChnged==5 ){ |
| 734 | 741 | if( !isNumStat ){ fossil_print("ADDED_BY_INTEGRATE %s\n", zPathname); } |
| 742 | + pCfg->diffFlags |= DIFF_FILE_ADDED; |
| 735 | 743 | srcid = 0; |
| 736 | 744 | if( !asNewFile ){ showDiff = 0; } |
| 737 | 745 | } |
| 738 | 746 | if( showDiff ){ |
| 739 | 747 | Blob content; |
| | @@ -875,15 +883,17 @@ |
| 875 | 883 | }else if( pToFile==0 ){ |
| 876 | 884 | cmp = -1; |
| 877 | 885 | }else{ |
| 878 | 886 | cmp = fossil_strcmp(pFromFile->zName, pToFile->zName); |
| 879 | 887 | } |
| 888 | + pCfg->diffFlags &= (~DIFF_FILE_MASK); |
| 880 | 889 | if( cmp<0 ){ |
| 881 | 890 | if( file_dir_match(pFileDir, pFromFile->zName) ){ |
| 882 | 891 | if( (pCfg->diffFlags & (DIFF_NUMSTAT|DIFF_HTML))==0 ){ |
| 883 | 892 | fossil_print("DELETED %s\n", pFromFile->zName); |
| 884 | 893 | } |
| 894 | + pCfg->diffFlags |= DIFF_FILE_DELETED; |
| 885 | 895 | if( asNewFlag ){ |
| 886 | 896 | diff_manifest_entry(pFromFile, 0, pCfg); |
| 887 | 897 | } |
| 888 | 898 | } |
| 889 | 899 | pFromFile = manifest_file_next(pFrom,0); |
| | @@ -891,10 +901,11 @@ |
| 891 | 901 | if( file_dir_match(pFileDir, pToFile->zName) ){ |
| 892 | 902 | if( (pCfg->diffFlags & |
| 893 | 903 | (DIFF_NUMSTAT|DIFF_HTML|DIFF_TCL|DIFF_JSON))==0 ){ |
| 894 | 904 | fossil_print("ADDED %s\n", pToFile->zName); |
| 895 | 905 | } |
| 906 | + pCfg->diffFlags |= DIFF_FILE_ADDED; |
| 896 | 907 | if( asNewFlag ){ |
| 897 | 908 | diff_manifest_entry(0, pToFile, pCfg); |
| 898 | 909 | } |
| 899 | 910 | } |
| 900 | 911 | pToFile = manifest_file_next(pTo,0); |
| 901 | 912 | |