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

[PATCH v5 23/36] rebase: split the cherry-pick stuff

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Jun 9, 2013, 19:24 UTC
Message-ID
<1370805890-3453-24-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1370805890-3453-1-git-send-email-felipe.contreras@gmail.com>

They do something completely different from 'git am', it belongs in a different file.

No functional changes.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 .gitignore                |  1 +
 Makefile                  |  1 +
 git-rebase--am.sh         | 11 +----------
 git-rebase--cherrypick.sh | 30 ++++++++++++++++++++++++++++++
 git-rebase.sh             |  4 ++++
 5 files changed, 37 insertions(+), 10 deletions(-)
 create mode 100644 git-rebase--cherrypick.sh
diff --git a/.gitignore b/.gitignore
index 1640c3a..2a3dbae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -113,6 +113,7 @@
 /git-read-tree
 /git-rebase
 /git-rebase--am
+/git-rebase--cherrypick
 /git-rebase--interactive
 /git-rebase--merge
 /git-receive-pack
diff --git a/Makefile b/Makefile
index a167e68..4719979 100644
--- a/Makefile
+++ b/Makefile
@@ -473,6 +473,7 @@ SCRIPT_SH += git-web--browse.sh
 SCRIPT_LIB += git-mergetool--lib
 SCRIPT_LIB += git-parse-remote
 SCRIPT_LIB += git-rebase--am
+SCRIPT_LIB += git-rebase--cherrypick
 SCRIPT_LIB += git-rebase--interactive
 SCRIPT_LIB += git-rebase--merge
 SCRIPT_LIB += git-sh-setup
diff --git a/git-rebase--am.sh b/git-rebase--am.sh
index 34e3102..6460028 100644
--- a/git-rebase--am.sh
+++ b/git-rebase--am.sh
@@ -19,15 +19,7 @@ esac
 test -n "$rebase_root" && root_flag=--root
 
 ret=0
-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"
-	ret=$?
-else
+
 rm -f "$GIT_DIR/rebased-patches"
 
 git format-patch -k --stdout --full-index --ignore-if-in-upstream \
@@ -63,7 +55,6 @@ else
 ret=$?
 
 rm -f "$GIT_DIR/rebased-patches"
-fi
 
 if test 0 != $ret
 then
diff --git a/git-rebase--cherrypick.sh b/git-rebase--cherrypick.sh
new file mode 100644
index 0000000..2c16995
--- /dev/null
+++ b/git-rebase--cherrypick.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Copyright (c) 2010 Junio C Hamano.
+#
+
+case "$action" in
+continue)
+	git am --resolved --resolvemsg="$resolvemsg" &&
+	move_to_original_branch
+	return
+	;;
+skip)
+	git am --skip --resolvemsg="$resolvemsg" &&
+	move_to_original_branch
+	return
+	;;
+esac
+
+test -n "$rebase_root" && root_flag=--root
+
+git cherry-pick --allow-empty "$revisions"
+ret=$?
+
+if test 0 != $ret
+then
+	test -d "$state_dir" && write_basic_state
+	return $ret
+fi
+
+move_to_original_branch
diff --git a/git-rebase.sh b/git-rebase.sh
index d0c11a9..70762f1 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -413,6 +413,10 @@ elif test -n "$do_merge"
 then
 	type=merge
 	state_dir="$merge_dir"
+elif test -n "$keep_empty"
+then
+	type=cherrypick
+	state_dir="$apply_dir"
 else
 	type=am
 	state_dir="$apply_dir"
