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

[PATCH v6 04/10] rebase -i: do not invent onelines when expanding/collapsing SHA-1s

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Jul 14, 2017, 14:45 UTC
Message-ID
<4a5f540d4dcde47a7ba5e08b990de164cc0c52b2.1500043437.git.johannes.schindelin@gmx.de>
In-Reply-To
<cover.1500043436.git.johannes.schindelin@gmx.de>

To avoid problems with short SHA-1s that become non-unique during the rebase, we rewrite the todo script with short/long SHA-1s before and after letting the user edit the script. Since SHA-1s are not intuitive for humans, rebase -i also provides the onelines (commit message subjects) in the script, purely for the user's convenience.

It is very possible to generate a todo script via different means than rebase -i and then to let rebase -i run with it; In this case, these onelines are not required.

And this is where the expand/collapse machinery has a bug: it *expects* that oneline, and failing to find one reuses the previous SHA-1 as "oneline".

It was most likely an oversight, and made implementation in the (quite limiting) shell script language less convoluted. However, we are about to reimplement performance-critical parts in C (and due to spawning a git.exe process for every single line of the todo script, the expansion/collapsing of the SHA-1s *is* performance-hampering on Windows), therefore let's fix this bug to make cross-validation with the C version of that functionality possible.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 git-rebase--interactive.sh | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 93372c62b2e..9d65212b7f1 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -760,7 +760,12 @@ transform_todo_ids () {
 			;;
 		*)
 			sha1=$(git rev-parse --verify --quiet "$@" ${rest%%[	 ]*}) &&
-			rest="$sha1 ${rest#*[	 ]}"
+			if test "a$rest" = "a${rest#*[	 ]}"
+			then
+				rest=$sha1
+			else
+				rest="$sha1 ${rest#*[	 ]}"
+			fi
 			;;
 		esac
 		printf '%s\n' "$command${rest:+ }$rest"
-- 
2.13.3.windows.1.13.gaf0c2223da0
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 7 of 17 in “The final building block for a faster rebase -i”
  1. 00/10 The final building block for a faster rebase -iJohannes Schindelin, Jul 14, 2017
  2. 01/10 t3415: verify that an empty instructionFormat is handled as beforeJohannes Schindelin, Jul 14, 2017
  3. 03/10 rebase -i: remove useless indentationJohannes Schindelin, Jul 14, 2017
  4. 02/10 rebase -i: generate the script via rebase--helperJohannes Schindelin, Jul 14, 2017
  5. Stefan BellerJul 14, 2017
  6. Johannes SchindelinJul 15, 2017
  7. 04/10 rebase -i: do not invent onelines when expanding/collapsing SHA-1sJohannes Schindelin, Jul 14, 2017
  8. 05/10 rebase -i: also expand/collapse the SHA-1s via the rebase--helperJohannes Schindelin, Jul 14, 2017
  9. 06/10 t3404: relax rebase.missingCommitsCheck testsJohannes Schindelin, Jul 14, 2017
  10. 07/10 rebase -i: check for missing commits in the rebase--helperJohannes Schindelin, Jul 14, 2017
  11. 09/10 t3415: test fixup with wrapped onelineJohannes Schindelin, Jul 14, 2017
  12. 08/10 rebase -i: skip unnecessary picks using the rebase--helperJohannes Schindelin, Jul 14, 2017
  13. 10/10 rebase -i: rearrange fixup/squash lines using the rebase--helperJohannes Schindelin, Jul 14, 2017
  14. Stefan BellerJul 14, 2017
  15. Johannes SchindelinJul 14, 2017
  16. Junio C HamanoJul 20, 2017
  17. Johannes SchindelinJul 22, 2017

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.