superproject: Log argv parameter of syncstate as 'data-json'.

Fixed: "we need to make a special case for logging the argv; it
should probably be a "data-json" event so that we log this directly as
an array rather than an encoded string.

Tested:
$ repo_dev sync

Verified event logged for argv is "data-json".

$./run_tests

Bug: [google internal] b/201102002
Change-Id: I18ccec79c73c8dc931cb8afc472b2361db8aea4c
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/319055
Reviewed-by: Josh Steadmon <steadmon@google.com>
Reviewed-by: Xin Li <delphij@google.com>
Tested-by: Raman Tenneti <rtenneti@google.com>
diff --git a/git_trace2_event_log.py b/git_trace2_event_log.py
index 92c4cc6..0d4f23f 100644
--- a/git_trace2_event_log.py
+++ b/git_trace2_event_log.py
@@ -167,6 +167,10 @@
     repo_config = {k: v for k, v in config.items() if k.startswith('repo.')}
     self.LogConfigEvents(repo_config, 'def_param')
 
+  def GetDataEventName(self, key):
+    """Returns the 'data-json' if the key is argv else returns 'data'."""
+    return 'data-json' if key.endswith('sys.argv') else 'data'
+
   def LogDataConfigEvents(self, config, prefix):
     """Append a 'data' event for each config key/value in |config| to the current log.
 
@@ -178,7 +182,7 @@
       prefix: Prefix for each key that is logged.
     """
     for key, value in config.items():
-      event = self._CreateEventDict('data')
+      event = self._CreateEventDict(self.GetDataEventName(key))
       event['key'] = f'{prefix}/{key}'
       event['value'] = value
       self._log.append(event)
diff --git a/tests/test_git_trace2_event_log.py b/tests/test_git_trace2_event_log.py
index a5a6cbb..6131c7b 100644
--- a/tests/test_git_trace2_event_log.py
+++ b/tests/test_git_trace2_event_log.py
@@ -42,7 +42,7 @@
     self._event_log_module = git_trace2_event_log.EventLog(env=env)
     self._log_data = None
 
-  def verifyCommonKeys(self, log_entry, expected_event_name, full_sid=True):
+  def verifyCommonKeys(self, log_entry, expected_event_name=None, full_sid=True):
     """Helper function to verify common event log keys."""
     self.assertIn('event', log_entry)
     self.assertIn('sid', log_entry)
@@ -50,7 +50,8 @@
     self.assertIn('time', log_entry)
 
     # Do basic data format validation.
-    self.assertEqual(expected_event_name, log_entry['event'])
+    if expected_event_name:
+      self.assertEqual(expected_event_name, log_entry['event'])
     if full_sid:
       self.assertRegex(log_entry['sid'], self.FULL_SID_REGEX)
     else:
@@ -246,6 +247,7 @@
         'git.foo': 'bar',
         'repo.partialclone': 'false',
         'repo.syncstate.superproject.hassuperprojecttag': 'true',
+        'repo.syncstate.superproject.sys.argv': ['--', 'sync', 'protobuf'],
     }
     prefix_value = 'prefix'
     self._event_log_module.LogDataConfigEvents(config, prefix_value)
@@ -254,17 +256,18 @@
       log_path = self._event_log_module.Write(path=tempdir)
       self._log_data = self.readLog(log_path)
 
-    self.assertEqual(len(self._log_data), 4)
+    self.assertEqual(len(self._log_data), 5)
     data_events = self._log_data[1:]
     self.verifyCommonKeys(self._log_data[0], expected_event_name='version')
 
     for event in data_events:
-      self.verifyCommonKeys(event, expected_event_name='data')
+      self.verifyCommonKeys(event)
       # Check for 'data' event specific fields.
       self.assertIn('key', event)
       self.assertIn('value', event)
       key = event['key'].removeprefix(f'{prefix_value}/')
       value = event['value']
+      self.assertEqual(self._event_log_module.GetDataEventName(key), event['event'])
       self.assertTrue(key in config and value == config[key])
 
   def test_error_event(self):