1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2025-01-16 04:02:15 +00:00
conky/extras/git_ranked.py
Tin Švagelj 30b22b253e
Add blame ignore file (#2113)
* Add blame ignore file
* Add a small utility script in extras to aid in maintainence of the file

Signed-off-by: Tin Švagelj <tin.svagelj@live.com>
2024-12-09 02:25:43 +00:00

81 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python3
import subprocess
def get_first_number(s):
number = ""
found_digit = False
for char in s:
if char.isdigit():
number += char
found_digit = True
elif found_digit:
break
return int(number) if number else None
def git_log():
entries = []
try:
result = subprocess.run(
["git", "log", "--no-merges", "--shortstat", "--pretty=format:%H %n %s"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
check=True,
)
entries = result.stdout.split("\n\n")
except subprocess.CalledProcessError as e:
print(f"Error running git command: {e.stderr}")
return []
commits = []
for line in entries:
info = line.split("\n")
changes = info[2].split(",")
files_changed = get_first_number(changes[0])
insertions = 0
deletions = 0
if len(changes) > 1:
if "insertions" in changes[1]:
insertions = get_first_number(changes[1])
elif "deletions" in changes[1]:
deletions = get_first_number(changes[1])
if len(changes) > 2:
if "insertions" in changes[2]:
insertions = get_first_number(changes[2])
elif "deletions" in changes[2]:
deletions = get_first_number(changes[2])
commit = {
"hash": info[0].strip(),
"message": info[1].strip(),
"changes": {
"files": files_changed,
"insertions": insertions,
"deletions": deletions,
},
}
commits.append(commit)
return commits
def main():
log = git_log()
if len(log) == 0:
return
large_changes = sorted(log, key=lambda it: it["changes"]["insertions"] + it["changes"]["deletions"], reverse=True)
print(f"{'Hash':41} {'Insertions':11} {'Deletions':11} {'Message'}")
print("-" * 90)
for commit in large_changes:
print(
f"{commit['hash']:41} {commit["changes"]['insertions']:11} {commit["changes"]['deletions']:11} {commit['message']}"
)
if __name__ == "__main__":
main()