Zjednodušení práce s Git pomocí Pythonu: Automatizace dokumentace commitů

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ů:

  1. 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.
  2. 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.
  3. 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>")

Comments

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *