3

仕事で内部的に使用するための一連の 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

これは、上記のように「可能な」ディレクトリのリストを作成する必要があるため、依然として制限されています。

より良い方法はありますか?

4

1 に答える 1