git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Miklos Vajna <vmiklos@frugalware.org>
Cc: "To: Junio C Hamano" <gitster@pobox.com>,
	git@vger.kernel.org,
	Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	Olivier Marin <dkr@freesurf.fr>
Subject: Re: [PATCH] Build in merge
Date: Mon, 07 Jul 2008 17:53:23 -0700	[thread overview]
Message-ID: <7v1w25yz5o.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <7v63rhz03x.fsf@gitster.siamese.dyndns.org> (Junio C. Hamano's message of "Mon, 07 Jul 2008 17:32:50 -0700")

Junio C Hamano <gitster@pobox.com> writes:

> That is not what I meant.  I am afraid perhaps I misunderstood what you
> were talking about.
> ...
> The comparison I gave was between the above two.  But the change you are
> talking about is completely different, isn't it?
>
> The part that records which strategies were specified from the command
> line *in what order* via "-s foo" switches should remain list of pointers
> into "struct strategy", which is called "struct strategy **use_strategies"
> in the code and corresponds to the $use_strategies variable in the
> scripted version.

Here is what I meant to suggest; sorry for confusing you with an initial
typo of having only one pointer in front of use_strategies "array of
pointers".  Applies on top of your previous round.

--

 builtin-merge.c |   58 +++++++++++++++++++++++++++---------------------------
 1 files changed, 29 insertions(+), 29 deletions(-)

diff --git a/builtin-merge.c b/builtin-merge.c
index 7312997..b2e702a 100644
--- a/builtin-merge.c
+++ b/builtin-merge.c
@@ -44,7 +44,7 @@ static int allow_trivial = 1, have_message;
 static struct strbuf merge_msg;
 static struct commit_list *remoteheads;
 static unsigned char head[20], stash[20];
-static struct strategy *use_strategies;
+static struct strategy **use_strategies;
 static size_t use_strategies_nr, use_strategies_alloc;
 static const char *branch;
 
@@ -74,44 +74,44 @@ static int option_parse_message(const struct option *opt,
 	return 0;
 }
 
-static int strategy_lookup(const char *path)
+static struct strategy *get_strategy(const char *name)
 {
 	int i;
 
-	if (!path)
-		return -1;
+	if (!name)
+		return NULL;
 
 	for (i = 0; i < ARRAY_SIZE(all_strategy); i++)
-		if (!strcmp(path, all_strategy[i].name))
-			return all_strategy[i].attr;
-	return -1;
+		if (!strcmp(name, all_strategy[i].name))
+			return &all_strategy[i];
+	return NULL;
 }
 
-static inline void append_strategy(const char *name, unsigned attr)
+static void append_strategy(struct strategy *s)
 {
 	ALLOC_GROW(use_strategies, use_strategies_nr + 1, use_strategies_alloc);
-	use_strategies[use_strategies_nr].name = name;
-	use_strategies[use_strategies_nr++].attr = attr;
+	use_strategies[use_strategies_nr++] = s;
 }
 
 static int option_parse_strategy(const struct option *opt,
-	const char *arg, int unset)
+				 const char *name, int unset)
 {
-	int i, attr;
+	int i;
+	struct strategy *s;
 
 	if (unset)
 		return 0;
 
-	attr = strategy_lookup(arg);
+	s = get_strategy(name);
 
-	if (attr >= 0)
-		append_strategy(arg, attr);
+	if (s)
+		append_strategy(s);
 	else {
 		struct strbuf err;
 		strbuf_init(&err, 0);
 		for (i = 0; i < ARRAY_SIZE(all_strategy); i++)
 			strbuf_addf(&err, " %s", all_strategy[i].name);
-		fprintf(stderr, "Could not find merge strategy '%s'.\n", arg);
+		fprintf(stderr, "Could not find merge strategy '%s'.\n", name);
 		fprintf(stderr, "Available strategies are:%s.\n", err.buf);
 		exit(1);
 	}
@@ -643,18 +643,18 @@ static void add_strategies(const char *string, unsigned attr)
 	split_merge_strategies(string, &list, &list_nr, &list_alloc);
 	if (list != NULL) {
 		for (i = 0; i < list_nr; i++) {
-			int attr;
+			struct strategy *s;
 
-			attr = strategy_lookup(list[i].name);
-			if (attr >= 0)
-				append_strategy(list[i].name, attr);
+			s = get_strategy(list[i].name);
+			if (s)
+				append_strategy(s);
 		}
 		return;
 	}
 	for (i = 0; i < ARRAY_SIZE(all_strategy); i++)
 		if (all_strategy[i].attr & attr)
-			append_strategy(all_strategy[i].name,
-				all_strategy[i].attr);
+			append_strategy(&all_strategy[i]);
+
 }
 
 static int merge_trivial(void)
