git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 00/18] Add `branch-diff`, a `tbdiff` lookalike

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
May 4, 2018, 15:34 UTC
Message-ID
<cover.1525448066.git.johannes.schindelin@gmx.de>
In-Reply-To
<cover.1525361419.git.johannes.schindelin@gmx.de>

The incredibly useful `git-tbdiff` tool to compare patch series (say, to see what changed between two iterations sent to the Git mailing list) is slightly less useful for this developer due to the fact that it requires the `hungarian` and `numpy` Python packages which are for some reason really hard to build in MSYS2. So hard that I even had to give up, because it was simply easier to reimplement the whole shebang as a builtin command.

The project at https://github.com/trast/tbdiff seems to be dormant, anyway. Funny (and true) story: I looked at the open Pull Requests to see how active that project is, only to find to my surprise that I had submitted one in August 2015, and that it was still unanswered let alone merged.

While at it, I forward-ported AEvar's patch to force `--decorate=no` because `git -p tbdiff` would fail otherwise.

Side note: I work on implementing branch-diff not only to make life easier for reviewers who have to suffer through v2, v3, ... of my patch series, but also to verify my changes before submitting a new iteraion. And also, maybe even more importantly, I plan to use it to verify my merging-rebases of Git for Windows (for which I previously used to redirect the pre-rebase/post-rebase diffs vs upstream and then compare them using `git diff --no-index`). And of course any interested person can see what changes were necessary e.g. in the merging-rebase of Git for Windows onto v2.17.0 by running a command like:

	base=^{/Start.the.merging-rebase}
	tag=v2.17.0.windows.1
	pre=$tag$base^2
	git branch-diff --dual-color $pre$base..$pre $tag$base..$tag

The --dual-color mode will identify the many changes that are solely due to different diff context lines (where otherwise uncolored lines start with a background-colored -/+ marker), i.e. merge conflicts I had to resolve.

Changes since v1:
- Fixed the usage to *not* say "rebase--helper" (oops, now everybody knows that
  I copy-edited that code... ;-))
- Removed `branch-diff` from the `git help` output for now, by removing the
  `info` keyword from the respective line in command-list.txt.
- Removed the bogus `COLOR_DUAL_MODE` constant that was introduced in one
  patch, only to be removed in the next one.
- Fixed typo "emtpy".
- Fixed `make sparse` warnings.
- Changed the usage string to avoid the confusing lower-case bare `base`.
- Fixed tyop in commit message: "Pythong".
- Removed an awkward empty line before a `continue;` statement.
- Released the `line` strbuf after use.
- Fixed a typo and some "foreigner's English" in the commit message of
  "branch-diff: also show the diff between patches".
- Avoided introducing --no-patches too early and then replacing it by the
  version that uses the diff_options.
- Fixed the man page to continue with upper-case after a colon.

The branch-diff of v1 vs 2 is best viewed with --dual-color; This helps e.g. with identifying changed *context* lines in the diff:

git branch-diff --dual-color origin/master branch-diff-v1 branch-diff-v2

