仕事で内部的に使用するための一連の Git アドオンを作成しました。グローバルテンプレートディレクトリにいくつかの Git フックをインストールする必要がありますが、Git が実際にインストールされているディレクトリをプログラムで見つけるのに問題があります。次の開発サーバーにインストールされていることがわかりました。
/usr/share/git-core
/usr/local/share/git-core
/usr/local/git/share/git-core
一部のサーバーでは、以前のインストールにより、これらのディレクトリの複数に Git がインストールされています。テンプレート ファイルのコピー元となる実際のテンプレート ディレクトリを見つける方法を探しています。git init
問題のgit init
コードは次のcopy_templates()
とおりです。
if (!template_dir)
template_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);
if (!template_dir)
template_dir = init_db_template_dir;
if (!template_dir)
template_dir = system_path(DEFAULT_GIT_TEMPLATE_DIR);
if (!template_dir[0])
return;
DEFAULT_GIT_TEMPLATE_DIR
ただし、このコードは実際にテンプレートをコピーしようとしているときにのみ実行されるため、事前に実際に何があるかを知る方法はないようです。
私がこれまでに持っている最良のアイデアは(疑似コード)です:
for each possible directory:
create a random_filename
create a file in the template directory with $random_filename
`git init` a new temporary repository
check for the existence of $random_filename in the new repo
if it exists, we found the real template directory
これは、上記のように「可能な」ディレクトリのリストを作成する必要があるため、依然として制限されています。
より良い方法はありますか?