2016-03-30 2 views
-1

Ich habe ein Projekt, in dem ich auf ein (lokales) Verzeichnis von leeren Git-Repositories zugreifen muss, um bestimmte Elemente aus ihrem Verlauf zu bekommen. Ich brauche eine Funktion, die durch das Verzeichnis und etwas tun, wie iteriert wird:Mit dem discover_repository von pygit2 finde ich mehrere Repositories in einem Verzeichnis

repo = pygit2.discover_repository("/path/to/repo") 

aber ich muss in der Lage sein diese in einer for Schleife zu tun.

Jedes der Repositorys ist für ein anderes Projekt, dessen Namen in einer Liste durch die Verwendung einiger verschachtelter Schleifen an anderer Stelle in meinem Code gespeichert sind.

1) Ist es sinnvoll, die Projektnamen anstelle von repo oben zu verwenden, wenn ich nur die Projektnamen anhand ihres Listenindex im gesamten Code referenziere (oder stattdessen jedem Repo einen Namen wie repo_n geben soll) n ist eine Ganzzahl, die bei jeder Iteration der Schleife, die die Repos entdeckt, inkrementiert wird?

2) Ist es möglich, diese Repos in einer for Schleife zu finden, so dass ich sie alle auf einmal bekommen kann, oder muss ich sie einzeln machen?

3) Wenn es ist möglich, dies in einer Schleife zu tun, wie kann ich über das Erstellen eines Tupel (oder vielleicht ein Wörterbuch) gehen, die den Projektnamen und das neu entdeckte Repository-Objekt enthält?

name = 'repo_' 
i = 0 
repo_list = {} 
items = get_items() # defined elsewhere 

for item in os.listdir(dirpath): 
    i = i + 1 # this was just to add a custom name to the repos located 
    repo_name = name + str(i) 
    path_to_repo = os.path.join(dirpath, item) 

    repo = pygit2.discover_repository(path_to_repo) 
    repo_list[item] = repo 

aber zurückkehrte eine Liste von string Objekte anstelle einer Liste von Repository Objekte:

+0

Ich würde gerne wissen, warum meine Frage abgelehnt wurde, damit ich sie verbessern kann. :) – DJGrandpaJ

Antwort

0

Am Anfang hatte ich mit dem Code wie folgt gestartet. Es stellte sich heraus, dass die Funktion discover_repository() den Pfad an das Repository und nicht an das Repository-Objekt zurückgibt. Ich muss sagen, ich habe keine discover_repository() Funktion irgendwo in der pygit2 documentation gefunden, und ich hatte niemanden gesehen oder so lange darüber reden, bis ich this SO question gefunden habe. Aber jetzt weiß ich (und ich denke, es wird für zukünftige Leser als auch nützlich sein):

pygit2 der discover_repository(path) Funktion gibt einen String-Darstellung des Pfades befindet Repository. Dies ist kein Repository-Objekt, das noch instanziiert werden muss.

So nach überall nach einer Antwort suchen, fand ich this snippet, die eine Linie eingeschlossen ich vermisst hatte:

path_to_repo = os.path.join(dirpath, item) 

    repo = pygit2.discover_repository(path_to_repo) 
    repo_name = Repository(repo) # this line was missing 
    repo_list[item] = repo_name 

näher, aber etwas ist hier ab. Sicher, das macht, was ich wollte, aber ist das nicht ein wenig überflüssig? Später, nachdem auf einem anderen Abschnitt meines Codes arbeiten, landete ich mit eben dieser als meine ganze for Schleife nach oben:

for item in os.listdir(dirpath): 
    i = i + 1 
    repo_name = name+str(i) 
    path_to_repo = os.path.join(dirpath, item) 

    repo_name = Repository(path_to_repo) 
    repo_list[item] = repo_name 

Das das gewünschte Ergebnis erzielt wird. Ich habe jetzt ein Wörterbuch zurück, dass in etwa so aussieht:

{'repo_1': [listOfRepositoryObjects], 'repo_2': [anotherListOfRepositoryObjects]} 

Also ich eigentlich nicht brauchen die pygit2.discover_repository() Funktion überhaupt, weil ich etwas enthalten, die die gleiche Sache bei path_to_repo = os.path.join(dirpath, item) tut.Da sie das gleiche Ding zurückgebracht haben, gehe ich mit der Funktion, die ich geschrieben habe, weil es besser zu den Anforderungen meines Projekts passt.

Verwandte Themen