Abstract git change calculator
This commit is contained in:
parent
b1d5415625
commit
3bafd25cab
1 changed files with 51 additions and 40 deletions
|
@ -57,6 +57,54 @@ def get_all_commands(module: ModuleType = jarvis.cogs) -> Dict[str, Callable]:
|
||||||
return {k: v for k, v in commands.items() if v}
|
return {k: v for k, v in commands.items() if v}
|
||||||
|
|
||||||
|
|
||||||
|
def get_git_changes() -> dict:
|
||||||
|
"""Get all Git changes"""
|
||||||
|
repo = git.Repo(".")
|
||||||
|
current_hash = repo.head.object.hexsha
|
||||||
|
origin = repo.remotes.origin
|
||||||
|
changes = origin.fetch()
|
||||||
|
|
||||||
|
file_changes = {}
|
||||||
|
for change in changes:
|
||||||
|
if change.commit.hexsha == current_hash:
|
||||||
|
break
|
||||||
|
files = change.commit.stats.files
|
||||||
|
for file, stats in files.items():
|
||||||
|
if file not in file_changes:
|
||||||
|
file_changes[file] = {"insertions": 0, "deletions": 0, "lines": 0}
|
||||||
|
for k, v in stats.items():
|
||||||
|
file_changes[file][k] += v
|
||||||
|
|
||||||
|
table = Table(title="File Changes")
|
||||||
|
|
||||||
|
table.add_column("File", justify="left", style="white", no_wrap=True)
|
||||||
|
table.add_column("Insertions", justify="center", style="green")
|
||||||
|
table.add_column("Deletions", justify="center", style="red")
|
||||||
|
table.add_column("Lines", justify="center", style="magenta")
|
||||||
|
|
||||||
|
i_total = 0
|
||||||
|
d_total = 0
|
||||||
|
l_total = 0
|
||||||
|
for file, stats in file_changes.items():
|
||||||
|
i_total += stats["insertions"]
|
||||||
|
d_total += stats["deletions"]
|
||||||
|
l_total += stats["lines"]
|
||||||
|
table.add_row(
|
||||||
|
file,
|
||||||
|
str(stats["insertions"]),
|
||||||
|
str(stats["deletions"]),
|
||||||
|
str(stats["lines"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
table.add_row("Total", str(i_total), str(d_total), str(l_total))
|
||||||
|
return {
|
||||||
|
"table": table,
|
||||||
|
"inserted_lines": i_total,
|
||||||
|
"deleted_lines": d_total,
|
||||||
|
"total_lines": l_total,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async def update(bot: "Snake", logger: "Logger" = None) -> Optional[UpdateResult]:
|
async def update(bot: "Snake", logger: "Logger" = None) -> Optional[UpdateResult]:
|
||||||
"""
|
"""
|
||||||
Update JARVIS and return an UpdateResult.
|
Update JARVIS and return an UpdateResult.
|
||||||
|
@ -79,9 +127,9 @@ async def update(bot: "Snake", logger: "Logger" = None) -> Optional[UpdateResult
|
||||||
if current_hash != remote_hash:
|
if current_hash != remote_hash:
|
||||||
logger.info(f"Updating from {current_hash} to {remote_hash}")
|
logger.info(f"Updating from {current_hash} to {remote_hash}")
|
||||||
current_commands = get_all_commands()
|
current_commands = get_all_commands()
|
||||||
|
changes = get_git_changes()
|
||||||
|
|
||||||
changes = origin.pull()
|
origin.pull()
|
||||||
logger.info(f"Pulled {len(changes)} changes")
|
|
||||||
await asyncio.sleep(3)
|
await asyncio.sleep(3)
|
||||||
|
|
||||||
new_commands = get_all_commands()
|
new_commands = get_all_commands()
|
||||||
|
@ -139,49 +187,12 @@ async def update(bot: "Snake", logger: "Logger" = None) -> Optional[UpdateResult
|
||||||
bot.reload_extension(module)
|
bot.reload_extension(module)
|
||||||
reloaded.append(module)
|
reloaded.append(module)
|
||||||
|
|
||||||
file_changes = {}
|
|
||||||
for change in sorted(changes, key=lambda x: x.commit.committed_datetime, reverse=True):
|
|
||||||
if change.commit.hexsha == current_hash:
|
|
||||||
break
|
|
||||||
files = change.commit.stats.files
|
|
||||||
for file, stats in files.items():
|
|
||||||
if file not in file_changes:
|
|
||||||
file_changes[file] = {"insertions": 0, "deletions": 0, "lines": 0}
|
|
||||||
for k, v in stats.items():
|
|
||||||
file_changes[file][k] += v
|
|
||||||
|
|
||||||
table = Table(title="File Changes")
|
|
||||||
|
|
||||||
table.add_column("File", justify="left", style="white", no_wrap=True)
|
|
||||||
table.add_column("Insertions", justify="center", style="green")
|
|
||||||
table.add_column("Deletions", justify="center", style="red")
|
|
||||||
table.add_column("Lines", justify="center", style="magenta")
|
|
||||||
|
|
||||||
i_total = 0
|
|
||||||
d_total = 0
|
|
||||||
l_total = 0
|
|
||||||
for file, stats in file_changes.items():
|
|
||||||
i_total += stats["insertions"]
|
|
||||||
d_total += stats["deletions"]
|
|
||||||
l_total += stats["lines"]
|
|
||||||
table.add_row(
|
|
||||||
file,
|
|
||||||
str(stats["insertions"]),
|
|
||||||
str(stats["deletions"]),
|
|
||||||
str(stats["lines"]),
|
|
||||||
)
|
|
||||||
|
|
||||||
table.add_row("Total", str(i_total), str(d_total), str(l_total))
|
|
||||||
|
|
||||||
return UpdateResult(
|
return UpdateResult(
|
||||||
table=table,
|
|
||||||
old_hash=current_hash,
|
old_hash=current_hash,
|
||||||
new_hash=remote_hash,
|
new_hash=remote_hash,
|
||||||
added=loaded,
|
added=loaded,
|
||||||
removed=unloaded,
|
removed=unloaded,
|
||||||
changed=reloaded,
|
changed=reloaded,
|
||||||
inserted_lines=i_total,
|
**changes,
|
||||||
deleted_lines=d_total,
|
|
||||||
total_lines=l_total,
|
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
|
|
Loading…
Add table
Reference in a new issue