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

[PATCH v2 0/7] making log --first-parent imply -m

From
Jeff King <peff@peff.net>
Date
Jul 29, 2020, 20:10 UTC
Message-ID
<20200729201002.GA2989059@coredump.intra.peff.net>
In-Reply-To
<20200728163617.GA2649887@coredump.intra.peff.net>
On Tue, Jul 28, 2020 at 12:36:18PM -0400, Jeff King wrote:
> This series just makes --first-parent imply -m. That doesn't change any
> output by itself, but does mean that diff options like "-p", "-S", etc,
> behave sensibly.
Here's a re-roll taking into account the discussion so far:
  - the escape hatch option name is flipped to "--no-diff-merges" (with
    "--diff-merges" matching "-m")
  - the documentation now discusses the change as well as the existing
    handling of merges; this involved a few extra cleanups. Try
    "doc-diff" for a better view of the actual rendered changes.
    I do think longer term we'd be better off to stop having this maze
    of ifdef'd inclusions, and just have gitdiff(7) which covers all of
    the possibilities in human-readable text (so yes, you might see a
    mention of diff-files while you're looking for info on git-log, but
    that would also broaden your mind about how the different commands
    work). But that's clearly outside the scope of this series. I think
    what's here is a strict improvement.
Patches:
  [1/7]: log: drop "--cc implies -m" logic
  [2/7]: revision: add "--no-diff-merges" option to counteract "-m"
  [3/7]: log: enable "-m" automatically with "--first-parent"
  [4/7]: doc/git-log: move "Diff Formatting" from rev-list-options
  [5/7]: doc/git-log: drop "-r" diff option
  [6/7]: doc/git-log: move "-t" into diff-options list
  [7/7]: doc/git-log: clarify handling of merge commit diffs
 Documentation/diff-options.txt                |  5 ++
 Documentation/git-log.txt                     | 43 +++++++++-
 Documentation/rev-list-options.txt            | 45 -----------
 builtin/log.c                                 |  7 +-
 revision.c                                    | 10 ++-
 revision.h                                    |  2 +-
 t/t4013-diff-various.sh                       |  1 +
 ..._--no-diff-merges_-p_--first-parent_master | 78 +++++++++++++++++++
 t/t4013/diff.log_-p_--first-parent_master     | 22 ++++++
 9 files changed, 158 insertions(+), 55 deletions(-)
 create mode 100644 t/t4013/diff.log_--no-diff-merges_-p_--first-parent_master
