git/list[1] front-page[2] threads[3] people[4] search[5] about
wed 2026-10-07 17:17 UTC

Re: [PATCH v2 4/4] builtin/stash: merge index in-core

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Sep 25, 2026, 16:04 UTC
Message-ID
<6e6420e8-3cbd-4975-a781-645e1ffbc1d2@gmail.com>
In-Reply-To
<xmqqse2yz4y4.fsf@gitster.g>
Hi Junio
On 24/09/2026 22:59, Junio C Hamano wrote:
Show 6 quoted lines
> "D. Ben Knoble" <ben.knoble@gmail.com> writes:
> 
> Ahh, or perhaps the trees are indeed given in a wrong order, but not
> in a random wrong order.  merge_ort_nonrecursive(), which is *not*
> the function you are using, takes head, merge, and merge_base in
> this order, and that order matches what you wrote.

Ouch that's nasty. Well spotted, I missed it when I read the code (because the arguments were in the same order as the call to merge_ort_nonrecursive()) and the tests we have use the same version of the file for "base" and "stage2" so do not notice if they'd been transposed. It is rather confusing that two functions that are so closely related take their arguments in a different order.

Show 5 quoted lines
> Perhaps the true culprit in this confusion is that the order in
> which merge_ort_nonrecursive() takes its three trees (head, merge,
> and common) and the order in which merge_incore_nonrecursive() takes
> its trees (merge_base, side1, and side2) are different, and if we
> fix them to match, it would make it easier to work with?

I think it is definitely worth fixing them to take the trees in the same order. My preference would be "base", "stage1", "stage2" but so long as they match each other I dont object to "stage1", "stage2", "base".

