Thread (227 messages) 227 messages, 10 authors, 2019-01-07

Re: [PATCH v15 19/27] bisect--helper: `bisect_state` & `bisect_head` shell function in C

From: Pranit Bauva <hidden>
Date: 2016-12-08 06:43:58

Hey Stephan,

On Wed, Dec 7, 2016 at 5:24 AM, Stephan Beyer [off-list ref] wrote:
Hi Pranit,

On 12/06/2016 11:40 PM, Pranit Bauva wrote:
quoted
On Tue, Nov 22, 2016 at 5:42 AM, Stephan Beyer [off-list ref] wrote:
quoted
On 10/14/2016 04:14 PM, Pranit Bauva wrote:
quoted
+static int bisect_state(struct bisect_terms *terms, const char **argv,
+                     int argc)
+{
+     const char *state = argv[0];
+
+     get_terms(terms);
+     if (check_and_set_terms(terms, state))
+             return -1;
+
+     if (!argc)
+             die(_("Please call `--bisect-state` with at least one argument"));
I think this check should move to cmd_bisect__helper. There are also the
other argument number checks.
Not really. After the whole conversion, the cmdmode will cease to
exists while bisect_state will be called directly, thus it is
important to check it here.
Okay, that's a point.
In that case, you should probably use "return error()" again and the
message (mentioning "--bisect-state") does not make sense when
--bisect-state ceases to exist.
True. Will change accordingly.
quoted
quoted
quoted
+
+     if (argc == 1 && one_of(state, terms->term_good,
+         terms->term_bad, "skip", NULL)) {
+             const char *bisected_head = xstrdup(bisect_head());
+             const char *hex[1];
Maybe:
                const char *hex;
quoted
+             unsigned char sha1[20];
+
+             if (get_sha1(bisected_head, sha1))
+                     die(_("Bad rev input: %s"), bisected_head);
And instead of...
quoted
+             if (bisect_write(state, sha1_to_hex(sha1), terms, 0))
+                     return -1;
+
+             *hex = xstrdup(sha1_to_hex(sha1));
+             if (check_expected_revs(hex, 1))
+                     return -1;
... simply:

                hex = xstrdup(sha1_to_hex(sha1));
                if (set_state(terms, state, hex)) {
                        free(hex);
                        return -1;
                }
                free(hex);

where:
Yes I am planning to convert all places with hex rather than the sha1
but not yet, maybe in an another patch series because currently a lot
of things revolve around sha1 and changing its behaviour wouldn't
really be a part of a porting patch series.
I was not suggesting a change of behavior, I was suggesting a simple
helper function set_state() to get rid of code duplication above and
some lines below:
quoted
quoted
... And replace this:
quoted
+                     const char **hex_string = (const char **) &hex.items[i].string;
+                     if(bisect_write(state, *hex_string, terms, 0)) {
+                             string_list_clear(&hex, 0);
+                             return -1;
+                     }
+                     if (check_expected_revs(hex_string, 1)) {
+                             string_list_clear(&hex, 0);
+                             return -1;
+                     }
by:

                        const char *hex_str = hex.items[i].string;
                        if (set_state(terms, state, hex_string)) {
                                string_list_clear(&hex, 0);
                                return -1;
                        }
See?
I can do this change of using set_state() keeping aside the sha1 to
hex and such change.
quoted
quoted
quoted
@@ -184,8 +137,8 @@ exit code \$res from '\$command' is < 0 or >= 128" >&2
                      state="$TERM_GOOD"
              fi

-             # We have to use a subshell because "bisect_state" can exit.
-             ( bisect_state $state >"$GIT_DIR/BISECT_RUN" )
+             # We have to use a subshell because "--bisect-state" can exit.
+             ( git bisect--helper --bisect-state $state >"$GIT_DIR/BISECT_RUN" )
The new comment is funny, but you don't need a subshell here any
longer.
True, but right now I didn't want to modify that part of the source
code to remove the comment. I will remove the comment all together
when I port bisect_run()
For most of the patches, I was commenting on the current state, not on
the big picture.

Still I think that it is better to remove the comment and the subshell
instead of making the comment weird ("yes the builtin can exit, but why
do we need a subshell?" vs "yes the shell function calls exit, so we
need a subshell because we do not want to exit this shell script")
Sure I will remove the comment.

Regards,
Pranit Bauva
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help