(assuming that your `origin` points to git.git and that you fetched the tags from https://github.com/dscho/git). For example, you will see that the only change in patch #10 is a change in the diff context (due to the change of the usage string in patch #2):

10:  9810869ced9 ! 10:  2695a6abc46 branch-diff: do not show "function names" in hunk headers
    @@ -17,7 +17,7 @@
     +#include "userdiff.h"
      static const char * const builtin_branch_diff_usage[] = {
    -   N_("git rebase--helper [<options>] ( A..B C..D | A...B | base A B )"),
    + N_("git branch-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"),
     @@
        return data;
      }
Johannes Schindelin (17):
  Add a function to solve least-cost assignment problems
  Add a new builtin: branch-diff
  branch-diff: first rudimentary implementation
  branch-diff: improve the order of the shown commits
  branch-diff: also show the diff between patches
  branch-diff: right-trim commit messages
  branch-diff: indent the diffs just like tbdiff
  branch-diff: suppress the diff headers
  branch-diff: adjust the output of the commit pairs
  branch-diff: do not show "function names" in hunk headers
  branch-diff: use color for the commit pairs
  color: provide inverted colors, too
  diff: add an internal option to dual-color diffs of diffs
  branch-diff: offer to dual-color the diffs
  branch-diff --dual-color: work around bogus white-space warning
  branch-diff: add a man page
  completion: support branch-diff
Thomas Rast (1):
  branch-diff: add tests
 .gitignore                             |   1 +
 Documentation/git-branch-diff.txt      | 239 ++++++++++
 Makefile                               |   2 +
 builtin.h                              |   1 +
 builtin/branch-diff.c                  | 534 ++++++++++++++++++++++
 color.h                                |   6 +
 command-list.txt                       |   1 +
 contrib/completion/git-completion.bash |  18 +
 diff.c                                 |  76 +++-
 diff.h                                 |   6 +-
 git.c                                  |   1 +
 hungarian.c                            | 205 +++++++++
 hungarian.h                            |  19 +
 t/.gitattributes                       |   1 +
 t/t7910-branch-diff.sh                 | 144 ++++++
 t/t7910/history.export                 | 604 +++++++++++++++++++++++++
 16 files changed, 1846 insertions(+), 12 deletions(-)
 create mode 100644 Documentation/git-branch-diff.txt
 create mode 100644 builtin/branch-diff.c
 create mode 100644 hungarian.c
 create mode 100644 hungarian.h
 create mode 100755 t/t7910-branch-diff.sh
 create mode 100644 t/t7910/history.export
base-commit: 1f1cddd558b54bb0ce19c8ace353fd07b758510d
Published-As: https://github.com/dscho/git/releases/tag/branch-diff-v2
Fetch-It-Via: git fetch https://github.com/dscho/git branch-diff-v2
Branch-diff vs v1:
  1: 8bc517e35d4 !  1: a1ea0320b64 Add a new builtin: branch-diff
     @@ -7,8 +7,9 @@
          the next commits will turn `branch-diff` into a full-blown replacement
          for `tbdiff`.
          
     -    At this point, we ignore tbdiff's color options, as they will all be
     -    implemented later and require some patches to the diff machinery.
     +    At this point, we ignore tbdiff's color options as well as the
     +    --no-patches option, as they will all be implemented later using
     +    diff_options.
          
          Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
      
     @@ -54,14 +55,15 @@
      +++ b/builtin/branch-diff.c
      @@
      +#include "cache.h"
     ++#include "builtin.h"
      +#include "parse-options.h"
      +
      +static const char * const builtin_branch_diff_usage[] = {
     -+	N_("git rebase--helper [<options>] ( A..B C..D | A...B | base A B )"),
     -+	NULL
     ++N_("git branch-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"),
     ++N_("git branch-diff [<options>] <old-tip>...<new-tip>"),
     ++N_("git branch-diff [<options>] <base> <old-tip> <new-tip>"),
     ++NULL
      +};
     -+
     -+#define COLOR_DUAL_MODE 2
      +
      +static int parse_creation_weight(const struct option *opt, const char *arg,
      +				 int unset)
     @@ -76,11 +78,8 @@
      +
      +int cmd_branch_diff(int argc, const char **argv, const char *prefix)
      +{
     -+	int no_patches = 0;
      +	double creation_weight = 0.6;
      +	struct option options[] = {
     -+		OPT_BOOL(0, "no-patches", &no_patches,
     -+			 N_("short format (no diffs)")),
      +		{ OPTION_CALLBACK,
      +			0, "creation-weight", &creation_weight, N_("factor"),
      +			N_("Fudge factor by which creation is weighted [0.6]"),
     @@ -101,7 +100,7 @@
       git-bisect                              mainporcelain           info
       git-blame                               ancillaryinterrogators
       git-branch                              mainporcelain           history
     -+git-branch-diff                         mainporcelain           info
     ++git-branch-diff                         mainporcelain
       git-bundle                              mainporcelain
       git-cat-file                            plumbinginterrogators
       git-check-attr                          purehelpers
  2: ec51c71779a !  2: e530e450ebd branch-diff: first rudimentary implementation
     @@ -13,7 +13,7 @@
          really concentrates on getting the patch matching part right.
          
          Note: due to differences in the diff algorithm (`tbdiff` uses the
     -    Pythong module `difflib`, Git uses its xdiff fork), the cost matrix
     +    Python module `difflib`, Git uses its xdiff fork), the cost matrix
          calculated by `branch-diff` is different (but very similar) to the one
          calculated by `tbdiff`. Therefore, it is possible that they find
          different matching commits in corner cases (e.g. when a patch was split
     @@ -26,6 +26,7 @@
      +++ b/builtin/branch-diff.c
      @@
       #include "cache.h"
     + #include "builtin.h"
       #include "parse-options.h"
      +#include "string-list.h"
      +#include "run-command.h"
     @@ -35,15 +36,7 @@
      +#include "hungarian.h"
       
       static const char * const builtin_branch_diff_usage[] = {
     - 	N_("git rebase--helper [<options>] ( A..B C..D | A...B | base A B )"),
     - 	NULL
     - };
     - 
     --#define COLOR_DUAL_MODE 2
     --
     - static int parse_creation_weight(const struct option *opt, const char *arg,
     - 				 int unset)
     - {
     + N_("git branch-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"),
      @@
       	return 0;
       }
     @@ -128,7 +121,6 @@
      +				strbuf_addbuf(&buf, &line);
      +				strbuf_addch(&buf, '\n');
      +			}
     -+
      +			continue;
      +		} else if (starts_with(line.buf, "@@ "))
      +			strbuf_addstr(&buf, "@@");
     @@ -148,6 +140,7 @@
      +		util->diffsize++;
      +	}
      +	fclose(in);
     ++	strbuf_release(&line);
      +
      +	if (util)
      +		string_list_append(list, buf.buf)->util = util;
     @@ -323,7 +316,7 @@
      +
       int cmd_branch_diff(int argc, const char **argv, const char *prefix)
       {
     - 	int no_patches = 0;
     + 	double creation_weight = 0.6;
      @@
       			0, parse_creation_weight },
       		OPT_END()
     @@ -366,7 +359,7 @@
      +		strbuf_addf(&range1, "%s..%.*s", b, a_len, a);
      +		strbuf_addf(&range2, "%.*s..%s", a_len, a, b);
      +	} else {
     -+		error("Need two commit ranges");
     ++		error(_("need two commit ranges"));
      +		usage_with_options(builtin_branch_diff_usage, options);
      +	}
      +
  3: 6a618d6010f =  3: 3032e2709b8 branch-diff: improve the order of the shown commits
  4: 141e5b63e45 !  4: 12d9c7977fd branch-diff: also show the diff between patches
     @@ -4,10 +4,12 @@
          
          Just like tbdiff, we now show the diff between matching patches. This is
          a "diff of two diffs", so it can be a bit daunting to read for the
     -    beginnger.
     +    beginner.
          
     -    This brings branch-diff closer to be feature-complete with regard to
     -    tbdiff.
     +    And just like tbdiff, we now also accept the `--no-patches` option
     +    (which is actually equivalent to the diff option `-s`).
     +    
     +    This brings branch-diff closer to feature parity with regard to tbdiff.
          
          An alternative would be to display an interdiff, i.e. the hypothetical
          diff which is the result of first reverting the old diff and then
     @@ -34,7 +36,7 @@
      +#include "diffcore.h"
       
       static const char * const builtin_branch_diff_usage[] = {
     - 	N_("git rebase--helper [<options>] ( A..B C..D | A...B | base A B )"),
     + N_("git branch-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"),
      @@
       	return find_unique_abbrev(&util->oid, DEFAULT_ABBREV);
       }
     @@ -82,12 +84,9 @@
       
       int cmd_branch_diff(int argc, const char **argv, const char *prefix)
       {
     --	int no_patches = 0;
     -+	struct diff_options diffopt = { 0 };
     ++	struct diff_options diffopt = { NULL };
       	double creation_weight = 0.6;
       	struct option options[] = {
     --		OPT_BOOL(0, "no-patches", &no_patches,
     --			 N_("short format (no diffs)")),
      +		OPT_SET_INT(0, "no-patches", &diffopt.output_format,
      +			    N_("short format (no diffs)"),
      +			    DIFF_FORMAT_NO_OUTPUT),
  5: 303419c56c4 =  5: 53ee6ba3873 branch-diff: right-trim commit messages
  6: 218e56a69e0 !  6: c856c460a47 branch-diff: indent the diffs just like tbdiff
     @@ -26,7 +26,7 @@
      @@
       int cmd_branch_diff(int argc, const char **argv, const char *prefix)
       {
     - 	struct diff_options diffopt = { 0 };
     + 	struct diff_options diffopt = { NULL };
      +	struct strbuf four_spaces = STRBUF_INIT;
       	double creation_weight = 0.6;
       	struct option options[] = {
  7: 00ea45123ae =  7: 35a9681a192 branch-diff: suppress the diff headers
  8: 40471263d3c !  8: 0e4c8279e46 branch-diff: adjust the output of the commit pairs
     @@ -19,7 +19,7 @@
      +#include "pretty.h"
       
       static const char * const builtin_branch_diff_usage[] = {
     - 	N_("git rebase--helper [<options>] ( A..B C..D | A...B | base A B )"),
     + N_("git branch-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"),
      @@
       	return res;
       }
  9: 9810869ced9 !  9: 2695a6abc46 branch-diff: do not show "function names" in hunk headers
     @@ -17,7 +17,7 @@
      +#include "userdiff.h"
       
       static const char * const builtin_branch_diff_usage[] = {
     - 	N_("git rebase--helper [<options>] ( A..B C..D | A...B | base A B )"),
     + N_("git branch-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"),
      @@
       	return data;
       }
 10: fe12b99a0b4 ! 10: 313beeed3d1 branch-diff: add tests
     @@ -12,7 +12,7 @@
          sometimes ambiguous. In this case, a comment line and an empty line are
          added, but it is ambiguous whether they were added after the existing
          empty line, or whether an empty line and the comment line are added
     -    *before* the existing emtpy line. And apparently xdiff picks a different
     +    *before* the existing empty line. And apparently xdiff picks a different
          option here than Python's difflib.
          
          Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
 11: c89937afc28 = 11: ba4791918c7 branch-diff: use color for the commit pairs
 12: a94e94edf65 = 12: 1ebbe359547 color: provide inverted colors, too
 13: 153425de2df = 13: ae0ea5dfca5 diff: add an internal option to dual-color diffs of diffs
 14: 2f8017c732f ! 14: b9be01705d6 branch-diff: offer to dual-color the diffs
     @@ -18,7 +18,7 @@
      +++ b/builtin/branch-diff.c
      @@
       {
     - 	struct diff_options diffopt = { 0 };
     + 	struct diff_options diffopt = { NULL };
       	struct strbuf four_spaces = STRBUF_INIT;
      +	int dual_color = 0;
       	double creation_weight = 0.6;
 15: 62f0e2cf73f = 15: b99ab186c4f branch-diff --dual-color: work around bogus white-space warning
 16: edb34bd4f8d ! 16: 950c7537701 branch-diff: add a man page
     @@ -158,7 +158,7 @@
      +series), the cost matrix is extended to allow for that, by adding
      +fixed-cost entries for wholesale deletes/adds.
      +
     -+Example: let commits `1--2` be the first iteration of a patch series and
     ++Example: Let commits `1--2` be the first iteration of a patch series and
      +`A--C` the second iteration. Let's assume that `A` is a cherry-pick of
      +`2,` and `C` is a cherry-pick of `1` but with a small modification (say,
      +a fixed typo). Visualize the commits as a bipartite graph:
 17: 5d047a830f1 = 17: 71698f11835 completion: support branch-diff
-- 
2.17.0.409.g71698f11835
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 75 of 387 in “Add `branch-diff`, a `tbdiff` lookalike”
  1. 00/18 Add `branch-diff`, a `tbdiff` lookalikeJohannes Schindelin, May 3, 2018
  2. 01/18 Add a function to solve least-cost assignment problemsJohannes Schindelin, May 3, 2018
  3. Duy NguyenMay 13, 2018
  4. Johannes SchindelinMay 21, 2018
  5. 02/18 Add a new builtin: branch-diffJohannes Schindelin, May 3, 2018
  6. Ramsay JonesMay 3, 2018
  7. Johannes SchindelinMay 3, 2018
  8. Ramsay JonesMay 3, 2018
  9. Johannes SchindelinMay 4, 2018
  10. Ramsay JonesMay 4, 2018
  11. Johannes SchindelinMay 5, 2018
  12. Ramsay JonesMay 9, 2018
  13. Johannes SchindelinJun 1, 2018
  14. Elijah NewrenMay 4, 2018
  15. Johannes SchindelinMay 5, 2018
  16. Duy NguyenMay 3, 2018
  17. Johannes SchindelinMay 3, 2018
  18. Johannes SchindelinMay 3, 2018
  19. Duy NguyenMay 4, 2018
  20. Johannes SchindelinMay 4, 2018
  21. Duy NguyenMay 4, 2018
  22. Duy NguyenMay 4, 2018
  23. Johannes SchindelinMay 4, 2018
  24. Duy NguyenMay 4, 2018
  25. Stefan BellerMay 3, 2018
  26. Johannes SchindelinMay 3, 2018
  27. Stefan BellerMay 3, 2018
  28. Johannes SchindelinMay 3, 2018
  29. Junio C HamanoMay 4, 2018
  30. Eric SunshineMay 4, 2018
  31. Johannes SchindelinMay 4, 2018
  32. Eric SunshineMay 4, 2018
  33. 03/18 branch-diff: first rudimentary implementationJohannes Schindelin, May 3, 2018
  34. Ramsay JonesMay 3, 2018
  35. Johannes SchindelinMay 3, 2018
  36. Stefan BellerMay 3, 2018
  37. Johannes SchindelinMay 3, 2018
  38. Stefan BellerMay 3, 2018
  39. Johannes SchindelinMay 3, 2018
  40. Eric SunshineMay 4, 2018
  41. Johannes SchindelinMay 4, 2018
  42. Junio C HamanoMay 4, 2018
  43. Johannes SchindelinMay 4, 2018
  44. 04/18 branch-diff: improve the order of the shown commitsJohannes Schindelin, May 3, 2018
  45. 05/18 branch-diff: also show the diff between patchesJohannes Schindelin, May 3, 2018
  46. Eric SunshineMay 4, 2018
  47. Eric SunshineMay 4, 2018
  48. Johannes SchindelinMay 4, 2018
  49. 06/18 branch-diff: right-trim commit messagesJohannes Schindelin, May 3, 2018
  50. 07/18 branch-diff: indent the diffs just like tbdiffJohannes Schindelin, May 3, 2018
  51. 09/18 branch-diff: adjust the output of the commit pairsJohannes Schindelin, May 3, 2018
  52. 08/18 branch-diff: suppress the diff headersJohannes Schindelin, May 3, 2018
  53. 12/18 branch-diff: use color for the commit pairsJohannes Schindelin, May 3, 2018
  54. 11/18 branch-diff: add testsJohannes Schindelin, May 3, 2018
  55. Ævar Arnfjörð BjarmasonMay 3, 2018
  56. Johannes SchindelinMay 3, 2018
  57. Stefan BellerMay 3, 2018
  58. Johannes SchindelinMay 3, 2018
  59. Philip OakleyMay 3, 2018
  60. Johannes SchindelinMay 4, 2018
  61. 13/18 color: provide inverted colors, tooJohannes Schindelin, May 3, 2018
  62. 15/18 branch-diff: offer to dual-color the diffsJohannes Schindelin, May 3, 2018
  63. 10/18 branch-diff: do not show "function names" in hunk headersJohannes Schindelin, May 3, 2018
  64. 18/18 completion: support branch-diffJohannes Schindelin, May 3, 2018
  65. 17/18 branch-diff: add a man pageJohannes Schindelin, May 3, 2018
  66. Eric SunshineMay 4, 2018
  67. Johannes SchindelinMay 4, 2018
  68. 16/18 branch-diff --dual-color: work around bogus white-space warningJohannes Schindelin, May 3, 2018
  69. 14/18 diff: add an internal option to dual-color diffs of diffsJohannes Schindelin, May 3, 2018
  70. Ævar Arnfjörð BjarmasonMay 3, 2018
  71. Johannes SchindelinMay 3, 2018
  72. Jacob KellerMay 3, 2018
  73. Junio C HamanoMay 4, 2018
  74. Johannes SchindelinMay 4, 2018
  75. 00/18 Add `branch-diff`, a `tbdiff` lookalikeJohannes Schindelin, May 4, 2018
  76. 01/18 Add a function to solve least-cost assignment problemsJohannes Schindelin, May 4, 2018
  77. Jeff KingMay 5, 2018
  78. Johannes SchindelinMay 5, 2018
  79. SZEDER GáborMay 30, 2018
  80. Stefan BellerMay 30, 2018
  81. brian m. carlsonMay 30, 2018
  82. Johannes SchindelinMay 31, 2018
  83. 02/18 Add a new builtin: branch-diffJohannes Schindelin, May 4, 2018
  84. Jeff KingMay 5, 2018
  85. Johannes SchindelinMay 5, 2018
  86. Todd ZullingerMay 6, 2018
  87. Todd ZullingerMay 6, 2018
  88. Johannes SchindelinMay 6, 2018
  89. Igor DjordjevicMay 6, 2018
  90. Jacob KellerMay 6, 2018
  91. Duy NguyenMay 6, 2018
  92. Johannes SchindelinMay 6, 2018
  93. Johannes SchindelinMay 6, 2018
  94. Igor DjordjevicMay 6, 2018
  95. Johannes SchindelinMay 7, 2018
  96. Igor DjordjevicMay 7, 2018
  97. Stefan BellerMay 7, 2018
  98. Igor DjordjevicMay 7, 2018
  99. Jeff KingMay 8, 2018
  100. Jeff KingMay 8, 2018
  101. Ævar Arnfjörð BjarmasonMay 22, 2018
  102. Stefan BellerMay 25, 2018
  103. Junio C HamanoMay 6, 2018
  104. Johannes SchindelinMay 6, 2018
  105. Eric SunshineMay 6, 2018
  106. Johannes SchindelinMay 7, 2018
  107. Jeff KingMay 7, 2018
  108. Igor DjordjevicMay 7, 2018
  109. Johannes SchindelinMay 21, 2018
  110. Stefan BellerMay 21, 2018
  111. Jeff KingMay 21, 2018
  112. Brandon WilliamsMay 21, 2018
  113. Stefan BellerMay 21, 2018
  114. Jeff KingMay 21, 2018
  115. Junio C HamanoMay 22, 2018
  116. Junio C HamanoMay 8, 2018
  117. Junio C HamanoMay 7, 2018
  118. Johannes SchindelinMay 7, 2018
  119. Junio C HamanoMay 7, 2018
  120. Johannes SchindelinMay 21, 2018
  121. Jeff KingMay 7, 2018
  122. Duy NguyenMay 7, 2018
  123. Stefan BellerMay 7, 2018
  124. 05/18 branch-diff: also show the diff between patchesJohannes Schindelin, May 4, 2018
  125. Igor DjordjevicMay 6, 2018
  126. Johannes SchindelinMay 6, 2018
  127. 06/18 branch-diff: right-trim commit messagesJohannes Schindelin, May 4, 2018
  128. 08/18 branch-diff: suppress the diff headersJohannes Schindelin, May 4, 2018
  129. 10/18 branch-diff: do not show "function names" in hunk headersJohannes Schindelin, May 4, 2018
  130. 03/18 branch-diff: first rudimentary implementationJohannes Schindelin, May 4, 2018
  131. 11/18 branch-diff: add testsJohannes Schindelin, May 4, 2018
  132. 07/18 branch-diff: indent the diffs just like tbdiffJohannes Schindelin, May 4, 2018
  133. Martin ÅgrenMay 6, 2018
  134. Johannes SchindelinMay 7, 2018
  135. 09/18 branch-diff: adjust the output of the commit pairsJohannes Schindelin, May 4, 2018
  136. Elijah NewrenMay 4, 2018
  137. 13/18 color: provide inverted colors, tooJohannes Schindelin, May 4, 2018
  138. Jeff KingMay 5, 2018
  139. Johannes SchindelinMay 5, 2018
  140. Jeff KingMay 6, 2018
  141. Jeff KingMay 6, 2018
  142. Johannes SchindelinMay 7, 2018
  143. Jeff KingMay 7, 2018
  144. Junio C HamanoMay 7, 2018
  145. Johannes SchindelinMay 7, 2018
  146. Jeff KingMay 7, 2018
  147. 15/18 branch-diff: offer to dual-color the diffsJohannes Schindelin, May 4, 2018
  148. 17/18 branch-diff: add a man pageJohannes Schindelin, May 4, 2018
  149. 14/18 diff: add an internal option to dual-color diffs of diffsJohannes Schindelin, May 4, 2018
  150. 18/18 completion: support branch-diffJohannes Schindelin, May 4, 2018
  151. Duy NguyenMay 6, 2018
  152. Johannes SchindelinMay 7, 2018
  153. 04/18 branch-diff: improve the order of the shown commitsJohannes Schindelin, May 4, 2018
  154. 12/18 branch-diff: use color for the commit pairsJohannes Schindelin, May 4, 2018
  155. Todd ZullingerMay 5, 2018
  156. Johannes SchindelinMay 7, 2018
  157. Todd ZullingerMay 8, 2018
  158. Johannes SchindelinJun 1, 2018
  159. 16/18 branch-diff --dual-color: work around bogus white-space warningJohannes Schindelin, May 4, 2018
  160. Elijah NewrenMay 4, 2018
  161. Elijah NewrenMay 4, 2018
  162. Johannes SchindelinMay 5, 2018
  163. Elijah NewrenMay 7, 2018
  164. SZEDER GáborMay 7, 2018
  165. Elijah NewrenMay 7, 2018
  166. Junio C HamanoMay 6, 2018
  167. Johannes SchindelinMay 6, 2018
  168. brian m. carlsonMay 6, 2018
  169. Johannes SchindelinMay 7, 2018
  170. 00/20 Add `range-diff`, a `tbdiff` lookalikeJohannes Schindelin via GitGitGadget, Jul 3, 2018
  171. 01/20 linear-assignment: a function to solve least-cost assignment problemsJohannes Schindelin via GitGitGadget, Apr 30, 2018
  172. Junio C HamanoJul 6, 2018
  173. Johannes SchindelinJul 7, 2018
  174. Junio C HamanoJul 7, 2018
  175. Johannes SchindelinJul 7, 2018
  176. Johannes SchindelinJul 7, 2018
  177. refs/notes/amlog problems, was Re: [PATCH v3 01/20] linear-assignment: a function to solve least-cost assignment problemsJohannes Schindelin, Jul 9, 2018
  178. Junio C HamanoJul 11, 2018
  179. Johannes SchindelinJul 12, 2018
  180. Junio C HamanoJul 12, 2018
  181. Junio C HamanoJul 19, 2018
  182. Johannes SchindelinJul 20, 2018
  183. Junio C HamanoJul 20, 2018
  184. Stefan BellerJul 20, 2018
  185. Junio C HamanoJul 20, 2018
  186. Johannes SchindelinJul 21, 2018
  187. Jeff KingJul 23, 2018
  188. Junio C HamanoJul 24, 2018
  189. Jeff KingJul 24, 2018
  190. Junio C HamanoJul 9, 2018
  191. refs/notes/amlog woes, was Re: [PATCH v3 01/20] linear-assignment: a function to solve least-cost assignment problemsJohannes Schindelin, Jul 10, 2018
  192. SZEDER GáborJul 11, 2018
  193. Johannes SchindelinJul 12, 2018
  194. 02/20 Introduce `range-diff` to compare iterations of a topic branchJohannes Schindelin via GitGitGadget, May 1, 2018
  195. 03/20 range-diff: first rudimentary implementationJohannes Schindelin via GitGitGadget, May 2, 2018
  196. Eric SunshineJul 16, 2018
  197. Johannes SchindelinJul 17, 2018
  198. 04/20 range-diff: improve the order of the shown commitsJohannes Schindelin via GitGitGadget, May 2, 2018
  199. 06/20 range-diff: right-trim commit messagesJohannes Schindelin via GitGitGadget, May 2, 2018
  200. 07/20 range-diff: indent the diffs just like tbdiffJohannes Schindelin via GitGitGadget, May 2, 2018
  201. 08/20 range-diff: suppress the diff headersJohannes Schindelin via GitGitGadget, May 2, 2018
  202. 11/20 range-diff: add testsThomas Rast via GitGitGadget, May 2, 2018
  203. Eric SunshineJul 16, 2018
  204. Johannes SchindelinJul 17, 2018
  205. 09/20 range-diff: adjust the output of the commit pairsJohannes Schindelin via GitGitGadget, May 2, 2018
  206. Eric SunshineJul 16, 2018
  207. Johannes SchindelinJul 17, 2018
  208. Stefan BellerJul 17, 2018
  209. Johannes SchindelinJul 20, 2018
  210. Stefan BellerJul 20, 2018
  211. Johannes SchindelinJul 21, 2018
  212. 12/20 range-diff: use color for the commit pairsJohannes Schindelin via GitGitGadget, May 2, 2018
  213. 13/20 color: add the meta color GIT_COLOR_REVERSEJohannes Schindelin via GitGitGadget, May 3, 2018
  214. 14/20 diff: add an internal option to dual-color diffs of diffsJohannes Schindelin via GitGitGadget, May 3, 2018
  215. Stefan BellerJul 9, 2018
  216. 0/2 Re: [PATCH v3 14/20] diff: add an internal option to dual-color diffs of diffsStefan Beller, Jul 10, 2018
  217. 2/2 WIP diff.c: clarify emit_line_0Stefan Beller, Jul 10, 2018
  218. 1/2 diff.c: convert emit_line_ws_markup to take string for signStefan Beller, Jul 10, 2018
  219. diff.c: clarify emit_line_0Stefan Beller, Jul 10, 2018
  220. ws: do not reset and set color twiceStefan Beller, Jul 10, 2018
  221. 1/2 diff.c: convert emit_line_ws_markup to take string for signStefan Beller, Jul 10, 2018
  222. Johannes SchindelinJul 21, 2018
  223. 15/20 range-diff: offer to dual-color the diffsJohannes Schindelin via GitGitGadget, May 3, 2018
  224. 16/20 range-diff --dual-color: work around bogus white-space warningJohannes Schindelin via GitGitGadget, May 3, 2018
  225. Stefan BellerJul 9, 2018
  226. Junio C HamanoJul 9, 2018
  227. Johannes SchindelinJul 10, 2018
  228. Junio C HamanoJul 10, 2018
  229. Stefan BellerJul 10, 2018
  230. Johannes SchindelinJul 21, 2018
  231. 17/20 range-diff: add a man pageJohannes Schindelin via GitGitGadget, May 3, 2018
  232. Stefan BellerJul 9, 2018
  233. Johannes SchindelinJul 9, 2018
  234. Stefan BellerJul 9, 2018
  235. Johannes SchindelinJul 9, 2018
  236. Eric SunshineJul 16, 2018
  237. Johannes SchindelinJul 17, 2018
  238. 18/20 completion: support `git range-diff`Johannes Schindelin via GitGitGadget, May 3, 2018
  239. Junio C HamanoJul 6, 2018
  240. Johannes SchindelinJul 7, 2018
  241. 19/20 range-diff: left-pad patch numbersJohannes Schindelin via GitGitGadget, May 5, 2018
  242. 05/20 range-diff: also show the diff between patchesJohannes Schindelin via GitGitGadget, May 6, 2018
  243. 10/20 range-diff: do not show "function names" in hunk headersJohannes Schindelin via GitGitGadget, May 6, 2018
  244. 20/20 range-diff: make --dual-color the default modeJohannes Schindelin via GitGitGadget, Jun 30, 2018
  245. Eric SunshineJul 16, 2018
  246. Johannes SchindelinJul 17, 2018
  247. 00/21 Add `range-diff`, a `tbdiff` lookalikeJohannes Schindelin via GitGitGadget, Jul 21, 2018
  248. 01/21 linear-assignment: a function to solve least-cost assignment problemsJohannes Schindelin via GitGitGadget, Jul 21, 2018
  249. Thomas GummererJul 28, 2018
  250. Johannes SchindelinJul 30, 2018
  251. 02/21 Introduce `range-diff` to compare iterations of a topic branchJohannes Schindelin via GitGitGadget, Jul 21, 2018
  252. 03/21 range-diff: first rudimentary implementationJohannes Schindelin via GitGitGadget, Jul 21, 2018
  253. Thomas GummererJul 29, 2018
  254. Johannes SchindelinJul 30, 2018
  255. Thomas GummererJul 30, 2018
  256. Johannes SchindelinAug 10, 2018
  257. 04/21 range-diff: improve the order of the shown commitsJohannes Schindelin via GitGitGadget, Jul 21, 2018
  258. 05/21 range-diff: also show the diff between patchesJohannes Schindelin via GitGitGadget, Jul 21, 2018
  259. Thomas GummererJul 29, 2018
  260. Eric SunshineJul 29, 2018
  261. Thomas GummererJul 29, 2018
  262. Johannes SchindelinJul 30, 2018
  263. Thomas GummererJul 30, 2018
  264. Eric SunshineJul 30, 2018
  265. Johannes SchindelinAug 10, 2018
  266. Eric SunshineAug 10, 2018
  267. Johannes SchindelinAug 10, 2018
  268. Johannes SchindelinAug 10, 2018
  269. 06/21 range-diff: right-trim commit messagesJohannes Schindelin via GitGitGadget, Jul 21, 2018
  270. 08/21 range-diff: suppress the diff headersJohannes Schindelin via GitGitGadget, Jul 21, 2018
  271. 09/21 range-diff: adjust the output of the commit pairsJohannes Schindelin via GitGitGadget, Jul 21, 2018
  272. Thomas GummererJul 29, 2018
  273. Johannes SchindelinAug 10, 2018
  274. Thomas GummererJul 29, 2018
  275. 10/21 range-diff: do not show "function names" in hunk headersJohannes Schindelin via GitGitGadget, Jul 21, 2018
  276. Thomas GummererJul 29, 2018
  277. Johannes SchindelinAug 10, 2018
  278. 07/21 range-diff: indent the diffs just like tbdiffJohannes Schindelin via GitGitGadget, Jul 21, 2018
  279. 11/21 range-diff: add testsThomas Rast via GitGitGadget, Jul 21, 2018
  280. Eric SunshineJul 22, 2018
  281. Johannes SchindelinJul 30, 2018
  282. Junio C HamanoJul 30, 2018
  283. Stefan BellerJul 30, 2018
  284. Junio C HamanoJul 31, 2018
  285. Stefan BellerJul 23, 2018
  286. 13/21 color: add the meta color GIT_COLOR_REVERSEJohannes Schindelin via GitGitGadget, Jul 21, 2018
  287. 12/21 range-diff: use color for the commit pairsJohannes Schindelin via GitGitGadget, Jul 21, 2018
  288. 14/21 diff: add an internal option to dual-color diffs of diffsJohannes Schindelin via GitGitGadget, Jul 21, 2018
  289. Junio C HamanoJul 23, 2018
  290. Stefan BellerJul 23, 2018
  291. 15/21 range-diff: offer to dual-color the diffsJohannes Schindelin via GitGitGadget, Jul 21, 2018
  292. 16/21 range-diff --dual-color: fix bogus white-space warningJohannes Schindelin via GitGitGadget, Jul 21, 2018
  293. Stefan BellerJul 23, 2018
  294. Johannes SchindelinAug 10, 2018
  295. Junio C HamanoJul 23, 2018
  296. Junio C HamanoJul 24, 2018
  297. 18/21 completion: support `git range-diff`Johannes Schindelin via GitGitGadget, Jul 21, 2018
  298. Eric SunshineJul 22, 2018
  299. Johannes SchindelinAug 10, 2018
  300. 17/21 range-diff: populate the man pageJohannes Schindelin via GitGitGadget, Jul 21, 2018
  301. Thomas GummererJul 29, 2018
  302. Johannes SchindelinAug 10, 2018
  303. 19/21 range-diff: left-pad patch numbersJohannes Schindelin via GitGitGadget, Jul 21, 2018
  304. 20/21 range-diff: make --dual-color the default modeJohannes Schindelin via GitGitGadget, Jul 21, 2018
  305. Thomas GummererJul 29, 2018
  306. Johannes SchindelinAug 10, 2018
  307. 21/21 range-diff: use dim/bold cues to improve dual color modeJohannes Schindelin via GitGitGadget, Jul 21, 2018
  308. Stefan BellerJul 23, 2018
  309. Junio C HamanoJul 23, 2018
  310. Stefan BellerJul 25, 2018
  311. Johannes SchindelinJul 26, 2018
  312. Johannes SchindelinAug 8, 2018
  313. Stefan BellerAug 8, 2018
  314. Johannes SchindelinAug 10, 2018
  315. Junio C HamanoAug 10, 2018
  316. Johannes SchindelinAug 10, 2018
  317. Thomas GummererJul 29, 2018
  318. 00/21 Add range-diff, a tbdiff lookalikeJohannes Schindelin via GitGitGadget, Aug 10, 2018
  319. 01/21 linear-assignment: a function to solve least-cost assignment problemsJohannes Schindelin via GitGitGadget, Aug 10, 2018
  320. 02/21 Introduce `range-diff` to compare iterations of a topic branchJohannes Schindelin via GitGitGadget, Aug 10, 2018
  321. 03/21 range-diff: first rudimentary implementationJohannes Schindelin via GitGitGadget, Aug 10, 2018
  322. 04/21 range-diff: improve the order of the shown commitsJohannes Schindelin via GitGitGadget, Aug 10, 2018
  323. 06/21 range-diff: right-trim commit messagesJohannes Schindelin via GitGitGadget, Aug 10, 2018
  324. 05/21 range-diff: also show the diff between patchesJohannes Schindelin via GitGitGadget, Aug 10, 2018
  325. Thomas GummererAug 12, 2018
  326. Johannes SchindelinAug 13, 2018
  327. Thomas GummererAug 13, 2018
  328. 07/21 range-diff: indent the diffs just like tbdiffJohannes Schindelin via GitGitGadget, Aug 10, 2018
  329. 08/21 range-diff: suppress the diff headersJohannes Schindelin via GitGitGadget, Aug 10, 2018
  330. 09/21 range-diff: adjust the output of the commit pairsJohannes Schindelin via GitGitGadget, Aug 10, 2018
  331. 10/21 range-diff: do not show "function names" in hunk headersJohannes Schindelin via GitGitGadget, Aug 10, 2018
  332. 11/21 range-diff: add testsThomas Rast via GitGitGadget, Aug 10, 2018
  333. 12/21 range-diff: use color for the commit pairsJohannes Schindelin via GitGitGadget, Aug 10, 2018
  334. 13/21 color: add the meta color GIT_COLOR_REVERSEJohannes Schindelin via GitGitGadget, Aug 10, 2018
  335. 14/21 diff: add an internal option to dual-color diffs of diffsJohannes Schindelin via GitGitGadget, Aug 10, 2018
  336. 15/21 range-diff: offer to dual-color the diffsJohannes Schindelin via GitGitGadget, Aug 10, 2018
  337. 16/21 range-diff --dual-color: skip white-space warningsJohannes Schindelin via GitGitGadget, Aug 10, 2018
  338. 17/21 range-diff: populate the man pageJohannes Schindelin via GitGitGadget, Aug 10, 2018
  339. 18/21 completion: support `git range-diff`Johannes Schindelin via GitGitGadget, Aug 10, 2018
  340. 19/21 range-diff: left-pad patch numbersJohannes Schindelin via GitGitGadget, Aug 10, 2018
  341. 20/21 range-diff: make --dual-color the default modeJohannes Schindelin via GitGitGadget, Aug 10, 2018
  342. 21/21 range-diff: use dim/bold cues to improve dual color modeJohannes Schindelin via GitGitGadget, Aug 10, 2018
  343. 00/21 Add range-diff, a tbdiff lookalikeJohannes Schindelin via GitGitGadget, Aug 13, 2018
  344. 01/21 linear-assignment: a function to solve least-cost assignment problemsJohannes Schindelin via GitGitGadget, Aug 13, 2018
  345. 02/21 Introduce `range-diff` to compare iterations of a topic branchJohannes Schindelin via GitGitGadget, Aug 13, 2018
  346. 03/21 range-diff: first rudimentary implementationJohannes Schindelin via GitGitGadget, Aug 13, 2018
  347. Junio C HamanoMar 5, 2019
  348. 04/21 range-diff: improve the order of the shown commitsJohannes Schindelin via GitGitGadget, Aug 13, 2018
  349. 05/21 range-diff: also show the diff between patchesJohannes Schindelin via GitGitGadget, Aug 13, 2018
  350. 06/21 range-diff: right-trim commit messagesJohannes Schindelin via GitGitGadget, Aug 13, 2018
  351. 07/21 range-diff: indent the diffs just like tbdiffJohannes Schindelin via GitGitGadget, Aug 13, 2018
  352. 08/21 range-diff: suppress the diff headersJohannes Schindelin via GitGitGadget, Aug 13, 2018
  353. 09/21 range-diff: adjust the output of the commit pairsJohannes Schindelin via GitGitGadget, Aug 13, 2018
  354. 10/21 range-diff: do not show "function names" in hunk headersJohannes Schindelin via GitGitGadget, Aug 13, 2018
  355. 11/21 range-diff: add testsThomas Rast via GitGitGadget, Aug 13, 2018
  356. Thomas GummererAug 13, 2018
  357. Johannes SchindelinAug 14, 2018
  358. Jeff KingAug 14, 2018
  359. Jeff KingAug 14, 2018
  360. Junio C HamanoAug 14, 2018
  361. 12/21 range-diff: use color for the commit pairsJohannes Schindelin via GitGitGadget, Aug 13, 2018
  362. 13/21 color: add the meta color GIT_COLOR_REVERSEJohannes Schindelin via GitGitGadget, Aug 13, 2018
  363. 15/21 range-diff: offer to dual-color the diffsJohannes Schindelin via GitGitGadget, Aug 13, 2018
  364. 16/21 range-diff --dual-color: skip white-space warningsJohannes Schindelin via GitGitGadget, Aug 13, 2018
  365. Junio C HamanoAug 13, 2018
  366. 17/21 range-diff: populate the man pageJohannes Schindelin via GitGitGadget, Aug 13, 2018
  367. Ævar Arnfjörð BjarmasonSep 9, 2018
  368. SZEDER GáborSep 9, 2018
  369. Ævar Arnfjörð BjarmasonSep 9, 2018
  370. Jeff KingSep 10, 2018
  371. Johannes SchindelinOct 2, 2018
  372. Junio C HamanoSep 10, 2018
  373. 18/21 completion: support `git range-diff`Johannes Schindelin via GitGitGadget, Aug 13, 2018
  374. 19/21 range-diff: left-pad patch numbersJohannes Schindelin via GitGitGadget, Aug 13, 2018
  375. 20/21 range-diff: make --dual-color the default modeJohannes Schindelin via GitGitGadget, Aug 13, 2018
  376. 21/21 range-diff: use dim/bold cues to improve dual color modeJohannes Schindelin via GitGitGadget, Aug 13, 2018
  377. 14/21 diff: add an internal option to dual-color diffs of diffsJohannes Schindelin via GitGitGadget, Aug 13, 2018
  378. Johannes SchindelinAug 13, 2018
  379. Thomas GummererAug 13, 2018
  380. Junio C HamanoMay 21, 2018
  381. Johannes SchindelinMay 21, 2018
  382. Junio C HamanoMay 22, 2018
  383. Johannes SchindelinJun 1, 2018
  384. Fwd: [PATCH v2 02/18] Add a new builtin: branch-diffØyvind Rønningstad, May 26, 2018
  385. Johannes SchindelinJun 1, 2018
  386. Stefan BellerJul 20, 2018
  387. Johannes SchindelinJul 21, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.