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

[PATCH/RFC] updating examples/git-merge (plus a builtin/merge fix)

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Aug 17, 2010, 06:51 UTC
Message-ID
<20100817065147.GA18293@burratino>

While preparing to make some minor "git merge" changes, I noticed that the old merge script does not pass all tests any more. Since it can be easier to prototype in shell and then port to C, I think that is worth fixing.

Of course this is not urgent at all.

Patch 1 fixes a minor bug that the scripted implementation does not suffer from, illustrated by the test "merge early part of c2" from t7600-merge.sh.

The underlying problem is a subtlety in the resolve_ref() API (from v0.99.8~13, Use resolve_ref() to implement read_ref(), 2005-09-30): the "reading" argument to resolve_ref() should usually be true, but that is not obvious to newcomers.

Patches 2-7 are minor test changes. They are early in the series to give flexibility about when to merge them.

Patches 8-10 expose functionality used by merge when handling octopus merges. merge-base --octopus is get_octopus_merge_bases(), used to provide basis arguments when running the "git merge-octopus" command. Of course the latter does not care about its basis arguments, but that is a topic for another series. merge-base --independent is reduce_refs(), used to reduce the parent list when --no-ff is not in use.

These are analagous to show-branch --merge-base and show-branch --independent but are slower and can be used with more than 25 refs.

Patch 11 exposes the functionality from fmt-merge-msg needed to implement merge --log -m.

Patches 12 and later are ports of various patches to builtin/merge.c. I did the bare minimum to make tests pass. :)

Patches are against jn/merge-renormalize~2 (rerere: migrate to parse-options API) from pu, because without that, "rerere --rerere-autoupdate" does not work.

Thoughts?
Jonathan Nieder (24):
  merge: do not mistake (ancestor of) tag for branch
  t7600 (merge): modernize style
  t7600 (merge): do not launch gitk for --debug
  t7600 (merge): check reflog entry
  t7600 (merge): test merge from branch yet to be born
  t6010 (merge-base): modernize style
  t6200 (fmt-merge-msg): style nitpicks
  Documentation: add a SEE ALSO section for merge-base
  merge-base --octopus to mimic show-branch --merge-base
  merge-base --independent to print reduced parent list in a merge
  fmt-merge-msg -m to replace subject line
  merge script: --squash, --ff from unborn branch are errors
  merge script: tweak unmerged files message to match builtin
  merge script: refuse to merge during merge
  merge script: improve log message subject
  merge script: merge -X<option>
  merge script: allow custom strategies
  merge script: forbid merge -s index
  merge script: handle -m --log correctly
  merge script: handle many-way octopus
  merge script: --ff-only to disallow true merge
  merge script: handle --no-ff --no-commit correctly
  merge script: notice @{-1} shorthand
  merge script: learn --[no-]rerere-autoupdate
 Documentation/git-fmt-merge-msg.txt |    9 +-
 Documentation/git-merge-base.txt    |   34 +++-
 builtin/fmt-merge-msg.c             |   18 ++-
 builtin/merge-base.c                |   44 ++++-
 builtin/merge.c                     |    2 +-
 contrib/examples/git-merge.sh       |  115 ++++++++---
 t/t6010-merge-base.sh               |  358 +++++++++++++++++++--------------
 t/t6200-fmt-merge-msg.sh            |  306 ++++++++++++++--------------
 t/t7600-merge.sh                    |  385 +++++++++++++++--------------------
 9 files changed, 705 insertions(+), 566 deletions(-)
Next: Jonathan Nieder
Message 1 of 36 in “updating examples/git-merge (plus a builtin/merge fix)”
  1. updating examples/git-merge (plus a builtin/merge fix)Jonathan Nieder, Aug 17, 2010
  2. 01/24 merge: do not mistake (ancestor of) tag for branchJonathan Nieder, Aug 17, 2010
  3. 02/24 t7600 (merge): modernize styleJonathan Nieder, Aug 17, 2010
  4. 03/24 t7600 (merge): do not launch gitk for --debugJonathan Nieder, Aug 17, 2010
  5. Ævar Arnfjörð BjarmasonAug 17, 2010
  6. Sverre RabbelierAug 17, 2010
  7. Jonathan NiederAug 18, 2010
  8. Ævar Arnfjörð BjarmasonAug 18, 2010
  9. Jonathan NiederAug 18, 2010
  10. 04/24 t7600 (merge): check reflog entryJonathan Nieder, Aug 17, 2010
  11. 05/24 t7600 (merge): test merge from branch yet to be bornJonathan Nieder, Aug 17, 2010
  12. 06/24 t6010 (merge-base): modernize styleJonathan Nieder, Aug 17, 2010
  13. 07/24 t6200 (fmt-merge-msg): style nitpicksJonathan Nieder, Aug 17, 2010
  14. 08/24 Documentation: add a SEE ALSO section for merge-baseJonathan Nieder, Aug 17, 2010
  15. 09/24 merge-base --octopus to mimic show-branch --merge-baseJonathan Nieder, Aug 17, 2010
  16. 10/24 merge-base --independent to print reduced parent list in a mergeJonathan Nieder, Aug 17, 2010
  17. 11/24 fmt-merge-msg -m to override subject lineJonathan Nieder, Aug 17, 2010
  18. 11/24 fmt-merge-msg -m to override merge titleJonathan Nieder, Aug 17, 2010
  19. 12/24 merge script: --squash, --ff from unborn branch are errorsJonathan Nieder, Aug 17, 2010
  20. 13/24 merge script: tweak unmerged files message to match builtinJonathan Nieder, Aug 17, 2010
  21. Ævar Arnfjörð BjarmasonAug 17, 2010
  22. 14/24 merge script: refuse to merge during mergeJonathan Nieder, Aug 17, 2010
  23. 15/24 merge script: improve log message subjectJonathan Nieder, Aug 17, 2010
  24. 16/24 merge script: merge -X<option>Jonathan Nieder, Aug 17, 2010
  25. 17/24 merge script: allow custom strategiesJonathan Nieder, Aug 17, 2010
  26. 18/24 merge script: forbid merge -s indexJonathan Nieder, Aug 17, 2010
  27. 19/24 merge script: handle -m --log correctlyJonathan Nieder, Aug 17, 2010
  28. Tay Ray ChuanAug 17, 2010
  29. Jonathan NiederAug 17, 2010
  30. 20/24 merge script: handle many-way octopusJonathan Nieder, Aug 17, 2010
  31. 21/24 merge script: --ff-only to disallow true mergeJonathan Nieder, Aug 17, 2010
  32. 22/24 merge script: handle --no-ff --no-commit correctlyJonathan Nieder, Aug 17, 2010
  33. 23/24 merge script: notice @{-1} shorthandJonathan Nieder, Aug 17, 2010
  34. 24/24 merge script: learn --[no-]rerere-autoupdateJonathan Nieder, Aug 17, 2010
  35. Ævar Arnfjörð BjarmasonAug 17, 2010
  36. Jonathan NiederAug 17, 2010

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.