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

[PATCH 3/5] checkout: consolidate reset_{to_new,clean_to_new|()

From
Junio C Hamano <gitster@pobox.com>
Date
May 29, 2008, 00:17 UTC
Message-ID
<1212020246-26480-4-git-send-email-gitster@pobox.com>
In-Reply-To
<1212020246-26480-3-git-send-email-gitster@pobox.com>
These two were very similar functions with only tiny bit of difference.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 * This may be a bit hard to read but "struct checkout_opts" is moved up
   at the same time as it is passed to the consolidated function as its
   parameter.
 builtin-checkout.c |   50 +++++++++++++++-----------------------------------
 1 files changed, 15 insertions(+), 35 deletions(-)
diff --git a/builtin-checkout.c b/builtin-checkout.c
index cc97724..9af5197 100644
--- a/builtin-checkout.c
+++ b/builtin-checkout.c
@@ -151,39 +151,29 @@ static void describe_detached_head(char *msg, struct commit *commit)
 	strbuf_release(&sb);
 }
 
-static int reset_to_new(struct tree *tree, int quiet)
-{
-	struct unpack_trees_options opts;
-	struct tree_desc tree_desc;
-
-	memset(&opts, 0, sizeof(opts));
-	opts.head_idx = -1;
-	opts.update = 1;
-	opts.reset = 1;
-	opts.merge = 1;
-	opts.fn = oneway_merge;
-	opts.verbose_update = !quiet;
-	opts.src_index = &the_index;
-	opts.dst_index = &the_index;
-	parse_tree(tree);
-	init_tree_desc(&tree_desc, tree->buffer, tree->size);
-	if (unpack_trees(1, &tree_desc, &opts))
-		return 128;
-	return 0;
-}
+struct checkout_opts {
+	int quiet;
+	int merge;
+	int force;
+
+	char *new_branch;
+	int new_branch_log;
+	enum branch_track track;
+};
 
-static int reset_clean_to_new(struct tree *tree, int quiet)
+static int reset_tree(struct tree *tree, struct checkout_opts *o, int worktree)
 {
 	struct unpack_trees_options opts;
 	struct tree_desc tree_desc;
 
 	memset(&opts, 0, sizeof(opts));
 	opts.head_idx = -1;
-	opts.skip_unmerged = 1;
+	opts.update = worktree;
+	opts.skip_unmerged = !worktree;
 	opts.reset = 1;
 	opts.merge = 1;
 	opts.fn = oneway_merge;
-	opts.verbose_update = !quiet;
+	opts.verbose_update = !o->quiet;
 	opts.src_index = &the_index;
 	opts.dst_index = &the_index;
 	parse_tree(tree);
@@ -193,16 +183,6 @@ static int reset_clean_to_new(struct tree *tree, int quiet)
 	return 0;
 }
 
-struct checkout_opts {
-	int quiet;
-	int merge;
-	int force;
-
-	char *new_branch;
-	int new_branch_log;
-	enum branch_track track;
-};
-
 struct branch_info {
 	const char *name; /* The short name used */
 	const char *path; /* The full name of a real branch */
@@ -227,7 +207,7 @@ static int merge_working_tree(struct checkout_opts *opts,
 	read_cache();
 
 	if (opts->force) {
-		ret = reset_to_new(new->commit->tree, opts->quiet);
+		ret = reset_tree(new->commit->tree, opts, 1);
 		if (ret)
 			return ret;
 	} else {
@@ -291,12 +271,12 @@ static int merge_working_tree(struct checkout_opts *opts,
 			add_files_to_cache(NULL, NULL, 0);
 			work = write_tree_from_memory();
 
-			ret = reset_to_new(new->commit->tree, opts->quiet);
+			ret = reset_tree(new->commit->tree, opts, 1);
 			if (ret)
 				return ret;
 			merge_trees(new->commit->tree, work, old->commit->tree,
 				    new->name, "local", &result);
-			ret = reset_clean_to_new(new->commit->tree, opts->quiet);
+			ret = reset_tree(new->commit->tree, opts, 0);
 			if (ret)
 				return ret;
 		}
-- 
1.5.6.rc0.43.g823ea
Previous: Junio C HamanoNext: Junio C Hamano
Message 4 of 20 in “"best effort" checkout”
  1. 0/5 "best effort" checkoutJunio C Hamano, May 29, 2008
  2. 1/5 "git checkout -- paths..." should error out when paths cannot be writtenJunio C Hamano, May 29, 2008
  3. 2/5 checkout: make reset_clean_to_new() not die by itselfJunio C Hamano, May 29, 2008
  4. 3/5 checkout: consolidate reset_{to_new,clean_to_new|()Junio C Hamano, May 29, 2008
  5. 4/5 unpack_trees(): allow callers to differentiate worktree errors from merge errorsJunio C Hamano, May 29, 2008
  6. 5/5 checkout: "best effort" checkoutJunio C Hamano, May 29, 2008
  7. 6/5 NUL hack to create_file()Junio C Hamano, May 29, 2008
  8. Johannes SixtMay 29, 2008
  9. Marius Storm-OlsenMay 29, 2008
  10. Johannes SixtMay 29, 2008
  11. Daniel BarkalowMay 29, 2008
  12. Brian DessentMay 29, 2008
  13. Daniel BarkalowMay 29, 2008
  14. Johannes SchindelinMay 29, 2008
  15. Daniel BarkalowMay 29, 2008
  16. Junio C HamanoMay 29, 2008
  17. Alex RiesenMay 29, 2008
  18. Mark LevedahlMay 29, 2008
  19. Junio C HamanoMay 30, 2008
  20. Mark LevedahlMay 30, 2008

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.