2016-08-31 10 views
0

私が作業しているリポジトリ内で特定の操作を実行するためにPygit2を使用しています。PyGit2の現在のリポジトリのパスをリポジトリ内のどこからでも取得する

私のコードファイルがレポのルートにない場合、レポ内のどこからでもレポのパスを取得するにはどうすればよいですか?

関数がルートから呼び出された場合は以下のことができますが、リポジトリコード内のどこからでも実行するにはどうすればいいですか?

import os 
import pathlib 
import pygit2 

def find_toplevel(path, last=None): 
    path = pathlib.Path(path).absolute() 

    if path == last: 
     return None 
    if (path/'.git').is_dir(): 
     return path 

    return find_toplevel(path.parent, last=path) 

toplevel = find_toplevel('.') 
if toplevel is not None: 
    repo = pygit2.Repository(str(toplevel)) 

はもちろん、ここでいくつかの注意点があります:あなたは.gitディレクトリを見つけるまで

$ cd /home/test/Desktop/code/Project 
$ git status 
On branch master 
Your branch is up-to-date with 'origin/master'. 

$ ipython3 

In [1]: import os, pygit2 
In [2]: repo = pygit2.Repository(os.getcwd()) 

答えて

1

1つのオプションは、親ディレクトリを横断するだけです。誰かが環境を設定している場合は、 .gitというディレクトリを必ずしも検索する必要はありません。 git worktreeをお持ちの場合、.gitはファイルで、 ディレクトリではありません。libgit2はこれを処理していないようです(バージョン 0.24)。

+0

はい、間違いなく親ディレクトリのトラバーサルがそれを行う方法の1つです。私はpygit2がそれを箱から出すための仕組みを持っているかどうか確認していました。回答をいただきありがとうございます。他の回答があれば、もう一度お待ちしております。 –

関連する問題