Pianificazione di un programma di revisione del codice Python registro di elaborazione

In questa serie di tutorial, vedrai come costruire un programmatore di revisione del codice usando Python. Nel corso di questa serie, ti imbatterai in alcuni concetti di base come leggere e-mail, inviare una e-mail, eseguire comandi da terminale dal programma Python, elaborare log git, ecc..

Nella prima parte, inizierai impostando i file di configurazione di base, leggendo i log git e elaborandoli per inviare la richiesta di revisione del codice. 

Iniziare

Inizia creando una cartella di progetto chiamata CodeReviewer. Dentro il CodeReviewer cartella, creare un file chiamato scheduler.py

Supponendo che lo scheduler di revisione del codice venga eseguito su più progetti, è necessario specificare il nome del progetto con cui verrà eseguito lo scheduler e il numero di giorni per cui il registro deve essere elaborato. Quindi, prima leggi questi due parametri come argomenti dal programma di revisione del codice. 

Usiamo il argparse Modulo Python per leggere i parametri del programma. Importa la libreria e aggiungi gli argomenti del programma. Puoi usare il ArgumentParser metodo del argparse modulo per avviare il parser. Una volta avviato, è possibile aggiungere gli argomenti al parser. Ecco il codice per leggere gli argomenti dal programma:

import argparse parser = argparse.ArgumentParser (description = "Code Review Scheduler Program") parser.add_argument ("- n", nargs = "?", type = int, default = 1, help = "Numero di (d) ays per cercare log. ") parser.add_argument (" - p ", nargs ="? ", type = str, default =" em ", help =" Nome del progetto. ") args = parser.parse_args () no_days = args. n project = args.p print 'Elaborazione dello scheduler rispetto al progetto' + progetto + '...'

Impostazione delle configurazioni del progetto

Manteniamo un file di configurazione separato che verrà elaborato dal revisore del codice. Crea un file chiamato config.json all'interno della directory del progetto CodeReviewer. All'interno del file di configurazione, ci saranno informazioni su ciascun progetto che verrà elaborato. Ecco come apparirà il file di configurazione del progetto:

["name": "project_x", "git_url": "https://github.com/royagasthyan/project_x", "name": "project_y", "git_url": "https://github.com / royagasthyan / project_y "]

Altre opzioni saranno aggiunte alle configurazioni del progetto nelle parti successive. 

Leggiamo la configurazione JSON file nel programma Python. Importa il JSON modulo e caricare il JSON dati letti dal file di configurazione.

# # Leggi il file di configurazione dello schedulatore # con open ('config.json') come cfg_file: main_config = json.load (cfg_file)

Leggi informazioni sul commit dal repository

Quando viene eseguito lo script del revisore, il nome del progetto viene specificato come parametro. Sulla base del nome del progetto specificato, controllare se le sue configurazioni sono disponibili e clonare il repository. 

Innanzitutto, devi trovare l'URL del progetto dalle configurazioni. Iterate i dati del progetto e trovate l'URL del progetto come mostrato:

per p in main_config: if p ['name'] == progetto: project_url = p ['git_url'] interruzione

Una volta che hai l'URL del progetto, controlla se il progetto è già clonato. In caso contrario, clonare l'URL del progetto. Se esiste già, vai alla directory del progetto esistente e tira le ultime modifiche.

# Clona il repository se non esiste già print "********* Esegui checkout del progetto **********" if (os.path.isdir ("./" + project)): execute_cmd ("cd" + project + "; git pull") else: execute_cmd ("git clone" + project_url + "" + project) stampa "*** Done *******" print ""

Per eseguire i comandi di sistema, farai uso di Python os modulo. Creare un metodo per eseguire comandi di sistema poiché lo si utilizzerà frequentemente. Ecco il execute_cmd metodo:

def execute_cmd (cmd): stampa "***** Eseguendo comando" "+ cmd +" '"response = os.popen (cmd) .read () risposta di risposta

Elaborazione del registro Git

Dopo aver recuperato il log di commit dal repository Git, si analizzerà il log. Crea un nuovo metodo Python chiamato process_commits per elaborare i log di Git.

def process_commits (): # codice sarebbe qui

Git ci fornisce i comandi per ottenere il registro di commit. Per ottenere tutti i log da un repository, il comando sarebbe:

git log --all

La risposta sarebbe:

commit 04d11e21fb625215c5e672a93d955f4a176e16e4 Autore: royagasthyan  Data: Mer Feb 8 21:41:20 2017 +0530 Crea README.md 

È inoltre possibile ottenere registri specifici per il numero di giorni dal momento in cui viene eseguito il comando. Per ottenere i log da n numero di giorni, il comando sarebbe:

git log --all --since = n.days

È possibile restringerlo ulteriormente per vedere se un particolare commit è stato un'aggiunta, una modifica o una cancellazione. Esegui il comando sopra con --Nome-status:

git log --all --since = 10.days --name-status

Il comando precedente avrebbe il seguente risultato:

commit 04d11e21fb625215c5e672a93d955f4a176e16e4 Autore: royagasthyan  Data: Mer Feb 8 21:41:20 2017 +0530 Crea README.md A README.md 

Il UN lettera sul lato sinistro del README.md il file indica l'aggiunta. allo stesso modo, M indicherebbe la modifica e D indicherebbe la cancellazione.

Dentro il process_commits metodo, definiamo il comando Git da eseguire per ottenere la cronologia del registro. 

cmd = "cd" + project + "; git log --all --since =" + str (no_days) + ".day --name-status"

Passa il comando sopra cmd al execute_cmd metodo.

response = execute_cmd (cmd)

Leggi la risposta, esegui l'iterazione di ogni riga e stampa la stessa.

def process_commits (): cmd = "cd" + project + "; git log --all --since =" + str (no_days) + ".day --name-status" response = execute_cmd (cmd) per la linea in risposta .splitlines (): linea di stampa

Chiama il process_commits metodo dopo che le configurazioni sono state lette.

print "Elaborazione dello scheduler rispetto al progetto" + project + "..." process_commits ()

Salvare le modifiche precedenti e provare ad eseguire il revisore del codice usando il seguente comando:

python scheduler.py -n 10 -p "project_x"

Come puoi vedere, abbiamo avviato il revisore del codice con il numero di giorni e il nome del progetto da elaborare. Dovresti essere in grado di vedere il seguente risultato:

********* Esecuzione del checkout del progetto ********** ***** Esecuzione del comando 'cd project_x; git pull '*** Done ******* Elaborazione dello scheduler in base al progetto project_x ... ***** Esecuzione del comando' cd project_x; git log --all --since = 10.day --name-status 'commit 04d11e21fb625215c5e672a93d955f4a176e16e4 Autore: royagasthyan  Data: Mer Feb 8 21:41:20 2017 +0530 Crea README.md A README.md 

Pertanto, quando si esegue il revisore del codice, è possibile vedere che il repository viene creato se non esiste già o se viene aggiornato. Successivamente, in base al numero di giorni forniti, recupera la cronologia del registro di commit da elaborare. 

Ora analizziamo il registro di commit per scoprire l'ID di commit, la data di commit e l'autore del commit.

Come si vede nei registri, l'id di commit inizia con la parola chiave commettere , l'autore inizia con la parola chiave Autore:, e la data inizia con la parola chiave Data:. Utilizzerai le seguenti parole chiave per identificare l'ID di commit, l'autore e la data di un commit.

Proviamo a ottenere l'ID di commit dalle linee di log Git. Questo è abbastanza semplice. Hai solo bisogno di controllare se la linea inizia con la parola chiave commettere.

per la riga in response.splitlines (): if line.startswith ('commit'): print line [7:]

Salva le modifiche ed esegui lo scheduler e dovresti essere in grado di ottenere l'Id di commit.

Il prossimo compito è estrarre il nome dell'autore. Per verificare se la riga contiene le informazioni dell'autore, per prima cosa controlla se la linea inizia con Autore parola chiave. Se lo fa, farai uso di un'espressione regolare per ottenere l'utente. 

Come puoi vedere, l'indirizzo email dell'utente è all'interno dei segni "meno di più di". Useremo un'espressione regolare per leggere l'indirizzo email tra < >. L'espressione regolare sarà così:

'\<(.*?)\>'

Importa il Python ri modulo per usare espressioni regolari in Python.

importa re

Ora controlla se la linea inizia con Autore parola chiave. In caso affermativo, estrai l'indirizzo email dell'utente usando l'espressione regolare sopra. Ecco come apparirebbe:

se line.startswith ('Autore:'): if (re.search ('\<(.*?)\>', linea)): stampa re.search (' \<(.*?)\>', Linea) .group (1)

Per estrarre la data di commit dal log, è necessario verificare se la linea inizia con Data parola chiave. Ecco come apparirebbe:

if line.startswith ('Date:'): print line [5:]

Ecco la finale process_commits metodo:

def process_commits (): cmd = "cd" + project + "; git log --all --since =" + str (no_days) + ".day --name-status" response = execute_cmd (cmd) per la linea in risposta .splitlines (): if line.startswith ('commit'): print line [7:] se line.startswith ('Autore:'): if (re.search ('\<(.*?)\>', linea)): stampa re.search (' \<(.*?)\>', line) .group (1) se line.startswith (' Date: '): print line [5:]

Salvare le modifiche precedenti e avviare il revisore del codice.

python scheduler.py -n 10 -p "project_x"

Dovresti avere ogni dettaglio di commit con l'id di commit, l'autore e la data di commit stampate sul terminale.

Avvolgendolo

In questa prima parte del programma di analisi dei codici di Python, hai visto come impostare il progetto. Si leggono i parametri di input richiesti dallo scheduler per elaborare il progetto. Nella parte successiva di questa serie di tutorial, raccogliamo i dettagli del commit da process_commits metodo e inviare il commit a sviluppatori casuali per la revisione del codice.

Non esitate a vedere quello che abbiamo a disposizione per la vendita e per studiare su Envato Market, e non esitate a fare domande e fornire il vostro prezioso feedback utilizzando il feed qui sotto.

Spero ti sia piaciuta la prima parte. Fateci sapere i vostri pensieri o eventuali suggerimenti nei commenti qui sotto.

Il codice sorgente di questo tutorial è disponibile su GitHub.