repo: Add a new "command" event type to git trace2 logging in repo.
Add a new "event": "command", which is emitted at when all command
arguments have been processed.
Additional fields:
"name": Name of the primary command (ex: repo, git)
"subcommands"': List of the sub-commands once command-line arguments
are processed
Examples:
Command: repo --version
Event: {"event": "command", <common fields>,
"name": "repo",
"subcommands": ["version"]
}
Bug: [google internal] b/178507266
Testing:
- Unit tests
- Verified repo git trace2 logs had expected data
Change-Id: I825bd0ecedee45135382461a4ba10f987f09aef3
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/300343
Reviewed-by: Ian Kasprzak <iankaz@google.com>
Reviewed-by: Mike Frysinger <vapier@google.com>
Tested-by: Raman Tenneti <rtenneti@google.com>
diff --git a/git_trace2_event_log.py b/git_trace2_event_log.py
index 8c33d80..8f12d1a 100644
--- a/git_trace2_event_log.py
+++ b/git_trace2_event_log.py
@@ -132,6 +132,18 @@
exit_event['code'] = result
self._log.append(exit_event)
+ def CommandEvent(self, name, subcommands):
+ """Append a 'command' event to the current log.
+
+ Args:
+ name: Name of the primary command (ex: repo, git)
+ subcommands: List of the sub-commands (ex: version, init, sync)
+ """
+ command_event = self._CreateEventDict('command')
+ command_event['name'] = name
+ command_event['subcommands'] = subcommands
+ self._log.append(command_event)
+
def DefParamRepoEvents(self, config):
"""Append a 'def_param' event for each repo.* config key to the current log.
diff --git a/main.py b/main.py
index ba5d9d2..9abda6a 100755
--- a/main.py
+++ b/main.py
@@ -254,6 +254,7 @@
cmd_event = cmd.event_log.Add(name, event_log.TASK_COMMAND, start)
cmd.event_log.SetParent(cmd_event)
git_trace2_event_log.StartEvent()
+ git_trace2_event_log.CommandEvent(name='repo', subcommands=[name])
try:
cmd.ValidateOptions(copts, cargs)
diff --git a/tests/test_git_trace2_event_log.py b/tests/test_git_trace2_event_log.py
index 3c5cb15..4a3a4c4 100644
--- a/tests/test_git_trace2_event_log.py
+++ b/tests/test_git_trace2_event_log.py
@@ -161,6 +161,30 @@
self.assertIn('code', exit_event)
self.assertEqual(exit_event['code'], 2)
+ def test_command_event(self):
+ """Test and validate 'command' event data is valid.
+
+ Expected event log:
+ <version event>
+ <command event>
+ """
+ name = 'repo'
+ subcommands = ['init' 'this']
+ self._event_log_module.CommandEvent(name='repo', subcommands=subcommands)
+ with tempfile.TemporaryDirectory(prefix='event_log_tests') as tempdir:
+ log_path = self._event_log_module.Write(path=tempdir)
+ self._log_data = self.readLog(log_path)
+
+ self.assertEqual(len(self._log_data), 2)
+ command_event = self._log_data[1]
+ self.verifyCommonKeys(self._log_data[0], expected_event_name='version')
+ self.verifyCommonKeys(command_event, expected_event_name='command')
+ # Check for 'command' event specific fields.
+ self.assertIn('name', command_event)
+ self.assertIn('subcommands', command_event)
+ self.assertEqual(command_event['name'], name)
+ self.assertEqual(command_event['subcommands'], subcommands)
+
def test_def_params_event_repo_config(self):
"""Test 'def_params' event data outputs only repo config keys.