author | Shawn O. Pearce <spearce@spearce.org> | |
Thu, 25 Sep 2008 15:41:42 +0000 (08:41 -0700) | ||
committer | Shawn O. Pearce <spearce@spearce.org> | |
Thu, 25 Sep 2008 15:41:42 +0000 (08:41 -0700) |
* ho/dirstat-by-file:
diff --dirstat-by-file: count changed files, not lines
diff --dirstat-by-file: count changed files, not lines
Documentation/diff-options.txt | patch | blob | history | |
diff.c | patch | blob | history | |
diff.h | patch | blob | history |
index 6e268326da9e34882313b7b3d094a617c3966d29..7788d4fa4a1209cbed564a20f882f0946ba400cf 100644 (file)
can be set with "--dirstat=limit". Changes in a child directory is not
counted for the parent directory, unless "--cumulative" is used.
+--dirstat-by-file[=limit]::
+ Same as --dirstat, but counts changed files instead of lines.
+
--summary::
Output a condensed summary of extended header information
such as creations, renames and mode changes.
index 9053d4d1f6e886835813e8ba62a7d7767eefe1c8..a2f4850d4fdf3758b75cc086e47e18736075c999 100644 (file)
--- a/diff.c
+++ b/diff.c
/*
* Original minus copied is the removed material,
* added is the new material. They are both damages
- * made to the preimage.
+ * made to the preimage. In --dirstat-by-file mode, count
+ * damaged files, not damaged lines. This is done by
+ * counting only a single damaged line per file.
*/
damage = (p->one->size - copied) + added;
+ if (DIFF_OPT_TST(options, DIRSTAT_BY_FILE) && damage > 0)
+ damage = 1;
ALLOC_GROW(dir.files, dir.nr + 1, dir.alloc);
dir.files[dir.nr].name = name;
else if (!strcmp(arg, "--cumulative")) {
options->output_format |= DIFF_FORMAT_DIRSTAT;
DIFF_OPT_SET(options, DIRSTAT_CUMULATIVE);
+ } else if (opt_arg(arg, 0, "dirstat-by-file",
+ &options->dirstat_percent)) {
+ options->output_format |= DIFF_FORMAT_DIRSTAT;
+ DIFF_OPT_SET(options, DIRSTAT_BY_FILE);
}
else if (!strcmp(arg, "--check"))
options->output_format |= DIFF_FORMAT_CHECKDIFF;
index 1ca4f4628473c940fa0399b23f8da5c92a424dd5..a49d865bd9cb0fa5ff27ccad7049074afb0002e9 100644 (file)
--- a/diff.h
+++ b/diff.h
#define DIFF_OPT_RELATIVE_NAME (1 << 17)
#define DIFF_OPT_IGNORE_SUBMODULES (1 << 18)
#define DIFF_OPT_DIRSTAT_CUMULATIVE (1 << 19)
+#define DIFF_OPT_DIRSTAT_BY_FILE (1 << 20)
#define DIFF_OPT_TST(opts, flag) ((opts)->flags & DIFF_OPT_##flag)
#define DIFF_OPT_SET(opts, flag) ((opts)->flags |= DIFF_OPT_##flag)
#define DIFF_OPT_CLR(opts, flag) ((opts)->flags &= ~DIFF_OPT_##flag)