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

[PATCH 3/7] contrib/subtree: Add --unannotate

From
David A. Greene <greened@obbligato.org>
Date
Jan 8, 2013, 12:09 UTC
Message-ID
<1357646997-28675-4-git-send-email-greened@obbligato.org>
In-Reply-To
<1357646997-28675-1-git-send-email-greened@obbligato.org>
From: James Nylen <jnylen@gmail.com>

Teach git-subtree about --unannotate. This option strips a prefix from a commit message when doing a subtree split.

Signed-off-by: James Nylen <jnylen@gmail.com>
Signed-off-by: David A. Greene <greened@obbligato.org>
---
 contrib/subtree/git-subtree.sh     |   11 +++++++++--
 contrib/subtree/git-subtree.txt    |   15 +++++++++++++++
 contrib/subtree/t/t7900-subtree.sh |   12 ++++++++++--
 3 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh
index 5341b36..cac0680 100755
--- a/contrib/subtree/git-subtree.sh
+++ b/contrib/subtree/git-subtree.sh
@@ -21,6 +21,7 @@ P,prefix=     the name of the subdir to split out
 m,message=    use the given message as the commit message for the merge commit
  options for 'split'
 annotate=     add a prefix to commit message of new commits
+unannotate=   remove a prefix from new commit messages (supports bash globbing)
 b,branch=     create a new branch from the split subtree
 ignore-joins  ignore prior --rejoin commits
 onto=         try connecting new tree to an existing one
@@ -43,6 +44,7 @@ onto=
 rejoin=
 ignore_joins=
 annotate=
+unannotate=
 squash=
 message=
 
@@ -80,6 +82,8 @@ while [ $# -gt 0 ]; do
 		-d) debug=1 ;;
 		--annotate) annotate="$1"; shift ;;
 		--no-annotate) annotate= ;;
+		--unannotate) unannotate="$1"; shift ;;
+		--no-unannotate) unannotate= ;;
 		-b) branch="$1"; shift ;;
 		-P) prefix="$1"; shift ;;
 		-m) message="$1"; shift ;;
@@ -314,8 +318,11 @@ copy_commit()
 			GIT_COMMITTER_NAME \
 			GIT_COMMITTER_EMAIL \
 			GIT_COMMITTER_DATE
-		(echo -n "$annotate"; cat ) |
-		git commit-tree "$2" $3  # reads the rest of stdin
+		(
+			read FIRST_LINE
+			echo "$annotate${FIRST_LINE#$unannotate}"
+			cat  # reads the rest of stdin
+		) | git commit-tree "$2" $3
 	) || die "Can't copy commit $1"
 }
 
diff --git a/contrib/subtree/git-subtree.txt b/contrib/subtree/git-subtree.txt
index c5bce41..75aa690 100644
--- a/contrib/subtree/git-subtree.txt
+++ b/contrib/subtree/git-subtree.txt
@@ -198,6 +198,21 @@ OPTIONS FOR split
 	git subtree tries to make it work anyway, particularly
 	if you use --rejoin, but it may not always be effective.
 
+--unannotate=<annotation>::
+	This option is only valid for the split command.
+
+	When generating synthetic history, try to remove the prefix
+	<annotation> from each commit message (using bash's "strip
+	shortest match from beginning" command, which supports
+	globbing).  This makes sense if you format library commits
+	like "library: Change something or other" when you're working
+	in your project's repository, but you want to remove this
+	prefix when pushing back to the library's upstream repository.
+	(In this case --unannotate='*: ' would work well.)
+	
+	Like --annotate,  you need to use the same <annotation>
+	whenever you split, or you may run into problems.
+
 -b <branch>::
 --branch=<branch>::
 	This option is only valid for the split command.
diff --git a/contrib/subtree/t/t7900-subtree.sh b/contrib/subtree/t/t7900-subtree.sh
index 3f17f55..de45e34 100755
--- a/contrib/subtree/t/t7900-subtree.sh
+++ b/contrib/subtree/t/t7900-subtree.sh
@@ -143,7 +143,7 @@ test_expect_success 'merge fetched subproj' '
 
 test_expect_success 'add main-sub5' '
         create subdir/main-sub5 &&
-        git commit -m "main-sub5"
+        git commit -m "subproj: main-sub5"
 '
 
 test_expect_success 'add main6' '
@@ -153,7 +153,7 @@ test_expect_success 'add main6' '
 
 test_expect_success 'add main-sub7' '
         create subdir/main-sub7 &&
-        git commit -m "main-sub7"
+        git commit -m "subproj: main-sub7"
 '
 
 test_expect_success 'fetch new subproj history' '
@@ -226,6 +226,14 @@ test_expect_success 'check hash of split' '
         check_equal ''"$new_hash"'' "$subdir_hash"
 '
 
+test_expect_success 'check --unannotate' '
+        spl1=$(git subtree split --unannotate='"subproj:"' --prefix subdir --onto FETCH_HEAD --message "Split & rejoin" --rejoin) &&
+        undo &&
+        git subtree split --unannotate='"subproj:"' --prefix subdir --onto FETCH_HEAD --branch splitunann &&
+        check_equal ''"$(git rev-parse splitunann)"'' "$spl1" &&
+        check_equal ''"$(git log splitunann | grep subproj)"'' ""
+'
+
 test_expect_success 'check split with --branch for an existing branch' '
         spl1=''"$(git subtree split --annotate='"'*'"' --prefix subdir --onto FETCH_HEAD --message "Split & rejoin" --rejoin)"'' &&
         undo &&
-- 
1.7.10.4
Previous: greened@obbligato.orgNext: Junio C Hamano
Message 11 of 22 in “Revised git-subtree Patches”
  1. David A. GreeneJan 8, 2013
  2. 1/7 Remove Test Number CommentsDavid A. Greene, Jan 8, 2013
  3. 2/7 contrib/subtree: Use %B for Split Subject/BodyDavid A. Greene, Jan 8, 2013
  4. Junio C HamanoJan 8, 2013
  5. greened@obbligato.orgJan 16, 2013
  6. 郑文辉 (Techlive Zheng)Jan 8, 2013
  7. Junio C HamanoJan 9, 2013
  8. greened@obbligato.orgJan 16, 2013
  9. Junio C HamanoJan 16, 2013
  10. greened@obbligato.orgJan 22, 2013
  11. 3/7 contrib/subtree: Add --unannotateDavid A. Greene, Jan 8, 2013
  12. Junio C HamanoJan 8, 2013
  13. greened@obbligato.orgJan 16, 2013
  14. greened@obbligato.orgJan 16, 2013
  15. Junio C HamanoJan 16, 2013
  16. greened@obbligato.orgJan 22, 2013
  17. 4/7 contrib/subtree: Better Error Handling for addDavid A. Greene, Jan 8, 2013
  18. Junio C HamanoJan 8, 2013
  19. greened@obbligato.orgJan 16, 2013
  20. 5/7 contrib/subtree: Fix SynopsisDavid A. Greene, Jan 8, 2013
  21. 6/7 contrib/subtree: Honor DESTDIRDavid A. Greene, Jan 8, 2013
  22. 7/7 contrib/subtree: Make the Manual Directory if NeededDavid A. Greene, Jan 8, 2013

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.