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

[PATCH 2/4] subtree: make --ignore-joins pay attention to adds

From
Strain, Roger L <roger.strain@swri.org>
Date
Sep 28, 2018, 18:35 UTC
Message-ID
<20180928183540.48968-3-roger.strain@swri.org>
In-Reply-To
<20180928183540.48968-1-roger.strain@swri.org>

Changes the behavior of --ignore-joins to always consider a subtree add commit, and ignore only splits and squashes.

The --ignore-joins option is documented to ignore prior --rejoin commits. However, it additionally ignored subtree add commits generated when a subtree was initially added to a repo.

Due to the logic which determines whether a commit is a mainline commit or a subtree commit (namely, the presence or absence of content in the subtree prefix) this causes commits before the initial add to appear to be part of the subtree. An --ignore-joins split would therefore consider those commits part of the subtree history and include them at the beginning of the synthetic history, causing the resulting hashes to be incorrect for all later commits.

Signed-off-by: Strain, Roger L <roger.strain@swri.org>
---
 contrib/subtree/git-subtree.sh | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh
index 2cd7b345b..d8861f306 100755
--- a/contrib/subtree/git-subtree.sh
+++ b/contrib/subtree/git-subtree.sh
@@ -340,7 +340,12 @@ find_existing_splits () {
 	revs="$2"
 	main=
 	sub=
-	git log --grep="^git-subtree-dir: $dir/*\$" \
+	local grep_format="^git-subtree-dir: $dir/*\$"
+	if test -n "$ignore_joins"
+	then
+		grep_format="^Add '$dir/' from commit '"
+	fi
+	git log --grep="$grep_format" \
 		--no-show-signature --pretty=format:'START %H%n%s%n%n%b%nEND%n' $revs |
 	while read a b junk
 	do
@@ -730,12 +735,7 @@ cmd_split () {
 		done
 	fi
 
-	if test -n "$ignore_joins"
-	then
-		unrevs=
-	else
-		unrevs="$(find_existing_splits "$dir" "$revs")"
-	fi
+	unrevs="$(find_existing_splits "$dir" "$revs")"
 
 	# We can't restrict rev-list to only $dir here, because some of our
 	# parents have the $dir contents the root, and those won't match.
-- 
2.19.0.windows.1
Previous: Strain, Roger LNext: Strain, Roger L
Message 3 of 11 in “Multiple subtree split fixes regarding complex repos”
  1. 0/4 Multiple subtree split fixes regarding complex reposStrain, Roger L, Sep 28, 2018
  2. 3/4 subtree: use commits before rejoins for splitsStrain, Roger L, Sep 28, 2018
  3. 2/4 subtree: make --ignore-joins pay attention to addsStrain, Roger L, Sep 28, 2018
  4. 1/4 subtree: refactor split of a commit into standalone methodStrain, Roger L, Sep 28, 2018
  5. 4/4 subtree: improve decision on merges kept in splitStrain, Roger L, Sep 28, 2018
  6. 4/4 subtree: improve decision on merges kept in splitRoger Strain, Oct 11, 2018
  7. 0/4 Multiple subtree split fixes regarding complex reposRoger Strain, Oct 11, 2018
  8. Junio C HamanoOct 12, 2018
  9. 3/4 subtree: use commits before rejoins for splitsRoger Strain, Oct 11, 2018
  10. 2/4 subtree: make --ignore-joins pay attention to addsRoger Strain, Oct 11, 2018
  11. 1/4 subtree: refactor split of a commit into standalone methodRoger Strain, Oct 11, 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.