@@ -903,9 +903,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 	}
 
 	for (i = 0; i < use_strategies_nr; i++) {
-		if (use_strategies[i].attr & NO_FAST_FORWARD)
+		if (use_strategies[i]->attr & NO_FAST_FORWARD)
 			allow_fast_forward = 0;
-		if (use_strategies[i].attr & NO_TRIVIAL)
+		if (use_strategies[i]->attr & NO_TRIVIAL)
 			allow_trivial = 0;
 	}
 
@@ -1043,14 +1043,14 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 		}
 		if (use_strategies_nr != 1)
 			printf("Trying merge strategy %s...\n",
-				use_strategies[i].name);
+				use_strategies[i]->name);
 		/*
 		 * Remember which strategy left the state in the working
 		 * tree.
 		 */
-		wt_strategy = use_strategies[i].name;
+		wt_strategy = use_strategies[i]->name;
 
-		ret = try_merge_strategy(use_strategies[i].name,
+		ret = try_merge_strategy(use_strategies[i]->name,
 			common, head_arg);
 		if (!option_commit && !ret) {
 			merge_was_ok = 1;
@@ -1072,7 +1072,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 				int cnt = evaluate_result();
 
 				if (best_cnt <= 0 || cnt <= best_cnt) {
-					best_strategy = use_strategies[i].name;
+					best_strategy = use_strategies[i]->name;
 					best_cnt = cnt;
 				}
 			}
@@ -1106,7 +1106,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 				"No merge strategy handled the merge.\n");
 		else
 			fprintf(stderr, "Merge with strategy %s failed.\n",
-				use_strategies[0].name);
+				use_strategies[0]->name);
 		return 2;
 	} else if (best_strategy == wt_strategy)
 		; /* We already have its result in the working tree. */

  reply	other threads:[~2008-07-08  0:54 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-27 16:21 [PATCH 00/15] Build in merge Miklos Vajna
2008-06-27 16:21 ` [PATCH 01/15] Move split_cmdline() to alias.c Miklos Vajna
2008-06-27 16:21   ` [PATCH 02/15] Move commit_list_count() to commit.c Miklos Vajna
2008-06-27 16:21     ` [PATCH 03/15] Move parse-options's skip_prefix() to git-compat-util.h Miklos Vajna
2008-06-27 16:21       ` [PATCH 04/15] Add new test to ensure git-merge handles pull.twohead and pull.octopus Miklos Vajna
2008-06-27 16:21         ` [PATCH 05/15] Move read_cache_unmerged() to read-cache.c Miklos Vajna
2008-06-27 16:21           ` [PATCH 06/15] git-fmt-merge-msg: make it usable from other builtins Miklos Vajna
2008-06-27 16:22             ` [PATCH 07/15] Introduce get_octopus_merge_bases() in commit.c Miklos Vajna
2008-06-27 16:22               ` [PATCH 08/15] Add new test to ensure git-merge handles more than 25 refs Miklos Vajna
2008-06-27 16:22                 ` [PATCH 09/15] Introduce get_merge_bases_many() Miklos Vajna
2008-06-27 16:22                   ` [PATCH 10/15] Introduce reduce_heads() Miklos Vajna
2008-06-27 16:22                     ` [PATCH 11/15] Add strbuf_vaddf(), use it in strbuf_addf(), and add strbuf_initf() Miklos Vajna
2008-06-27 16:22                       ` [PATCH 12/15] strbuf_vaddf(): support %*s, too Miklos Vajna
2008-06-27 16:22                         ` [PATCH 13/15] Add new test case to ensure git-merge reduces octopus parents when possible Miklos Vajna
2008-06-27 16:22                           ` [PATCH 14/15] Add new test case to ensure git-merge prepends the custom merge message Miklos Vajna
2008-06-27 16:22                             ` [PATCH 15/15] Build in merge Miklos Vajna
2008-06-27 17:09                               ` Miklos Vajna
2008-06-28  2:00                       ` [PATCH 11/15] Add strbuf_vaddf(), use it in strbuf_addf(), and add strbuf_initf() Junio C Hamano
2008-06-28  2:33                         ` Miklos Vajna
2008-06-28  2:38                           ` [PATCH 13/13] Build in merge Miklos Vajna
2008-06-29  7:46                             ` Junio C Hamano
2008-06-29  8:11                               ` Jakub Narebski
2008-06-30  1:36                               ` Miklos Vajna
2008-06-30  1:39                                 ` Miklos Vajna
2008-06-30  5:44                                   ` Junio C Hamano
2008-06-30 17:41                                     ` Alex Riesen
2008-07-01  2:13                                     ` Miklos Vajna
2008-07-01  2:22                                       ` [PATCH 13/14] git-commit-tree: make it usable from other builtins Miklos Vajna
2008-07-01  5:07                                         ` Johannes Schindelin
2008-07-01  5:50                                         ` Junio C Hamano
2008-07-01 12:09                                           ` Miklos Vajna
2008-07-01  2:22                                       ` [PATCH 14/14] Build in merge Miklos Vajna
2008-07-01  2:37                                         ` [PATCH 00/14] " Miklos Vajna
2008-07-01  2:37                                           ` [PATCH 08/14] Add new test to ensure git-merge handles more than 25 refs Miklos Vajna
2008-07-01  2:37                                             ` [PATCH 13/14] git-commit-tree: make it usable from other builtins Miklos Vajna
2008-07-01  2:37                                               ` [PATCH 14/14] Build in merge Miklos Vajna
2008-07-01  6:23                                                 ` Junio C Hamano
2008-07-01 12:50                                                   ` Miklos Vajna
2008-07-01 13:18                                                     ` Miklos Vajna
2008-07-01 23:55                                                       ` Junio C Hamano
2008-07-02  7:43                                                         ` Miklos Vajna
2008-07-06  8:50                                                       ` Junio C Hamano
2008-07-06  9:43                                                         ` Junio C Hamano
2008-07-07 17:17                                                           ` Miklos Vajna
2008-07-07 18:15                                                             ` Junio C Hamano
2008-07-07 23:42                                                               ` [PATCH] " Miklos Vajna
2008-07-08  0:32                                                                 ` Junio C Hamano
2008-07-08  0:53                                                                   ` Junio C Hamano [this message]
2008-07-08  1:18                                                                     ` Miklos Vajna
2008-07-08  1:00                                                                   ` Miklos Vajna
2008-07-08  1:05                                                                     ` Junio C Hamano
2008-07-08  1:41                                                                       ` Miklos Vajna
2008-07-06 12:38                                                         ` [PATCH 14/14] " Johannes Schindelin
2008-07-06 19:39                                                           ` Junio C Hamano
2008-07-07 17:24                                                         ` [PATCH] " Miklos Vajna
2008-07-07 17:35                                                           ` Miklos Vajna
2008-07-01  7:27                                                 ` [PATCH 14/14] " Junio C Hamano
2008-07-01 12:55                                                   ` Miklos Vajna
2008-06-30 22:44                                   ` [PATCH 13/13] " Olivier Marin
2008-06-30 22:58                                     ` Miklos Vajna
2008-06-30  5:40                                 ` Junio C Hamano
2008-06-30 22:48                                   ` Miklos Vajna
2008-06-28 17:33                         ` [PATCH 11/15] Add strbuf_vaddf(), use it in strbuf_addf(), and add strbuf_initf() Johannes Schindelin
2008-06-29  8:07                           ` Junio C Hamano
2008-06-29 13:40                             ` Johannes Schindelin
2008-06-29 20:17                               ` Alex Riesen
2008-06-29 20:24                                 ` Junio C Hamano
2008-06-29 20:30                                   ` Sverre Rabbelier
2008-06-27 17:06                 ` [PATCH 08/15] Add new test to ensure git-merge handles more than 25 refs Miklos Vajna
2008-06-29 13:30         ` [PATCH 04/15] Add new test to ensure git-merge handles pull.twohead and pull.octopus Olivier Marin
2008-06-29 14:51           ` [PATCH] " Miklos Vajna
2008-06-29 15:11             ` Miklos Vajna
2008-07-04 16:34         ` [PATCH 04/15] " Mike Ralphson
2008-07-05  0:26           ` Miklos Vajna
2008-07-05  0:32             ` [PATCH] Fix t7601-merge-pull-config.sh on AIX Miklos Vajna
2008-07-05  1:49               ` Junio C Hamano
2008-06-29 14:05   ` [PATCH 01/15] Move split_cmdline() to alias.c Olivier Marin
2008-06-29 14:15     ` Johannes Schindelin
2008-06-29 14:29       ` Olivier Marin
2008-06-29 14:43         ` Johannes Schindelin
2008-06-30 22:51           ` Olivier Marin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7v1w25yz5o.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=dkr@freesurf.fr \
    --cc=git@vger.kernel.org \
    --cc=vmiklos@frugalware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).