-
|
I find that when i use commit1.diff(commit2,create_patch = true), chang_type of Diff is aways none. if create_patch = False, i kown that i can get chang_type of Diff , but I can get hunk text. Can i get Diff text ,and meanWhile get chang_type of Diff? |
Beta Was this translation helpful? Give feedback.
-
|
+1 For getting change_type also set on diff item when create_patch=True. @SongXueZhi Approach depends on your intention for further processing, but you can certainly retrieve the change type info even from a Diff generated with create_patch=True: def get_change_type_of_diff_item(diff_item):
if diff_item.new_file:
change_type = 'Added'
elif diff_item.deleted_file:
change_type = 'Deleted'
elif diff_item.renamed_file:
change_type = 'Renamed'
elif diff_item.copied_file:
change_type = 'Copied'
else:
change_type = 'Modified'
return change_type
Usage Example: repo = git.Repo('/path/to/repository')
diff_index = repo.head.commit.diff(None, create_patch=True)
for diff in diff_index:
print(f"{get_change_type_of_diff_item(diff)}: {diff.a_path if diff.a_path else diff.b_path}")
```
|
Beta Was this translation helpful? Give feedback.
-
|
If you want to do it in a single line, although it's just slightly inefficient this way: def get_file_diff_type(d: git.Diff) -> str:
# Note: `diff.change_type` is not used because it was observed to not be populated when using `create_patch=True`.
return {d.copied_file: 'copied', d.deleted_file: 'deleted', d.new_file: 'new', d.renamed_file: 'renamed'}.get(True, 'modified')
|
Beta Was this translation helpful? Give feedback.
+1 For getting change_type also set on diff item when create_patch=True.
@SongXueZhi Approach depends on your intention for further processing, but you can certainly retrieve the change type info even from a Diff generated with create_patch=True:
Usage Example: