In deze zelfstudiereeks leert u hoe u een codebeoordelingsplanner kunt maken met behulp van Python. In de loop van deze serie vecht je tegen enkele basisbegrippen zoals het lezen van e-mails, het verzenden van e-mail, het uitvoeren van terminalopdrachten uit het Python-programma, het verwerken van git-logboeken, enz..
In het eerste deel begin je met het instellen van de basisconfiguratiebestanden, het lezen van git-logs en het verwerken ervan voor het verzenden van het codebeoordelingsverzoek.
Begin met het maken van een projectmap genaamd CodeReviewer
. Binnen in de CodeReviewer
map, maak een bestand aan met de naam scheduler.py
.
Ervan uitgaande dat de code-evaluatieplanner tegen meerdere projecten zal worden uitgevoerd, moet u de projectnaam opgeven waartegen de planner zal worden uitgevoerd en het aantal dagen waarvoor het logboek moet worden verwerkt. Dus lees eerst deze twee parameters als argumenten uit het code review-programma.
Laten we gebruik maken van de argparse
Python-module voor het lezen van de programmaparameters. Importeer de bibliotheek en voeg de programma-argumenten toe. U kunt de ArgumentParser
methode van de argparse
module om de parser te starten. Nadat het is gestart, kunt u de argumenten toevoegen aan de parser. Hier is de code voor het lezen van de argumenten uit het programma:
import argparse parser = argparse.ArgumentParser (description = "Code Review Scheduler Program") parser.add_argument ("- n", nargs = "?", type = int, default = 1, help = "Aantal (d) ays om zoek naar log. ") parser.add_argument (" - p ", nargs ="? ", type = str, default =" em ", help =" Projectnaam. ") args = parser.parse_args () no_days = args. n project = args.p print 'De planner verwerken tegen project' + project + '...'
Laten we een apart configuratiebestand onderhouden dat door de codelezer wordt verwerkt. Maak een bestand met de naam config.json
in de projectdirectory CodeReviewer
. Binnen het configuratiebestand zal er informatie zijn over elk project dat zal worden verwerkt. Hier is hoe het projectconfiguratiebestand eruit zou zien:
["name": "project_x", "git_url": "https://github.com/royagasthyan/project_x", "name": "project_y", "git_url": "https://github.com / royagasthyan / project_y "]
Een paar extra opties zouden aan de projectconfiguraties in de latere delen worden toegevoegd.
Laten we de configuratie lezen JSON
bestand in het Python-programma. Importeer de JSON
module en laad de JSON
data gelezen uit het configuratiebestand.
# # Lees het planningsconfiguratiebestand # met open ('config.json') als cfg_file: main_config = json.load (cfg_file)
Wanneer het revisiescript wordt uitgevoerd, wordt de projectnaam opgegeven als een parameter. Op basis van de opgegeven projectnaam controleert u of de bijbehorende configuraties beschikbaar zijn en kloon u de repository.
Eerst moet u de project-URL uit de configuraties vinden. Herhaal de projectgegevens en vind de project-URL zoals getoond:
voor p in main_config: als p ['naam'] == project: project_url = p ['git_url'] pauze
Zodra u de project-URL heeft, controleert u of het project al is gekloond. Als dit niet het geval is, kloon dan de project-URL. Als het al bestaat, navigeert u naar de bestaande projectdirectory en trekt u de laatste wijzigingen aan.
# Klonen van de repository als deze nog niet bestaat. Print "********* Doet project checkout **********" if (os.path.isdir ("./" + project)): execute_cmd ("cd" + project + "; git pull") else: execute_cmd ("git clone" + project_url + "" + project) print "*** Klaar *******" afdrukken ""
Om systeemopdrachten uit te voeren, maakt u gebruik van de Python os
module. Maak een methode om systeemopdrachten uit te voeren, aangezien u deze veelvuldig zult gebruiken. Hier is de execute_cmd
methode:
def execute_cmd (cmd): print "***** Executing command" "+ cmd +" '"response = os.popen (cmd) .read () return response
Nadat u het commit-logboek uit de Git-repository hebt opgehaald, analyseert u het logboek. Maak een nieuwe Python-methode genaamd process_commits
om de Git-logboeken te verwerken.
def process_commits (): # code zou hier zijn
Git geeft ons de opdrachten om het commit-logboek te krijgen. Om alle logs van een repository te krijgen, zou de opdracht zijn:
git log - allemaal
Het antwoord zou zijn:
commit 04d11e21fb625215c5e672a93d955f4a176e16e4 Auteur: royagasthyanDatum: wo 8 februari 21:41:20 2017 +0530 Maak README.md
U kunt ook logboeken krijgen die specifiek zijn voor het aantal dagen vanaf het moment dat de opdracht is uitgevoerd. Om logs te krijgen sinds n aantal dagen, zou de opdracht zijn:
git log --all --since = n.days
Je kunt het verder verfijnen om te zien of een bepaalde commit een toevoeging, wijziging of verwijdering was. Voer het bovenstaande commando uit met --naam status
:
git log --all --since = 10.days --name-status
Het bovenstaande commando zou de volgende uitvoer hebben:
commit 04d11e21fb625215c5e672a93d955f4a176e16e4 Auteur: royagasthyanDatum: wo 8 februari 21:41:20 2017 +0530 Maak README.md A README.md
De EEN
brief aan de linkerkant van de README.md
bestand geeft toevoeging aan. evenzo, M
zou wijzen op wijziging en D
zou op verwijdering wijzen.
Binnen in de process_commits
methode, laten we de Git-opdracht definiëren die moet worden uitgevoerd om de loggeschiedenis te krijgen.
cmd = "cd" + project + "; git log --all --since =" + str (no_days) + ".day --name-status"
Geef het bovenstaande commando door cmd
naar de execute_cmd
methode.
response = execute_cmd (cmd)
Lees het antwoord, herhaal elke regel en druk dezelfde af.
def process_commits (): cmd = "cd" + project + "; git log --all --since =" + str (no_days) + ".day --name-status" response = execute_cmd (cmd) voor regel in antwoord .splitlines (): printregel
Bel naar de process_commits
methode nadat de configuraties zijn gelezen.
print 'De planner verwerken tegen project' + project + '...' process_commits ()
Sla de bovenstaande wijzigingen op en probeer de codelezer uit te voeren met behulp van de volgende opdracht:
python scheduler.py -n 10 -p "project_x"
Zoals u kunt zien, hebben we de codelezer gestart met het aantal dagen en de projectnaam die moet worden verwerkt. U zou de volgende uitvoer moeten kunnen zien:
********* Project uitchecken ********** ***** Opdracht uitvoeren 'cd project_x; git pull '*** Klaar ******* De planner verwerken tegen project project_x ... ***** Opdracht uitvoeren' cd project_x; git log --all --since = 10.day --name-status 'commit 04d11e21fb625215c5e672a93d955f4a176e16e4 Auteur: royagasthyanDatum: wo 8 februari 21:41:20 2017 +0530 Maak README.md A README.md
Dus wanneer u de codelezer uitvoert, kunt u zien dat de repository wordt gemaakt als deze nog niet bestaat, of anders wordt bijgewerkt. Hierna haalt het, gebaseerd op het aantal verschafte dagen, de geschiedenis van het commit-logbestand op om te verwerken.
Laten we nu het commit-log analyseren om de commit-id, commit-datum en commit-auteur te achterhalen.
Zoals te zien in de logboeken, begint de commit-id met het trefwoord plegen
, auteur begint met het sleutelwoord Schrijver:
, en de datum begint met het sleutelwoord Datum:
. U gebruikt de volgende sleutelwoorden om de commit-id, auteur en datum voor een commit te identificeren.
Laten we proberen de commit-ID van de Git-logregels te krijgen. Dit is vrij eenvoudig. U hoeft alleen maar te controleren of de regel begint met het trefwoord plegen
.
voor line in response.splitlines (): if line.startswith ('commit'): print line [7:]
Sla de wijzigingen op en voer de scheduler uit en u zou de commit-ID moeten kunnen krijgen.
De volgende taak is om de auteursnaam uit te pakken. Als u wilt controleren of de regel de auteursinformatie bevat, controleert u eerst of de regel begint met de Schrijver
trefwoord. Als dit het geval is, maakt u gebruik van een reguliere expressie om de gebruiker te krijgen.
Zoals u kunt zien, bevindt het e-mailadres van de gebruiker zich binnen de tekens "minder dan groter dan". We gebruiken een reguliere expressie om het e-mailadres tussen te lezen < >
. De reguliere expressie zal als volgt zijn:
'\<(.*?)\>'
Importeer de Python opnieuw
module om reguliere expressies te gebruiken in Python.
importeer opnieuw
Controleer nu of de regel begint met de Schrijver
trefwoord. Als dit het geval is, extraheer dan het e-mailadres van de gebruiker met behulp van de bovenstaande reguliere expressie. Hier is hoe het eruit zou zien:
if line.startswith ('Author:'): if (re.search ('\<(.*?)\>', regel)): print re.search (' \<(.*?)\>' Lijn) .Group (1)
Om de commit-datum uit het logboek te halen, moet u controleren of de regel begint met de Datum
trefwoord. Hier is hoe het eruit zou zien:
if line.startswith ('Date:'): print line [5:]
Dit is de finale process_commits
methode:
def process_commits (): cmd = "cd" + project + "; git log --all --since =" + str (no_days) + ".day --name-status" response = execute_cmd (cmd) voor regel in antwoord .splitlines (): if line.startswith ('commit'): print line [7:] als line.startswith ('Author:'): if (re.search ('\<(.*?)\>', regel)): print re.search (' \<(.*?)\>', regel) .groep (1) if line.startswith (' Date: '): print line [5:]
Sla de bovenstaande wijzigingen op en start de codelezer.
python scheduler.py -n 10 -p "project_x"
U moet elk commit-detail hebben met de commit-id, auteur en commit-datum afgedrukt op de terminal.
In dit eerste deel van de Python Code Review Scheduler, zag je hoe je het project moest opzetten. U leest de invoerparameters die de planner nodig heeft om het project te verwerken. In het volgende deel van deze tutorialserie zullen we de commit details verzamelen van de process_commits
methode en stuur de commit naar willekeurige ontwikkelaars voor code review.
Aarzel niet om te zien wat we beschikbaar hebben voor de verkoop en voor onderzoek op Envato Market, en aarzel niet om vragen te stellen en uw waardevolle feedback te geven met behulp van de onderstaande feed.
Ik hoop dat je het eerste deel leuk vond. Laat ons uw mening of suggesties weten in de onderstaande opmerkingen.
Broncode van deze tutorial is beschikbaar op GitHub.