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

[PATCH 1/7] git-rebase--am.sh: avoid special-casing --keep-empty

From
Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
Date
Jul 18, 2012, 07:27 UTC
Message-ID
<1342596455-17046-2-git-send-email-martin.von.zweigbergk@gmail.com>
In-Reply-To
<1342596455-17046-1-git-send-email-martin.von.zweigbergk@gmail.com>
Since 0fbb95d (am: don't call mailinfo if $rebasing, 2012-06-26), the
patch body to apply when running 'git am --rebasing' is not taken from
the mbox, but directly from the commit. If such a commit is "empty",
'git am --rebasing' still happily applies it and commits. However,
since the input to 'git am --rebasing' only ever comes from 'git
format-patch', which completely leaves the commit out from its output
if it's empty, no empty commits are ever created by 'git am
--rebasing'. By teaching 'git am --rebasing' a --keep-empty option and
letting the caller decide whether or not to keep empty commits, we can
unify the two different mechanisms that git-rebase--am.sh uses for
rebasing.
---
 git-am.sh         | 10 +++++++++-
 git-rebase--am.sh | 20 ++++++--------------
 2 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/git-am.sh b/git-am.sh
index b6a5300..37641b7 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -37,7 +37,8 @@ abort           restore the original branch and abort the patching operation.
 committer-date-is-author-date    lie about committer date
 ignore-date     use current timestamp for author date
 rerere-autoupdate update the index with reused conflict resolution if possible
-rebasing*       (internal use for git-rebase)"
+rebasing*       (internal use for git-rebase)
+keep-empty*     (internal use for git-rebase)"
 
 . git-sh-setup
 . git-sh-i18n
@@ -375,6 +376,7 @@ git_apply_opt=
 committer_date_is_author_date=
 ignore_date=
 allow_rerere_autoupdate=
+keep_empty=
 
 if test "$(git config --bool --get am.keepcr)" = true
 then
@@ -414,6 +416,8 @@ do
 		abort=t ;;
 	--rebasing)
 		rebasing=t threeway=t ;;
+	--keep-empty)
+		keep_empty=t ;;
 	-d|--dotest)
 		die "$(gettext "-d option is no longer supported.  Do not use.")"
 		;;
@@ -669,6 +673,10 @@ do
 			echo "$commit" >"$dotest/original-commit"
 			get_author_ident_from_commit "$commit" >"$dotest/author-script"
 			git diff-tree --root --binary "$commit" >"$dotest/patch"
+			test -s "$dotest/patch" || test -n "$keep_empty" || {
+				go_next
+				continue
+			}
 		else
 			git mailinfo $keep $no_inbody_headers $scissors $utf8 "$dotest/msg" "$dotest/patch" \
 				<"$dotest/$msgnum" >"$dotest/info" ||
diff --git a/git-rebase--am.sh b/git-rebase--am.sh
index 392ebc9..37c1b23 100644
--- a/git-rebase--am.sh
+++ b/git-rebase--am.sh
@@ -17,20 +17,12 @@ skip)
 esac
 
 test -n "$rebase_root" && root_flag=--root
-
-if test -n "$keep_empty"
-then
-	# we have to do this the hard way.  git format-patch completely squashes
-	# empty commits and even if it didn't the format doesn't really lend
-	# itself well to recording empty patches.  fortunately, cherry-pick
-	# makes this easy
-	git cherry-pick --allow-empty "$revisions"
-else
-	git format-patch -k --stdout --full-index --ignore-if-in-upstream \
-		--src-prefix=a/ --dst-prefix=b/ \
-		--no-renames $root_flag "$revisions" |
-	git am $git_am_opt --rebasing --resolvemsg="$resolvemsg"
-fi && move_to_original_branch
+test -n "$keep_empty" && git_am_opt="$git_am_opt --keep-empty"
+git format-patch -k --stdout --full-index --ignore-if-in-upstream \
+	--src-prefix=a/ --dst-prefix=b/ \
+	--no-renames $root_flag "$revisions" |
+git am $git_am_opt --rebasing --resolvemsg="$resolvemsg" &&
+move_to_original_branch
 
 ret=$?
 test 0 != $ret -a -d "$state_dir" && write_basic_state
-- 
1.7.11.1.104.ge7b44f1
Previous: Martin von ZweigbergkNext: Martin von Zweigbergk
Message 2 of 15 in “correctly calculate patches to rebase”
  1. 0/7 correctly calculate patches to rebaseMartin von Zweigbergk, Jul 18, 2012
  2. 1/7 git-rebase--am.sh: avoid special-casing --keep-emptyMartin von Zweigbergk, Jul 18, 2012
  3. 2/7 git-rebase--interactive.sh: extract function for adding "pick" lineMartin von Zweigbergk, Jul 18, 2012
  4. 3/7 git-rebase--interactive: group all $preserve_merges codeMartin von Zweigbergk, Jul 18, 2012
  5. 4/7 git-rebase--interactive.sh: look up subject in add_pick_lineMartin von Zweigbergk, Jul 18, 2012
  6. 5/7 rebase -p: use --cherry-mark for todo fileMartin von Zweigbergk, Jul 18, 2012
  7. 6/7 rebase -p: don't request --left-right only to ignore left sideMartin von Zweigbergk, Jul 18, 2012
  8. 7/7 rebase (without -p): correctly calculate patches to rebaseMartin von Zweigbergk, Jul 18, 2012
  9. Johannes SixtJul 20, 2012
  10. Martin von ZweigbergkJul 20, 2012
  11. Johannes SixtJul 20, 2012
  12. Martin von ZweigbergkJul 20, 2012
  13. Junio C HamanoJul 22, 2012
  14. Neil HormanJul 18, 2012
  15. Martin von ZweigbergkJul 18, 2012

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.