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

[PATCH v2 02/12] pick: refactor checking parent in a check_parent function

From
Christian Couder <chriscool@tuxfamily.org>
Date
Feb 28, 2010, 22:21 UTC
Message-ID
<20100228222208.2260.56956.chriscool@tuxfamily.org>
In-Reply-To
<20100228222038.2260.25016.chriscool@tuxfamily.org>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
 pick.c |   69 ++++++++++++++++++++++++++++++++++++---------------------------
 1 files changed, 39 insertions(+), 30 deletions(-)
diff --git a/pick.c b/pick.c
index 1e1628a..40673ca 100644
--- a/pick.c
+++ b/pick.c
@@ -59,6 +59,40 @@ static struct tree *empty_tree(void)
 	return tree;
 }
 
+static int check_parent(struct commit *commit, int mainline, int flags,
+			struct commit **parent)
+{
+	if (!commit->parents) {
+		if (flags & PICK_REVERSE)
+			return error("Cannot revert a root commit");
+	}
+	else if (commit->parents->next) {
+		/* Reverting or cherry-picking a merge commit */
+		int cnt;
+		struct commit_list *p;
+
+		if (!mainline)
+			return error("Commit %s is a merge but no mainline was given.",
+				     sha1_to_hex(commit->object.sha1));
+
+		for (cnt = 1, p = commit->parents;
+		     cnt != mainline && p;
+		     cnt++)
+			p = p->next;
+		if (cnt != mainline || !p)
+			return error("Commit %s does not have parent %d",
+				     sha1_to_hex(commit->object.sha1),
+				     mainline);
+		*parent = p->item;
+	} else if (0 < mainline)
+		return error("Mainline was specified but commit %s is not a merge.",
+			     sha1_to_hex(commit->object.sha1));
+	else
+		*parent = commit->parents->item;
+
+	return 0;
+}
+
 /*
  * Pick changes introduced by "commit" argument into current working
  * tree and index.
@@ -80,8 +114,8 @@ int pick_commit(struct commit *pick_commit, int mainline, int flags,
 		struct strbuf *msg)
 {
 	unsigned char head[20];
-	struct commit *base, *next, *parent;
-	int i, index_fd, clean;
+	struct commit *base, *next, *parent = NULL;
+	int i, index_fd, clean, err;
 	int ret = 0;
 	char *oneline;
 	const char *message;
@@ -105,34 +139,9 @@ int pick_commit(struct commit *pick_commit, int mainline, int flags,
 		return error("Unable to create locked index: %s",
 			     strerror(errno));
 
-	if (!commit->parents) {
-		if (flags & PICK_REVERSE)
-			return error("Cannot revert a root commit");
-		parent = NULL;
-	}
-	else if (commit->parents->next) {
-		/* Reverting or cherry-picking a merge commit */
-		int cnt;
-		struct commit_list *p;
-
-		if (!mainline)
-			return error("Commit %s is a merge but no mainline was given.",
-				     sha1_to_hex(commit->object.sha1));
-
-		for (cnt = 1, p = commit->parents;
-		     cnt != mainline && p;
-		     cnt++)
-			p = p->next;
-		if (cnt != mainline || !p)
-			return error("Commit %s does not have parent %d",
-				     sha1_to_hex(commit->object.sha1),
-				     mainline);
-		parent = p->item;
-	} else if (0 < mainline)
-		return error("Mainline was specified but commit %s is not a merge.",
-			     sha1_to_hex(commit->object.sha1));
-	else
-		parent = commit->parents->item;
+	err = check_parent(commit, mainline, flags, &parent);
+	if (err)
+		return err;
 
 	if (!(message = commit->buffer))
 		return error("Cannot get commit message for %s",
-- 
1.7.0.321.g2d270
Previous: Christian CouderNext: Christian Couder
Message 3 of 24 in “add --ff option to cherry-pick”
  1. 00/12 add --ff option to cherry-pickChristian Couder, Feb 28, 2010
  2. 01/12 revert: libify cherry-pick and revert functionnalityChristian Couder, Feb 28, 2010
  3. 02/12 pick: refactor checking parent in a check_parent functionChristian Couder, Feb 28, 2010
  4. 03/12 pick: make check_parent function externChristian Couder, Feb 28, 2010
  5. 04/12 pick: move calling check_parent() ouside pick_commit()Christian Couder, Feb 28, 2010
  6. 05/12 reset: refactor updating heads into a static functionChristian Couder, Feb 28, 2010
  7. 06/12 reset: refactor reseting in its own functionChristian Couder, Feb 28, 2010
  8. 07/12 reset: make reset function non static and declare it in "reset.h"Christian Couder, Feb 28, 2010
  9. 08/12 revert: add --ff option to allow fast forward when cherry-pickingChristian Couder, Feb 28, 2010
  10. 09/12 cherry-pick: add tests for new --ff optionChristian Couder, Feb 28, 2010
  11. 10/12 Documentation: describe new cherry-pick --ff optionChristian Couder, Feb 28, 2010
  12. 11/12 cherry-pick: add a no-op --no-ff option to future proof scriptsChristian Couder, Feb 28, 2010
  13. 12/12 rebase -i: use new --ff cherry-pick optionChristian Couder, Feb 28, 2010
  14. Junio C HamanoMar 1, 2010
  15. Daniel BarkalowMar 1, 2010
  16. Christian CouderMar 1, 2010
  17. Junio C HamanoMar 1, 2010
  18. Christian CouderMar 4, 2010
  19. Junio C HamanoMar 4, 2010
  20. Christian CouderMar 4, 2010
  21. Junio C HamanoMar 4, 2010
  22. Jonathan NiederMar 21, 2010
  23. Johannes SixtMar 1, 2010
  24. Paolo BonziniMar 1, 2010

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.