Range diff from v1:
1:  518deab41f = 1:  4277d82c0c log: drop "--cc implies -m" logic
2:  836553f54e ! 2:  78750f9054 revision: add "--ignore-merges" option to counteract "-m"
    @@ Metadata
     Author: Jeff King <peff@peff.net>
     
      ## Commit message ##
    -    revision: add "--ignore-merges" option to counteract "-m"
    +    revision: add "--no-diff-merges" option to counteract "-m"
     
         The "-m" option sets revs->ignore_merges to "0", but there's no way to
         undo it. This probably isn't something anybody overly cares about, since
    @@ Commit message
             functions, as well as setup_revisions() itself, avoid clobbering the
             user's preference (which until now they couldn't actually express).
     
    -      - since we now have --ignore-merges, let's add the matching
    -        --no-ignore-merges, which is just a synonym for "-m". In fact, it's
    -        simpler to just document --no-ignore-merges alongside "-m", and
    -        leave it implied that its opposite countermands it.
    +      - since we now have --no-diff-merges, let's add the matching
    +        --diff-merges, which is just a synonym for "-m". Then we don't even
    +        need to document --no-diff-merges separately; it countermands the
    +        long form of "-m" in the usual way.
     
         The new test shows that this behaves just the same as the current
         behavior without "-m".
    @@ Documentation/rev-list-options.txt: options may be given. See linkgit:git-diff-f
      	rename or copy detection have been requested).
      
      -m::
    -+--no-ignore-merges::
    ++--diff-merges::
      	This flag makes the merge commits show the full diff like
      	regular commits; for each merge parent, a separate log entry
      	and diff is generated. An exception is that only diff against
    @@ revision.c: static int handle_revision_opt(struct rev_info *revs, int argc, cons
      		revs->diffopt.flags.recursive = 1;
      		revs->diffopt.flags.tree_in_recursive = 1;
     -	} else if (!strcmp(arg, "-m")) {
    -+	} else if (!strcmp(arg, "-m") || !strcmp(arg, "--no-ignore-merges")) {
    ++	} else if (!strcmp(arg, "-m") || !strcmp(arg, "--diff-merges")) {
      		revs->ignore_merges = 0;
    -+	} else if (!strcmp(arg, "--ignore-merges")) {
    ++	} else if (!strcmp(arg, "--no-diff-merges")) {
     +		revs->ignore_merges = 1;
      	} else if (!strcmp(arg, "-c")) {
      		revs->diff = 1;
    @@ t/t4013-diff-various.sh: log --root --patch-with-stat --summary master
      log --root -c --patch-with-stat --summary master
      # improved by Timo's patch
      log --root --cc --patch-with-stat --summary master
    -+log --ignore-merges -p --first-parent master
    ++log --no-diff-merges -p --first-parent master
      log -p --first-parent master
      log -m -p --first-parent master
      log -m -p master
     
    - ## t/t4013/diff.log_--ignore-merges_-p_--first-parent_master (new) ##
    + ## t/t4013/diff.log_--no-diff-merges_-p_--first-parent_master (new) ##
     @@
    -+$ git log --ignore-merges -p --first-parent master
    ++$ git log --no-diff-merges -p --first-parent master
     +commit 59d314ad6f356dd08601a4cd5e530381da3e3c64
     +Merge: 9a6d494 c7a2ab9
     +Author: A U Thor <author@example.com>
3:  3381fefeeb ! 3:  512b230003 log: enable "-m" automatically with "--first-parent"
    @@ Commit message
     
         No new test is needed; we'll tweak the output of the existing
         "--first-parent -p" test, which now matches the "-m --first-parent -p"
    -    test. The unchanged existing test for "--ignore-merges" confirms that
    +    test. The unchanged existing test for "--no-diff-merges" confirms that
         the user can get the old behavior if they want.
     
      ## builtin/log.c ##
-:  ---------- > 4:  2310dd62a6 doc/git-log: move "Diff Formatting" from rev-list-options
-:  ---------- > 5:  7a9a6b2d94 doc/git-log: drop "-r" diff option
-:  ---------- > 6:  e369e0ac50 doc/git-log: move "-t" into diff-options list
-:  ---------- > 7:  c1e769448c doc/git-log: clarify handling of merge commit diffs
Previous: Taylor BlauNext: Jeff King
Message 15 of 86 in “making --first-parent imply -m”
  1. 0/3 making --first-parent imply -mJeff King, Jul 28, 2020
  2. 1/3 log: drop "--cc implies -m" logicJeff King, Jul 28, 2020
  3. 2/3 revision: add "--ignore-merges" option to counteract "-m"Jeff King, Jul 28, 2020
  4. Chris TorekJul 28, 2020
  5. Jeff KingJul 29, 2020
  6. Junio C HamanoJul 28, 2020
  7. Jeff KingJul 29, 2020
  8. Jeff KingJul 29, 2020
  9. Junio C HamanoJul 29, 2020
  10. 3/3 log: enable "-m" automatically with "--first-parent"Jeff King, Jul 28, 2020
  11. Jeff KingJul 28, 2020
  12. Junio C HamanoJul 28, 2020
  13. Jeff KingJul 28, 2020
  14. Taylor BlauJul 28, 2020
  15. 0/7 making log --first-parent imply -mJeff King, Jul 29, 2020
  16. 1/7 log: drop "--cc implies -m" logicJeff King, Jul 29, 2020
  17. 2/7 revision: add "--no-diff-merges" option to counteract "-m"Jeff King, Jul 29, 2020
  18. 3/7 log: enable "-m" automatically with "--first-parent"Jeff King, Jul 29, 2020
  19. Junio C HamanoJul 29, 2020
  20. 4/7 doc/git-log: move "Diff Formatting" from rev-list-optionsJeff King, Jul 29, 2020
  21. Junio C HamanoJul 29, 2020
  22. Jeff KingJul 29, 2020
  23. 5/7 doc/git-log: drop "-r" diff optionJeff King, Jul 29, 2020
  24. 6/7 doc/git-log: move "-t" into diff-options listJeff King, Jul 29, 2020
  25. Junio C HamanoJul 29, 2020
  26. Jeff KingJul 29, 2020
  27. 7/7 doc/git-log: clarify handling of merge commit diffsJeff King, Jul 29, 2020
  28. Chris TorekJul 29, 2020
  29. Sergey OrganovJul 29, 2020
  30. Jeff KingJul 31, 2020
  31. Sergey OrganovAug 2, 2020
  32. Junio C HamanoAug 2, 2020
  33. Sergey OrganovAug 3, 2020
  34. Junio C HamanoAug 3, 2020
  35. Sergey OrganovAug 3, 2020
  36. Junio C HamanoAug 3, 2020
  37. Sergey OrganovAug 3, 2020
  38. Jeff KingAug 3, 2020
  39. Sergey OrganovAug 3, 2020
  40. Jeff KingAug 3, 2020
  41. Sergey OrganovAug 3, 2020
  42. Jeff KingAug 3, 2020
  43. Sergey OrganovAug 3, 2020
  44. Sergey OrganovAug 4, 2020
  45. Junio C HamanoAug 4, 2020
  46. Jeff KingAug 4, 2020
  47. Sergey OrganovAug 4, 2020
  48. Jeff KingAug 4, 2020
  49. Junio C HamanoAug 4, 2020
  50. Sergey OrganovAug 4, 2020
  51. Jeff KingAug 4, 2020
  52. Junio C HamanoAug 4, 2020
  53. Jeff KingAug 7, 2020
  54. Sergey OrganovAug 7, 2020
  55. Junio C HamanoAug 7, 2020
  56. Sergey OrganovAug 7, 2020
  57. Junio C HamanoAug 7, 2020
  58. Sergey OrganovAug 7, 2020
  59. Jeff KingAug 7, 2020
  60. Sergey OrganovAug 7, 2020
  61. Junio C HamanoAug 7, 2020
  62. Sergey OrganovAug 7, 2020
  63. Junio C HamanoAug 7, 2020
  64. Sergey OrganovAug 7, 2020
  65. Junio C HamanoAug 7, 2020
  66. Sergey OrganovAug 7, 2020
  67. Sergey OrganovAug 4, 2020
  68. Sergey OrganovAug 4, 2020
  69. Jeff KingAug 4, 2020
  70. Jeff KingAug 4, 2020
  71. Sergey OrganovAug 4, 2020
  72. Jeff KingAug 4, 2020
  73. Sergey OrganovAug 4, 2020
  74. Jeff KingAug 4, 2020
  75. Sergey OrganovAug 4, 2020
  76. Junio C HamanoAug 4, 2020
  77. Sergey OrganovAug 4, 2020
  78. Sergey OrganovAug 4, 2020
  79. Jeff KingAug 4, 2020
  80. revision: fix die() message for "--unpacked="Sergey Organov, Aug 4, 2020
  81. Junio C HamanoAug 5, 2020
  82. Sergey OrganovAug 5, 2020
  83. Junio C HamanoAug 5, 2020
  84. Sergey OrganovAug 5, 2020
  85. Junio C HamanoAug 5, 2020
  86. Sergey OrganovAug 5, 2020

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.