Thanks
Phillip
Show 49 quoted lines
> The new test in the attached patch will fail with this step but if
> we revert the changes to builtin/stash.c in this step, it passes.
> 
>   t/t3903-stash.sh | 32 ++++++++++++++++++++++++++++++++
>   1 file changed, 32 insertions(+)
> 
> diff --git c/t/t3903-stash.sh w/t/t3903-stash.sh
> index 3958ab3c8d..0a87e62b11 100755
> --- c/t/t3903-stash.sh
> +++ w/t/t3903-stash.sh
> @@ -374,6 +374,38 @@ test_expect_success 'stash apply -q --index refreshes the index' '
>   	test_cmp expect actual
>   '
>   
> +
> +test_expect_success 'stash apply --index does not revert unrelated upstream index changes' '
> +	test_when_finished "rm -fr playpen" &&
> +	mkdir playpen &&
> +	(
> +		cd playpen &&
> +		git init &&
> +		echo "base1" >file1 &&
> +		echo "base2" >file2 &&
> +		git add file1 file2 &&
> +		git commit -m "initial base" &&
> +
> +		# Make a staged change to file1 and stash it
> +		echo "staged1" >file1 &&
> +		git add file1 &&
> +		git stash &&
> +
> +		# Upstream advances by modifying unrelated file2
> +		echo "upstream2" >file2 &&
> +		git add file2 &&
> +		git commit -m "upstream change to file2" &&
> +
> +		# Apply the stash with --index
> +		git stash apply --index &&
> +
> +		# Verify working tree and index state
> +		test "$(git show :file1)" = "staged1" &&
> +		test "$(git show :file2)" = "upstream2" &&
> +		test "$(git show HEAD:file2)" = "upstream2"
> +	)
> +'
> +
>   test_expect_success 'stash apply --index leaves everything untouched on failure' '
>   	git reset --hard &&
>   	echo test >other-file &&
Previous: Phillip WoodNext: D. Ben Knoble
Message 25 of 78 in “Hi all,”
  1. 0/2 Hi all,D. Ben Knoble, Sep 19, 2026
  2. 1/2 builtin/stash: remove unused headerD. Ben Knoble, Sep 19, 2026
  3. 2/2 builtin/stash: merge index in-coreD. Ben Knoble, Sep 19, 2026
  4. D. Ben KnobleSep 19, 2026
  5. Phillip WoodSep 21, 2026
  6. Junio C HamanoSep 21, 2026
  7. D. Ben KnobleSep 22, 2026
  8. D. Ben KnobleSep 22, 2026
  9. Phillip WoodSep 22, 2026
  10. D. Ben KnobleSep 22, 2026
  11. 0/4 stash: clean up index-mode test mergeD. Ben Knoble, Sep 23, 2026
  12. 1/4 builtin/stash: remove unused headerD. Ben Knoble, Sep 23, 2026
  13. 2/4 stash: prepare merge options earlierD. Ben Knoble, Sep 23, 2026
  14. 3/4 t: test failed "stash apply --index"D. Ben Knoble, Sep 23, 2026
  15. 4/4 builtin/stash: merge index in-coreD. Ben Knoble, Sep 23, 2026
  16. Phillip WoodSep 24, 2026
  17. Phillip WoodSep 24, 2026
  18. Junio C HamanoSep 24, 2026
  19. Junio C HamanoSep 25, 2026
  20. D. Ben KnobleSep 25, 2026
  21. D. Ben KnobleSep 25, 2026
  22. D. Ben KnobleSep 25, 2026
  23. Phillip WoodSep 25, 2026
  24. Phillip WoodSep 25, 2026
  25. Phillip WoodSep 25, 2026
  26. D. Ben KnobleSep 25, 2026
  27. D. Ben KnobleSep 25, 2026
  28. Junio C HamanoSep 25, 2026
  29. Junio C HamanoSep 25, 2026
  30. Phillip WoodSep 26, 2026
  31. Phillip WoodSep 26, 2026
  32. D. Ben KnobleSep 26, 2026
  33. D. Ben KnobleSep 26, 2026
  34. 0/5 stash: clean up index-mode test mergeD. Ben Knoble, Sep 26, 2026
  35. 1/5 builtin/stash: remove unused headerD. Ben Knoble, Sep 26, 2026
  36. 2/5 stash: prepare merge options earlierD. Ben Knoble, Sep 26, 2026
  37. 3/5 t3903: test stash --index mergesD. Ben Knoble, Sep 26, 2026
  38. 4/5 t3903: test failed "stash apply --index"D. Ben Knoble, Sep 26, 2026
  39. 5/5 builtin/stash: merge index in-coreD. Ben Knoble, Sep 26, 2026
  40. D. Ben KnobleSep 26, 2026
  41. Junio C HamanoSep 27, 2026
  42. Junio C HamanoSep 27, 2026
  43. Junio C HamanoSep 28, 2026
  44. Phillip WoodSep 28, 2026
  45. D. Ben KnobleSep 28, 2026
  46. D. Ben KnobleSep 28, 2026
  47. D. Ben KnobleSep 28, 2026
  48. D. Ben KnobleSep 28, 2026
  49. D. Ben KnobleSep 28, 2026
  50. Phillip WoodSep 28, 2026
  51. Thomas BachemSep 28, 2026
  52. Junio C HamanoSep 28, 2026
  53. D. Ben KnobleSep 28, 2026
  54. Phillip WoodSep 28, 2026
  55. Phillip WoodSep 28, 2026
  56. D. Ben KnobleSep 28, 2026
  57. Phillip WoodSep 29, 2026
  58. D. Ben KnobleSep 29, 2026
  59. 0/5 stash: clean up index-mode test mergeD. Ben Knoble, Sep 29, 2026
  60. 1/5 builtin/stash: remove unused headerD. Ben Knoble, Sep 29, 2026
  61. 2/5 stash: prepare merge options earlierD. Ben Knoble, Sep 29, 2026
  62. 3/5 t3903: test failed "stash apply --index"D. Ben Knoble, Sep 29, 2026
  63. 4/5 t5520: don't expire reflogs where it mattersD. Ben Knoble, Sep 29, 2026
  64. 5/5 builtin/stash: merge index in-coreD. Ben Knoble, Sep 29, 2026
  65. Phillip WoodSep 29, 2026
  66. Phillip WoodSep 29, 2026
  67. Phillip WoodSep 29, 2026
  68. Ben KnobleSep 29, 2026
  69. Junio C HamanoSep 29, 2026
  70. D. Ben KnobleSep 30, 2026
  71. 1/4 builtin/stash: remove unused headerD. Ben Knoble, Sep 30, 2026
  72. 0/4 stash: clean up index-mode test mergeD. Ben Knoble, Sep 30, 2026
  73. 3/4 t3903: test failed "stash apply --index"D. Ben Knoble, Sep 30, 2026
  74. 2/4 stash: prepare merge options earlierD. Ben Knoble, Sep 30, 2026
  75. 4/4 builtin/stash: merge index in-coreD. Ben Knoble, Sep 30, 2026
  76. D. Ben KnobleSep 30, 2026
  77. Phillip WoodOct 1, 2026
  78. Junio C HamanoOct 1, 2026

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.