On Mon, Jun 16, 2014 at 02:15:54AM -0700, Tanay Abhra wrote:
> **DOUBT**
> This patch builds on top of patch series[1]. The first patch in the
> replace `git_config` series is [2], which passed all the tests.
>
> But this patch falters at this test in t1300-repo-config.sh,
>
> git config alias.checkconfig "-c foo.check=bar config foo.check" &&
> echo bar >expect &&
> git checkconfig >actual &&
> test_cmp expect actual
>
> I hand tested this case and the outputs match. But I don't know why the tests
> are failing.
I get:
expecting success:
git config alias.split-cmdline-fix 'echo "' &&
test_must_fail git split-cmdline-fix &&
echo foo > foo &&
git add foo &&
git commit -m 'initial commit' &&
git config branch.master.mergeoptions 'echo "' &&
test_must_fail git merge master
Segmentation fault
test_must_fail: died by signal: git split-cmdline-fix
Running with valgrind gives more details (it looks like the segfault I
mentioned in the other thread).
> char *alias_lookup(const char *alias)
> {
> - alias_key = alias;
> - alias_val = NULL;
> - git_config(alias_lookup_cb, NULL);
> + char *alias_key, *alias_val;
> + const char *v;
> + alias_key = xmalloc(7+strlen(alias));
> + strcpy(alias_key, "alias.");
> + strcat(alias_key, alias);
Please use a strbuf instead of hand-rolling the math. It's much easier
to verify that it is correct, and it avoids badly designed functions
like strcat. I.e.:
struct strbuf key = STRBUF_INIT;
strbuf_addf(&key, "alias.%s", alias);
...
strbuf_release(&key);
(note also that since the key/val variables are no longer static
globals, it's fine to use a shorter, less clunky name).
> + v = git_config_get_string(alias_key);
> + if (!v)
> + config_error_nonbool(alias_key);
What does a NULL output from git_config_get_string mean? I think with
the current code, it means "no such key was found". In which case, you
should be returning NULL here (there is no such alias), not complaining
with config_error_nonbool.
Again, this is going to depend on your strategy for storing booleans
that I mentioned elsewhere.
-Peff
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html