Fossil SCM

For 'fossil diff', when --numstat is combined with --brief, show only the total row.

danield 2025-03-12 13:35 trunk
Commit 37327906e7ddbe6ac12762343305200832f76e0a1a1bfc1542dbbb78fbd7847a
2 files changed +2 -1 +17 -9
+2 -1
--- src/diff.c
+++ src/diff.c
@@ -3175,11 +3175,12 @@
31753175
}
31763176
g.diffCnt[1] += nIns;
31773177
g.diffCnt[2] += nDel;
31783178
if( nIns+nDel ){
31793179
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);
31813182
}
31823183
}else if( pCfg->diffFlags & (DIFF_RAW|DIFF_BY_TOKEN) ){
31833184
const int *R = c.aEdit;
31843185
unsigned int r;
31853186
for(r=0; R[r] || R[r+1] || R[r+2]; r += 3){
31863187
--- 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 @@
587587
blob_read_from_file(&file2, zFile2, ExtFILE);
588588
zName2 = zName;
589589
}
590590
591591
/* Compute and output the differences */
592
- if( pCfg->diffFlags & DIFF_BRIEF ){
592
+ if( (pCfg->diffFlags & DIFF_BRIEF) && !(pCfg->diffFlags & DIFF_NUMSTAT) ){
593593
if( blob_compare(pFile1, &file2) ){
594594
fossil_print("CHANGED %s\n", zName);
595595
}
596596
}else{
597597
blob_zero(&out);
598598
text_diff(pFile1, &file2, &out, pCfg);
599599
if( blob_size(&out) ){
600600
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);
602603
}else{
603604
diff_print_filenames(zName, zName2, pCfg, pOut);
604605
blob_appendf(pOut, "%s\n", blob_str(&out));
605606
}
606607
}
@@ -693,18 +694,21 @@
693694
Blob *pFile1, /* In memory content to compare from */
694695
Blob *pFile2, /* In memory content to compare to */
695696
const char *zName, /* Display name of the file */
696697
DiffConfig *pCfg /* Diff flags */
697698
){
698
- if( pCfg->diffFlags & DIFF_BRIEF ) return;
699
+ if( (pCfg->diffFlags & DIFF_BRIEF) && !(pCfg->diffFlags & DIFF_NUMSTAT) ){
700
+ return;
701
+ }
699702
if( pCfg->zDiffCmd==0 ){
700703
Blob out; /* Diff output text */
701704
702705
blob_zero(&out);
703706
text_diff(pFile1, pFile2, &out, pCfg);
704707
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);
706710
}else{
707711
diff_print_filenames(zName, zName, pCfg, 0);
708712
fossil_print("%s\n", blob_str(&out));
709713
}
710714
@@ -990,11 +994,13 @@
990994
}else if( pTo ){
991995
zName = pTo->zName;
992996
}else{
993997
zName = DIFF_NO_NAME;
994998
}
995
- if( pCfg->diffFlags & DIFF_BRIEF ) return;
999
+ if( (pCfg->diffFlags & DIFF_BRIEF) && !(pCfg->diffFlags & DIFF_NUMSTAT) ){
1000
+ return;
1001
+ }
9961002
diff_print_index(zName, pCfg, 0);
9971003
if( pFrom ){
9981004
rid = uuid_to_rid(pFrom->zUuid, 0);
9991005
content_get(rid, &f1);
10001006
}else{
@@ -1078,11 +1084,11 @@
10781084
(void)file_dir_match(pFileDir, pFromFile->zName); /* Record name usage */
10791085
pFromFile = manifest_file_next(pFrom,0);
10801086
pToFile = manifest_file_next(pTo,0);
10811087
}else{
10821088
if( file_dir_match(pFileDir, pToFile->zName) ){
1083
- if( pCfg->diffFlags & DIFF_BRIEF ){
1089
+ if((pCfg->diffFlags & DIFF_BRIEF) && !(pCfg->diffFlags & DIFF_NUMSTAT)){
10841090
fossil_print("CHANGED %s\n", pFromFile->zName);
10851091
}else{
10861092
diff_manifest_entry(pFromFile, pToFile, pCfg);
10871093
}
10881094
}
@@ -1337,11 +1343,13 @@
13371343
** -i|--internal Use internal diff logic
13381344
** --invert Invert the diff
13391345
** --json Output formatted as JSON
13401346
** -n|--linenum Show line numbers
13411347
** -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.
13431351
** -y|--side-by-side Side-by-side diff
13441352
** --strip-trailing-cr Strip trailing CR
13451353
** --tcl Tcl-formatted output used internally by --tk
13461354
** --tclsh PATH Tcl/Tk shell used for --tk (default: "tclsh")
13471355
** --tk Launch a Tcl/Tk GUI for display
@@ -1469,12 +1477,12 @@
14691477
}
14701478
fossil_free(pFileDir);
14711479
}
14721480
diff_end(&DCfg, 0);
14731481
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": "");
14761484
}
14771485
}
14781486
14791487
/*
14801488
** WEBPAGE: vpatch
14811489
--- 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

Keyboard Shortcuts

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