summaryrefslogtreecommitdiff
path: root/trace.c
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2016-01-26 22:52:02 -0800
committerLibravatar Junio C Hamano <gitster@pobox.com>2016-01-27 15:45:55 -0800
commit441981bc85ea2b648d7ffb2515b371071208e657 (patch)
tree30ae62834e4e49c774ea9b2708233b2f7e605c8f /trace.c
parentgit: protect against unbalanced calls to {save,restore}_env() (diff)
downloadtgif-441981bc85ea2b648d7ffb2515b371071208e657.tar.xz
git: simplify environment save/restore logic
The only code that cares about the value of the global variable saved_env_before_alias after the previous fix is handle_builtin() that turns into a glorified no-op when the variable is true, so the logic could safely be lifted to its caller, i.e. the caller can refrain from calling it when the variable is set. This variable tells us if save_env_before_alias() was called (with or without matching restore_env()), but the sole caller of the function, handle_alias(), always calls it as the first thing, so we can consider that the variable essentially keeps track of the fact that handle_alias() has ever been called. It turns out that handle_builtin() and handle_alias() are called only from one function in a way that the value of the variable matters, which is run_argv(), and it already keeps track of the fact that it already called handle_alias(). So we can simplify the whole thing by: - Change handle_builtin() to always make a direct call to the builtin implementation it finds, and make sure the caller refrains from calling it if handle_alias() has ever been called; - Remove saved_env_before_alias variable, and instead use the local "done_alias" variable maintained inside run_argv() to make the same decision. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'trace.c')
0 files changed, 0 insertions, 0 deletions