summaryrefslogtreecommitdiff
path: root/compat
diff options
context:
space:
mode:
authorRamsay Jones <ramsay@ramsay1.demon.co.uk>2011-06-16 20:24:51 (GMT)
committerJunio C Hamano <gitster@pobox.com>2011-06-16 22:10:59 (GMT)
commit924aaf3ef764a5e8e976f68e024ecacf54ff6306 (patch)
tree38650f7330aa4312cb7b82e1ca2ffb5d28df694d /compat
parent452993c297530498780d4b0c7b2b267258cb625f (diff)
downloadgit-924aaf3ef764a5e8e976f68e024ecacf54ff6306.zip
git-924aaf3ef764a5e8e976f68e024ecacf54ff6306.tar.gz
git-924aaf3ef764a5e8e976f68e024ecacf54ff6306.tar.bz2
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