Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion chronicler/events/core/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,11 @@ def _process_action(self, source, time, event_uuid, action, file_data):
else:
raise ValueError(f"No valid action: {action}")

event_id = uuid(event_uuid, file_data['file'], action)
id_args = [event_uuid, file_data['file'], action]
if 'newfile' in file_data:
id_args.append(file_data['newfile'])

event_id = uuid(*id_args)

data = {
"filename": file_data['file'],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
title: Event ID generation for Git actions updated
category: fixed
author: Jose Javier Merchante <jjmerchante@bitergia.com>
issue: null
notes: >
Commits containing multiple copy file actions for the same file
generated duplicate event IDs because the new file name wasn’t
included in the ID calculation.
102 changes: 101 additions & 1 deletion tests/test_git.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@
GIT_EVENT_MERGE_COMMIT,
GIT_EVENT_ACTION_ADDED,
GIT_EVENT_ACTION_MODIFIED,
GIT_EVENT_ACTION_REPLACED)
GIT_EVENT_ACTION_REPLACED,
GIT_EVENT_ACTION_COPIED)


class GitEventizerTestCase(unittest.TestCase):
Expand Down Expand Up @@ -253,6 +254,105 @@ def test_eventize_item_no_uuid(self):
_ = eventizer.eventize_item(raw_item)
self.assertEqual(str(context.exception), "'uuid' attribute not found on item.")

def test_eventize_commit_copy_files(self):
"""Check if events with multiple copied files are generated correctly with different ids"""

eventizer = GitEventizer()

raw_item = {
"backend_name": "Git",
"backend_version": "1.0.1",
"category": "commit",
"classified_fields_filtered": None,
"data": {
"Author": "Tom <tom@example.com>",
"AuthorDate": "Mon Apr 29 16:25:56 2019 -0700",
"Commit": "GitHub <noreply@github.com>",
"CommitDate": "Mon Apr 29 16:25:56 2019 -0700",
"commit": "7882c41g607ee5273da9637da0bb20ca7634cb83",
"files": [
{
"action": "C100",
"added": "0",
"file": "packages/react-events/FocusScope.js",
"indexes": [
"2ff785ef79",
"2ff785ef79"
],
"modes": [
"100644",
"100644"
],
"newfile": "packages/react-events/drag.js",
"removed": "0"
},
{
"action": "C100",
"added": "0",
"file": "packages/react-events/FocusScope.js",
"indexes": [
"2ff785ef79",
"2ff785ef79"
],
"modes": [
"100644",
"100644"
],
"newfile": "packages/react-events/focus-scope.js",
"removed": "0"
}
],
"message": "Sample message for commit",
"parents": [
"43c4e5f348eb5704464886e2dc3221e347041b82"
],
"refs": []
},
"offset": "7882c41g607ee5273da9637da0bb20ca7634cb83",
"origin": "https://example.git",
"perceval_version": "1.2.2",
"search_fields": {
"item_id": "7882c41g607ee5273da9637da0bb20ca7634cb83"
},
"tag": "https://example.git",
"timestamp": 1.748521396234826E9,
"updated_on": 1.556580356E9,
"uuid": "6b4393b86512afc2e6757a6781e6018a661a72b0"
}

events = eventizer.eventize_item(raw_item)

self.assertEqual(len(events), 3)

commit_event = events[0]
self.assertEqual(commit_event['id'], '6b4393b86512afc2e6757a6781e6018a661a72b0')
self.assertEqual(commit_event['type'], GIT_EVENT_COMMIT)
self.assertEqual(commit_event['source'], 'https://example.git')
self.assertEqual(commit_event['time'], 1556580356.0)
self.assertEqual(commit_event.data['message'], "Sample message for commit")

action_event = events[1]
self.assertEqual(action_event['id'], 'b911ec8df7e804b40dddb5f402e82ae816283e9c')
self.assertEqual(action_event['linked_event'], '6b4393b86512afc2e6757a6781e6018a661a72b0')
self.assertEqual(action_event['type'], GIT_EVENT_ACTION_COPIED)
self.assertEqual(action_event['source'], 'https://example.git')
self.assertEqual(action_event['time'], 1556580356.0)
self.assertEqual(action_event.data['filename'], 'packages/react-events/FocusScope.js')
self.assertEqual(action_event.data['new_filename'], 'packages/react-events/drag.js')
self.assertEqual(action_event.data['added_lines'], '0')
self.assertEqual(action_event.data['deleted_lines'], '0')

action_event = events[2]
self.assertEqual(action_event['id'], '5e1d30f0fd85e34cb08987bbb202201a31769b39')
self.assertEqual(action_event['linked_event'], '6b4393b86512afc2e6757a6781e6018a661a72b0')
self.assertEqual(action_event['type'], GIT_EVENT_ACTION_COPIED)
self.assertEqual(action_event['source'], 'https://example.git')
self.assertEqual(action_event['time'], 1556580356.0)
self.assertEqual(action_event.data['filename'], 'packages/react-events/FocusScope.js')
self.assertEqual(action_event.data['new_filename'], 'packages/react-events/focus-scope.js')
self.assertEqual(action_event.data['added_lines'], '0')
self.assertEqual(action_event.data['deleted_lines'], '0')


if __name__ == '__main__':
unittest.main()