diff options
author | Ramsay Jones <ramsay@ramsay1.demon.co.uk> | 2011-06-16 21:24:51 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-06-16 15:10:59 -0700 |
commit | 924aaf3ef764a5e8e976f68e024ecacf54ff6306 (patch) | |
tree | 38650f7330aa4312cb7b82e1ca2ffb5d28df694d /compat | |
parent | 452993c297530498780d4b0c7b2b267258cb625f (diff) | |
download | git-924aaf3ef764a5e8e976f68e024ecacf54ff6306.tar.gz git-924aaf3ef764a5e8e976f68e024ecacf54ff6306.tar.xz |
config.c: Make git_config() work correctly when called recursively
On Cygwin, this fixes a test failure in t3301-notes.sh (test 98,
"git notes copy --for-rewrite (disabled)").
The test failure is caused by a recursive call to git_config() which
has the effect of skipping to the end-of-file while processing the
"notes.rewriteref" config variable. Thus, any config variables that
appear after "notes.rewriteref" are simply ignored by git_config().
Also, we note that the original FILE handle is leaked as a result
of the recursive call.
The recursive call to git_config() is due to the "schizophrenic stat"
functions on cygwin, where one of two different implementations of
the l/stat functions is selected lazily, depending on some config
variables.
In this case, the init_copy_notes_for_rewrite() function calls
git_config() with the notes_rewrite_config() callback function.
This callback, while processing the "notes.rewriteref" variable,
in turn calls string_list_add_refs_by_glob() to process the
associated ref value. This eventually leads to a call to the
get_ref_dir() function, which in turn calls stat(). On cygwin,
the stat() macro leads to an indirect call to cygwin_stat_stub()
which, via init_stat(), then calls git_config() in order to
determine which l/stat implementation to bind to.
In order to solve this problem, we modify git_config() so that the
global state variables used by the config reading code is packaged
up and managed on a local state stack.
Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'compat')
0 files changed, 0 insertions, 0 deletions