Ve světě softwarového vývoje je důležité udržovat přehled o změnách v kódu, což se tradičně děje pomocí verzovacího systému Git. Přestože je Git extrémně užitečný nástroj, práce s ním může být někdy zdlouhavá, zejména při vyhledávání specifických informací ve velkém množství commitů. V tomto článku si ukážeme, jak si můžeme práci usnadnit automatizací generování přehledu commitů pomocí Pythonu.
Proč automatizovat přehled commitů?
Přehled commitů nám umožňuje rychle zjistit, kdo co a kdy změnil, což je neocenitelné pro review kódu, sledování historie projektu nebo při hledání zdroje chyb. Ruční procházení logů může být ale časově náročné a náchylné k chybám, zvláště v rozsáhlých projektech.
Jak funguje automatizace?
Uvedený Python skript využívá několik klíčových funkcí pro efektivní správu a dokumentaci commitů:
- Získání logu commitů: Skript používá příkaz
git log
k získání informací o commitech ve formátu, který obsahuje hash commitu, autora, relativní čas od commitu a zprávu commitu. - Odstranění duplicitních zpráv: Aby se zabránilo redundanci v přehledu, skript shromažďuje commity do slovníku (
OrderedDict
), kde klíčem je zpráva commitu. Pokud se zpráva v logu objeví vícekrát, hash kódy těchto commitů jsou sloučeny. - Aktualizace dokumentace: Skript automaticky generuje soubor
readme.md
, který obsahuje aktualizovaný seznam všech commitů ve formátu HTML seznamu. Každá položka seznamu obsahuje číslo, hash commitu a zprávu, což usnadňuje orientaci.
Výhody tohoto přístupu
Automatizace tohoto procesu snižuje riziko lidské chyby, šetří čas a zvyšuje produktivitu týmu. Generování dokumentů, jako je readme.md
, navíc umožňuje lepší sdílení informací mezi členy týmu nebo veřejností, pokud je projekt open-source.
Tento jednoduchý, ale účinný skript je příkladem toho, jak lze rutinní úkoly v softwarovém vývoji automatizovat pro zvýšení efektivity a transparentnosti projektu. Tento přístup je možné dále rozšířit a přizpůsobit specifickým potřebám jakéhokoli vývojového týmu.
import os
from collections import OrderedDict
from datetime import datetime
# Získání commit logu
raw_commits = os.popen('git log --pretty=format:"%h - %an, %ar : %s"').read().split('\n')
# Zpracování commitů pro odstranění duplicit
commits = OrderedDict()
for commit in raw_commits:
parts = commit.split(' : ')
if len(parts) > 1:
commit_message = ' : '.join(parts[1:])
if commit_message not in commits:
commits[commit_message] = parts[0]
else:
# Sloučení hashů pro stejné commit zprávy
commits[commit_message] = commits[commit_message] + ', ' + parts[0]
# Cesta k readme.md
readme_path = 'readme.md'
current_time = datetime.now().strftime("%Y-%m-%d %H:%M")
number = 0
# Aktualizace readme.md
with open(readme_path, 'w') as file:
file.write(f"<h1># Seznam Commitů</h1>\n\n<small>Aktualizováno: {current_time}\n\n</small><hr>")
file.write("<ul class='list-group'>")
for message, hashes in commits.items():
file.write(f"<li class='list-group-item'>{number} -> {hashes} : {message}\n</li>")
number += 1
file.write("</ul>")
Napsat komentář