Fossil SCM
For 'fossil diff', when --numstat is combined with --brief, show only the total row.
Commit
37327906e7ddbe6ac12762343305200832f76e0a1a1bfc1542dbbb78fbd7847a
Parent
c9d3900367eb6e5…
2 files changed
+2
-1
+17
-9
+2
-1
| --- src/diff.c | ||
| +++ src/diff.c | ||
| @@ -3175,11 +3175,12 @@ | ||
| 3175 | 3175 | } |
| 3176 | 3176 | g.diffCnt[1] += nIns; |
| 3177 | 3177 | g.diffCnt[2] += nDel; |
| 3178 | 3178 | if( nIns+nDel ){ |
| 3179 | 3179 | g.diffCnt[0]++; |
| 3180 | - blob_appendf(pOut, "%10d %10d", nIns, nDel); | |
| 3180 | + if( !(pCfg->diffFlags & DIFF_BRIEF) ) | |
| 3181 | + blob_appendf(pOut, "%10d %10d", nIns, nDel); | |
| 3181 | 3182 | } |
| 3182 | 3183 | }else if( pCfg->diffFlags & (DIFF_RAW|DIFF_BY_TOKEN) ){ |
| 3183 | 3184 | const int *R = c.aEdit; |
| 3184 | 3185 | unsigned int r; |
| 3185 | 3186 | for(r=0; R[r] || R[r+1] || R[r+2]; r += 3){ |
| 3186 | 3187 |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -3175,11 +3175,12 @@ | |
| 3175 | } |
| 3176 | g.diffCnt[1] += nIns; |
| 3177 | g.diffCnt[2] += nDel; |
| 3178 | if( nIns+nDel ){ |
| 3179 | g.diffCnt[0]++; |
| 3180 | blob_appendf(pOut, "%10d %10d", nIns, nDel); |
| 3181 | } |
| 3182 | }else if( pCfg->diffFlags & (DIFF_RAW|DIFF_BY_TOKEN) ){ |
| 3183 | const int *R = c.aEdit; |
| 3184 | unsigned int r; |
| 3185 | for(r=0; R[r] || R[r+1] || R[r+2]; r += 3){ |
| 3186 |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -3175,11 +3175,12 @@ | |
| 3175 | } |
| 3176 | g.diffCnt[1] += nIns; |
| 3177 | g.diffCnt[2] += nDel; |
| 3178 | if( nIns+nDel ){ |
| 3179 | g.diffCnt[0]++; |
| 3180 | if( !(pCfg->diffFlags & DIFF_BRIEF) ) |
| 3181 | blob_appendf(pOut, "%10d %10d", nIns, nDel); |
| 3182 | } |
| 3183 | }else if( pCfg->diffFlags & (DIFF_RAW|DIFF_BY_TOKEN) ){ |
| 3184 | const int *R = c.aEdit; |
| 3185 | unsigned int r; |
| 3186 | for(r=0; R[r] || R[r+1] || R[r+2]; r += 3){ |
| 3187 |
+17
-9
| --- src/diffcmd.c | ||
| +++ src/diffcmd.c | ||
| @@ -587,20 +587,21 @@ | ||
| 587 | 587 | blob_read_from_file(&file2, zFile2, ExtFILE); |
| 588 | 588 | zName2 = zName; |
| 589 | 589 | } |
| 590 | 590 | |
| 591 | 591 | /* Compute and output the differences */ |
| 592 | - if( pCfg->diffFlags & DIFF_BRIEF ){ | |
| 592 | + if( (pCfg->diffFlags & DIFF_BRIEF) && !(pCfg->diffFlags & DIFF_NUMSTAT) ){ | |
| 593 | 593 | if( blob_compare(pFile1, &file2) ){ |
| 594 | 594 | fossil_print("CHANGED %s\n", zName); |
| 595 | 595 | } |
| 596 | 596 | }else{ |
| 597 | 597 | blob_zero(&out); |
| 598 | 598 | text_diff(pFile1, &file2, &out, pCfg); |
| 599 | 599 | if( blob_size(&out) ){ |
| 600 | 600 | if( pCfg->diffFlags & DIFF_NUMSTAT ){ |
| 601 | - blob_appendf(pOut, "%s %s\n", blob_str(&out), zName); | |
| 601 | + if( !(pCfg->diffFlags & DIFF_BRIEF) ) | |
| 602 | + blob_appendf(pOut, "%s %s\n", blob_str(&out), zName); | |
| 602 | 603 | }else{ |
| 603 | 604 | diff_print_filenames(zName, zName2, pCfg, pOut); |
| 604 | 605 | blob_appendf(pOut, "%s\n", blob_str(&out)); |
| 605 | 606 | } |
| 606 | 607 | } |
| @@ -693,18 +694,21 @@ | ||
| 693 | 694 | Blob *pFile1, /* In memory content to compare from */ |
| 694 | 695 | Blob *pFile2, /* In memory content to compare to */ |
| 695 | 696 | const char *zName, /* Display name of the file */ |
| 696 | 697 | DiffConfig *pCfg /* Diff flags */ |
| 697 | 698 | ){ |
| 698 | - if( pCfg->diffFlags & DIFF_BRIEF ) return; | |
| 699 | + if( (pCfg->diffFlags & DIFF_BRIEF) && !(pCfg->diffFlags & DIFF_NUMSTAT) ){ | |
| 700 | + return; | |
| 701 | + } | |
| 699 | 702 | if( pCfg->zDiffCmd==0 ){ |
| 700 | 703 | Blob out; /* Diff output text */ |
| 701 | 704 | |
| 702 | 705 | blob_zero(&out); |
| 703 | 706 | text_diff(pFile1, pFile2, &out, pCfg); |
| 704 | 707 | if( pCfg->diffFlags & DIFF_NUMSTAT ){ |
| 705 | - fossil_print("%s %s\n", blob_str(&out), zName); | |
| 708 | + if( !(pCfg->diffFlags & DIFF_BRIEF) ) | |
| 709 | + fossil_print("%s %s\n", blob_str(&out), zName); | |
| 706 | 710 | }else{ |
| 707 | 711 | diff_print_filenames(zName, zName, pCfg, 0); |
| 708 | 712 | fossil_print("%s\n", blob_str(&out)); |
| 709 | 713 | } |
| 710 | 714 | |
| @@ -990,11 +994,13 @@ | ||
| 990 | 994 | }else if( pTo ){ |
| 991 | 995 | zName = pTo->zName; |
| 992 | 996 | }else{ |
| 993 | 997 | zName = DIFF_NO_NAME; |
| 994 | 998 | } |
| 995 | - if( pCfg->diffFlags & DIFF_BRIEF ) return; | |
| 999 | + if( (pCfg->diffFlags & DIFF_BRIEF) && !(pCfg->diffFlags & DIFF_NUMSTAT) ){ | |
| 1000 | + return; | |
| 1001 | + } | |
| 996 | 1002 | diff_print_index(zName, pCfg, 0); |
| 997 | 1003 | if( pFrom ){ |
| 998 | 1004 | rid = uuid_to_rid(pFrom->zUuid, 0); |
| 999 | 1005 | content_get(rid, &f1); |
| 1000 | 1006 | }else{ |
| @@ -1078,11 +1084,11 @@ | ||
| 1078 | 1084 | (void)file_dir_match(pFileDir, pFromFile->zName); /* Record name usage */ |
| 1079 | 1085 | pFromFile = manifest_file_next(pFrom,0); |
| 1080 | 1086 | pToFile = manifest_file_next(pTo,0); |
| 1081 | 1087 | }else{ |
| 1082 | 1088 | if( file_dir_match(pFileDir, pToFile->zName) ){ |
| 1083 | - if( pCfg->diffFlags & DIFF_BRIEF ){ | |
| 1089 | + if((pCfg->diffFlags & DIFF_BRIEF) && !(pCfg->diffFlags & DIFF_NUMSTAT)){ | |
| 1084 | 1090 | fossil_print("CHANGED %s\n", pFromFile->zName); |
| 1085 | 1091 | }else{ |
| 1086 | 1092 | diff_manifest_entry(pFromFile, pToFile, pCfg); |
| 1087 | 1093 | } |
| 1088 | 1094 | } |
| @@ -1337,11 +1343,13 @@ | ||
| 1337 | 1343 | ** -i|--internal Use internal diff logic |
| 1338 | 1344 | ** --invert Invert the diff |
| 1339 | 1345 | ** --json Output formatted as JSON |
| 1340 | 1346 | ** -n|--linenum Show line numbers |
| 1341 | 1347 | ** -N|--new-file Alias for --verbose |
| 1342 | -** --numstat Show only the number of added and deleted lines | |
| 1348 | +** --numstat Show the number of added and deleted lines per | |
| 1349 | +** file, omitting the diff. When combined with | |
| 1350 | +** --brief, show only the total row. | |
| 1343 | 1351 | ** -y|--side-by-side Side-by-side diff |
| 1344 | 1352 | ** --strip-trailing-cr Strip trailing CR |
| 1345 | 1353 | ** --tcl Tcl-formatted output used internally by --tk |
| 1346 | 1354 | ** --tclsh PATH Tcl/Tk shell used for --tk (default: "tclsh") |
| 1347 | 1355 | ** --tk Launch a Tcl/Tk GUI for display |
| @@ -1469,12 +1477,12 @@ | ||
| 1469 | 1477 | } |
| 1470 | 1478 | fossil_free(pFileDir); |
| 1471 | 1479 | } |
| 1472 | 1480 | diff_end(&DCfg, 0); |
| 1473 | 1481 | if ( DCfg.diffFlags & DIFF_NUMSTAT ){ |
| 1474 | - fossil_print("%10d %10d TOTAL over %d changed files\n", | |
| 1475 | - g.diffCnt[1], g.diffCnt[2], g.diffCnt[0]); | |
| 1482 | + fossil_print("%10d %10d TOTAL over %d changed file%s\n", | |
| 1483 | + g.diffCnt[1], g.diffCnt[2], g.diffCnt[0], g.diffCnt[0]!=1 ? "s": ""); | |
| 1476 | 1484 | } |
| 1477 | 1485 | } |
| 1478 | 1486 | |
| 1479 | 1487 | /* |
| 1480 | 1488 | ** WEBPAGE: vpatch |
| 1481 | 1489 |
| --- src/diffcmd.c | |
| +++ src/diffcmd.c | |
| @@ -587,20 +587,21 @@ | |
| 587 | blob_read_from_file(&file2, zFile2, ExtFILE); |
| 588 | zName2 = zName; |
| 589 | } |
| 590 | |
| 591 | /* Compute and output the differences */ |
| 592 | if( pCfg->diffFlags & DIFF_BRIEF ){ |
| 593 | if( blob_compare(pFile1, &file2) ){ |
| 594 | fossil_print("CHANGED %s\n", zName); |
| 595 | } |
| 596 | }else{ |
| 597 | blob_zero(&out); |
| 598 | text_diff(pFile1, &file2, &out, pCfg); |
| 599 | if( blob_size(&out) ){ |
| 600 | if( pCfg->diffFlags & DIFF_NUMSTAT ){ |
| 601 | blob_appendf(pOut, "%s %s\n", blob_str(&out), zName); |
| 602 | }else{ |
| 603 | diff_print_filenames(zName, zName2, pCfg, pOut); |
| 604 | blob_appendf(pOut, "%s\n", blob_str(&out)); |
| 605 | } |
| 606 | } |
| @@ -693,18 +694,21 @@ | |
| 693 | Blob *pFile1, /* In memory content to compare from */ |
| 694 | Blob *pFile2, /* In memory content to compare to */ |
| 695 | const char *zName, /* Display name of the file */ |
| 696 | DiffConfig *pCfg /* Diff flags */ |
| 697 | ){ |
| 698 | if( pCfg->diffFlags & DIFF_BRIEF ) return; |
| 699 | if( pCfg->zDiffCmd==0 ){ |
| 700 | Blob out; /* Diff output text */ |
| 701 | |
| 702 | blob_zero(&out); |
| 703 | text_diff(pFile1, pFile2, &out, pCfg); |
| 704 | if( pCfg->diffFlags & DIFF_NUMSTAT ){ |
| 705 | fossil_print("%s %s\n", blob_str(&out), zName); |
| 706 | }else{ |
| 707 | diff_print_filenames(zName, zName, pCfg, 0); |
| 708 | fossil_print("%s\n", blob_str(&out)); |
| 709 | } |
| 710 | |
| @@ -990,11 +994,13 @@ | |
| 990 | }else if( pTo ){ |
| 991 | zName = pTo->zName; |
| 992 | }else{ |
| 993 | zName = DIFF_NO_NAME; |
| 994 | } |
| 995 | if( pCfg->diffFlags & DIFF_BRIEF ) return; |
| 996 | diff_print_index(zName, pCfg, 0); |
| 997 | if( pFrom ){ |
| 998 | rid = uuid_to_rid(pFrom->zUuid, 0); |
| 999 | content_get(rid, &f1); |
| 1000 | }else{ |
| @@ -1078,11 +1084,11 @@ | |
| 1078 | (void)file_dir_match(pFileDir, pFromFile->zName); /* Record name usage */ |
| 1079 | pFromFile = manifest_file_next(pFrom,0); |
| 1080 | pToFile = manifest_file_next(pTo,0); |
| 1081 | }else{ |
| 1082 | if( file_dir_match(pFileDir, pToFile->zName) ){ |
| 1083 | if( pCfg->diffFlags & DIFF_BRIEF ){ |
| 1084 | fossil_print("CHANGED %s\n", pFromFile->zName); |
| 1085 | }else{ |
| 1086 | diff_manifest_entry(pFromFile, pToFile, pCfg); |
| 1087 | } |
| 1088 | } |
| @@ -1337,11 +1343,13 @@ | |
| 1337 | ** -i|--internal Use internal diff logic |
| 1338 | ** --invert Invert the diff |
| 1339 | ** --json Output formatted as JSON |
| 1340 | ** -n|--linenum Show line numbers |
| 1341 | ** -N|--new-file Alias for --verbose |
| 1342 | ** --numstat Show only the number of added and deleted lines |
| 1343 | ** -y|--side-by-side Side-by-side diff |
| 1344 | ** --strip-trailing-cr Strip trailing CR |
| 1345 | ** --tcl Tcl-formatted output used internally by --tk |
| 1346 | ** --tclsh PATH Tcl/Tk shell used for --tk (default: "tclsh") |
| 1347 | ** --tk Launch a Tcl/Tk GUI for display |
| @@ -1469,12 +1477,12 @@ | |
| 1469 | } |
| 1470 | fossil_free(pFileDir); |
| 1471 | } |
| 1472 | diff_end(&DCfg, 0); |
| 1473 | if ( DCfg.diffFlags & DIFF_NUMSTAT ){ |
| 1474 | fossil_print("%10d %10d TOTAL over %d changed files\n", |
| 1475 | g.diffCnt[1], g.diffCnt[2], g.diffCnt[0]); |
| 1476 | } |
| 1477 | } |
| 1478 | |
| 1479 | /* |
| 1480 | ** WEBPAGE: vpatch |
| 1481 |
| --- src/diffcmd.c | |
| +++ src/diffcmd.c | |
| @@ -587,20 +587,21 @@ | |
| 587 | blob_read_from_file(&file2, zFile2, ExtFILE); |
| 588 | zName2 = zName; |
| 589 | } |
| 590 | |
| 591 | /* Compute and output the differences */ |
| 592 | if( (pCfg->diffFlags & DIFF_BRIEF) && !(pCfg->diffFlags & DIFF_NUMSTAT) ){ |
| 593 | if( blob_compare(pFile1, &file2) ){ |
| 594 | fossil_print("CHANGED %s\n", zName); |
| 595 | } |
| 596 | }else{ |
| 597 | blob_zero(&out); |
| 598 | text_diff(pFile1, &file2, &out, pCfg); |
| 599 | if( blob_size(&out) ){ |
| 600 | if( pCfg->diffFlags & DIFF_NUMSTAT ){ |
| 601 | if( !(pCfg->diffFlags & DIFF_BRIEF) ) |
| 602 | blob_appendf(pOut, "%s %s\n", blob_str(&out), zName); |
| 603 | }else{ |
| 604 | diff_print_filenames(zName, zName2, pCfg, pOut); |
| 605 | blob_appendf(pOut, "%s\n", blob_str(&out)); |
| 606 | } |
| 607 | } |
| @@ -693,18 +694,21 @@ | |
| 694 | Blob *pFile1, /* In memory content to compare from */ |
| 695 | Blob *pFile2, /* In memory content to compare to */ |
| 696 | const char *zName, /* Display name of the file */ |
| 697 | DiffConfig *pCfg /* Diff flags */ |
| 698 | ){ |
| 699 | if( (pCfg->diffFlags & DIFF_BRIEF) && !(pCfg->diffFlags & DIFF_NUMSTAT) ){ |
| 700 | return; |
| 701 | } |
| 702 | if( pCfg->zDiffCmd==0 ){ |
| 703 | Blob out; /* Diff output text */ |
| 704 | |
| 705 | blob_zero(&out); |
| 706 | text_diff(pFile1, pFile2, &out, pCfg); |
| 707 | if( pCfg->diffFlags & DIFF_NUMSTAT ){ |
| 708 | if( !(pCfg->diffFlags & DIFF_BRIEF) ) |
| 709 | fossil_print("%s %s\n", blob_str(&out), zName); |
| 710 | }else{ |
| 711 | diff_print_filenames(zName, zName, pCfg, 0); |
| 712 | fossil_print("%s\n", blob_str(&out)); |
| 713 | } |
| 714 | |
| @@ -990,11 +994,13 @@ | |
| 994 | }else if( pTo ){ |
| 995 | zName = pTo->zName; |
| 996 | }else{ |
| 997 | zName = DIFF_NO_NAME; |
| 998 | } |
| 999 | if( (pCfg->diffFlags & DIFF_BRIEF) && !(pCfg->diffFlags & DIFF_NUMSTAT) ){ |
| 1000 | return; |
| 1001 | } |
| 1002 | diff_print_index(zName, pCfg, 0); |
| 1003 | if( pFrom ){ |
| 1004 | rid = uuid_to_rid(pFrom->zUuid, 0); |
| 1005 | content_get(rid, &f1); |
| 1006 | }else{ |
| @@ -1078,11 +1084,11 @@ | |
| 1084 | (void)file_dir_match(pFileDir, pFromFile->zName); /* Record name usage */ |
| 1085 | pFromFile = manifest_file_next(pFrom,0); |
| 1086 | pToFile = manifest_file_next(pTo,0); |
| 1087 | }else{ |
| 1088 | if( file_dir_match(pFileDir, pToFile->zName) ){ |
| 1089 | if((pCfg->diffFlags & DIFF_BRIEF) && !(pCfg->diffFlags & DIFF_NUMSTAT)){ |
| 1090 | fossil_print("CHANGED %s\n", pFromFile->zName); |
| 1091 | }else{ |
| 1092 | diff_manifest_entry(pFromFile, pToFile, pCfg); |
| 1093 | } |
| 1094 | } |
| @@ -1337,11 +1343,13 @@ | |
| 1343 | ** -i|--internal Use internal diff logic |
| 1344 | ** --invert Invert the diff |
| 1345 | ** --json Output formatted as JSON |
| 1346 | ** -n|--linenum Show line numbers |
| 1347 | ** -N|--new-file Alias for --verbose |
| 1348 | ** --numstat Show the number of added and deleted lines per |
| 1349 | ** file, omitting the diff. When combined with |
| 1350 | ** --brief, show only the total row. |
| 1351 | ** -y|--side-by-side Side-by-side diff |
| 1352 | ** --strip-trailing-cr Strip trailing CR |
| 1353 | ** --tcl Tcl-formatted output used internally by --tk |
| 1354 | ** --tclsh PATH Tcl/Tk shell used for --tk (default: "tclsh") |
| 1355 | ** --tk Launch a Tcl/Tk GUI for display |
| @@ -1469,12 +1477,12 @@ | |
| 1477 | } |
| 1478 | fossil_free(pFileDir); |
| 1479 | } |
| 1480 | diff_end(&DCfg, 0); |
| 1481 | if ( DCfg.diffFlags & DIFF_NUMSTAT ){ |
| 1482 | fossil_print("%10d %10d TOTAL over %d changed file%s\n", |
| 1483 | g.diffCnt[1], g.diffCnt[2], g.diffCnt[0], g.diffCnt[0]!=1 ? "s": ""); |
| 1484 | } |
| 1485 | } |
| 1486 | |
| 1487 | /* |
| 1488 | ** WEBPAGE: vpatch |
| 1489 |