-- 
1.8.3.698.g079b096
Previous: Felipe ContrerasNext: Felipe Contreras
Message 24 of 42 in “Massive improvents to rebase and cherry-pick”
  1. 00/36 Massive improvents to rebase and cherry-pickFelipe Contreras, Jun 9, 2013
  2. 01/36 build: generate and clean test scriptsFelipe Contreras, Jun 9, 2013
  3. 02/36 build: do not install git-remote-testgitFelipe Contreras, Jun 9, 2013
  4. 03/36 build: trivial cleanupFelipe Contreras, Jun 9, 2013
  5. 04/36 build: add builtin libFelipe Contreras, Jun 9, 2013
  6. 05/36 log-tree: remove dependency from sequencerFelipe Contreras, Jun 9, 2013
  7. 06/36 Move sequencer to builtinFelipe Contreras, Jun 9, 2013
  8. 07/36 unpack-trees: plug a memory leakFelipe Contreras, Jun 9, 2013
  9. 08/36 read-cache: plug a few leaksFelipe Contreras, Jun 9, 2013
  10. 09/36 sequencer: remove useless indentationFelipe Contreras, Jun 9, 2013
  11. 10/36 sequencer: trivial fixFelipe Contreras, Jun 9, 2013
  12. 11/36 cherry-pick: don't barf when there's nothing to doFelipe Contreras, Jun 9, 2013
  13. 12/36 cherry-pick: add --skip-empty optionFelipe Contreras, Jun 9, 2013
  14. 13/36 revert/cherry-pick: add --quiet optionFelipe Contreras, Jun 9, 2013
  15. 14/36 revert/cherry-pick: add --skip optionFelipe Contreras, Jun 9, 2013
  16. 15/36 builtin: add rewrite helperFelipe Contreras, Jun 9, 2013
  17. 16/36 cherry-pick: store rewritten commitsFelipe Contreras, Jun 9, 2013
  18. 17/36 cherry-pick: don't store skipped commitFelipe Contreras, Jun 9, 2013
  19. 18/36 builtin: move run_rewrite_hook() to rewrite.cFelipe Contreras, Jun 9, 2013
  20. 19/36 builtin: add copy_rewrite_notes()Felipe Contreras, Jun 9, 2013
  21. 20/36 cherry-pick: copy notes and run hooksFelipe Contreras, Jun 9, 2013
  22. 21/36 cherry-pick: add --action-name optionFelipe Contreras, Jun 9, 2013
  23. 22/36 cherry-pick: remember rerere-autoupdateFelipe Contreras, Jun 9, 2013
  24. 23/36 rebase: split the cherry-pick stuffFelipe Contreras, Jun 9, 2013
  25. 24/36 rebase: cherry-pick: fix mode storageFelipe Contreras, Jun 9, 2013
  26. 25/36 rebase: cherry-pick: fix sequence continuationFelipe Contreras, Jun 9, 2013
  27. 26/36 rebase: cherry-pick: fix abort of cherry modeFelipe Contreras, Jun 9, 2013
  28. 27/36 rebase: cherry-pick: fix command invocationsFelipe Contreras, Jun 9, 2013
  29. 28/36 rebase: cherry-pick: fix status messagesFelipe Contreras, Jun 9, 2013
  30. 29/36 rebase: cherry-pick: automatically commit stageFelipe Contreras, Jun 9, 2013
  31. 30/36 rebase: cherry-pick: set correct action-nameFelipe Contreras, Jun 9, 2013
  32. 31/36 rebase: trivial cleanupFelipe Contreras, Jun 9, 2013
  33. 32/36 rebase: use 'cherrypick' mode instead of 'am'Felipe Contreras, Jun 9, 2013
  34. 33/36 rebase: cherry-pick: fix for shell promptFelipe Contreras, Jun 9, 2013
  35. 34/36 rebase: cherry-pick: add merge optionsFelipe Contreras, Jun 9, 2013
  36. 35/36 rebase: remove merge modeFelipe Contreras, Jun 9, 2013
  37. 36/36 rebase: cherry-pick: add copyrightFelipe Contreras, Jun 9, 2013
  38. Felipe ContrerasJun 9, 2013
  39. Phil HordJun 10, 2013
  40. Felipe ContrerasJun 10, 2013
  41. Phil HordJun 11, 2013
  42. Felipe ContrerasJun 11, 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.