git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 2/3] trace2: avoid emitting 'def_param' set more than once

From
JGJeff Hostetler via GitGitGadget <gitgitgadget@gmail.com>
Date
Mar 7, 2024, 15:22 UTC
Message-ID
<65068e97597241e297f5d7cdb60012be1784e9dc.1709824949.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.1679.v2.git.1709824949.gitgitgadget@gmail.com>
From: Jeff Hostetler <jeffhostetler@github.com>

During nested alias expansion it is possible for "trace2_cmd_list_config()" and "trace2_cmd_list_env_vars()" to be called more than once. This causes a full set of 'def_param' events to be emitted each time. Let's avoid that.

Add code to those two functions to only emit them once.
Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
---
 t/t0211-trace2-perf.sh |  2 +-
 trace2.c               | 12 ++++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/t/t0211-trace2-perf.sh b/t/t0211-trace2-perf.sh
index 588c5bad033..7b353195396 100755
--- a/t/t0211-trace2-perf.sh
+++ b/t/t0211-trace2-perf.sh
@@ -470,7 +470,7 @@ test_expect_success 'expect def_params during shell alias expansion' '
 	grep "d1|main|def_param|.*|ENV_PROP_FOO:blue" actual
 '
 
-test_expect_failure 'expect def_params during nested git alias expansion' '
+test_expect_success 'expect def_params during nested git alias expansion' '
 	test_when_finished "rm prop.perf actual" &&
 
 	test_config_global "trace2.configParams" "cfg.prop.*" &&
diff --git a/trace2.c b/trace2.c
index f1e268bd159..facce641ef3 100644
--- a/trace2.c
+++ b/trace2.c
@@ -464,17 +464,29 @@ void trace2_cmd_alias_fl(const char *file, int line, const char *alias,
 
 void trace2_cmd_list_config_fl(const char *file, int line)
 {
+	static int emitted = 0;
+
 	if (!trace2_enabled)
 		return;
 
+	if (emitted)
+		return;
+	emitted = 1;
+
 	tr2_cfg_list_config_fl(file, line);
 }
 
 void trace2_cmd_list_env_vars_fl(const char *file, int line)
 {
+	static int emitted = 0;
+
 	if (!trace2_enabled)
 		return;
 
+	if (emitted)
+		return;
+	emitted = 1;
+
 	tr2_list_env_vars_fl(file, line);
 }
 
-- 
gitgitgadget
Previous: Jeff Hostetler via GitGitGadgetNext: Jeff Hostetler via GitGitGadget
Message 11 of 13 in “trace2: move 'def_param' events into 'cmd_name' and 'cmd_alias'”
  1. 0/4 trace2: move 'def_param' events into 'cmd_name' and 'cmd_alias'Jeff Hostetler via GitGitGadget, Mar 4, 2024
  2. 1/4 t0211: demonstrate missing 'def_param' events for certain commandsJeff Hostetler via GitGitGadget, Mar 4, 2024
  3. 2/4 trace2: avoid emitting 'def_param' set more than onceJeff Hostetler via GitGitGadget, Mar 4, 2024
  4. 3/4 trace2: emit 'def_param' set with 'cmd_name' eventJeff Hostetler via GitGitGadget, Mar 4, 2024
  5. 4/4 trace2: remove unneeded calls to generate 'def_param' setJeff Hostetler via GitGitGadget, Mar 4, 2024
  6. Josh SteadmonMar 6, 2024
  7. Junio C HamanoMar 6, 2024
  8. Jeff HostetlerMar 6, 2024
  9. Junio C HamanoMar 6, 2024
  10. 0/3 trace2: move generation of 'def_param' events into code for 'cmd_name'Jeff Hostetler via GitGitGadget, Mar 7, 2024
  11. 2/3 trace2: avoid emitting 'def_param' set more than onceJeff Hostetler via GitGitGadget, Mar 7, 2024
  12. 1/3 t0211: demonstrate missing 'def_param' events for certain commandsJeff Hostetler via GitGitGadget, Mar 7, 2024
  13. 3/3 trace2: emit 'def_param' set with 'cmd_name' eventJeff Hostetler via GitGitGadget, Mar 7, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.