diff --git a/source/dub/git.d b/source/dub/git.d index c6fc9a9..d6f18a1 100644 --- a/source/dub/git.d +++ b/source/dub/git.d @@ -22,7 +22,12 @@ public void addGitSubmodules(PackageManager packageManager, NativePath rootPath) { import std.process : execute; - const submoduleInfo = execute(["git", "--git-dir=" ~ (rootPath ~ ".git").toNativeString, "submodule", "status"]); + auto rootScmPath = rootPath ~ ".git"; + const submoduleInfo = execute([ + "git", + "-C", rootPath.toNativeString, + "--git-dir=" ~ (rootScmPath.relativeTo(rootPath)).toNativeString, + "submodule", "status"]); enforce(submoduleInfo.status == 0, format("git submodule status exited with error code %s: %s", submoduleInfo.status, submoduleInfo.output)); diff --git a/source/dub/package_.d b/source/dub/package_.d index 3ec6e3f..28faac4 100644 --- a/source/dub/package_.d +++ b/source/dub/package_.d @@ -803,11 +803,15 @@ // by invoking the "git" executable private string determineVersionWithGit(NativePath path, NativePath git_dir) { - import std.process; import dub.semver; + import std.process; + import std.typecons : tuple; if (!existsFile(git_dir) || !isDir(git_dir.toNativeString)) return null; - auto git_dir_param = "--git-dir=" ~ git_dir.toNativeString(); + auto git_dir_params = tuple( + "-C", path.toNativeString(), + "--git-dir=" ~ git_dir.relativeTo(path).toNativeString(), + ).expand; static string exec(scope string[] params...) { auto ret = executeShell(escapeShellCommand(params)); @@ -816,7 +820,7 @@ return null; } - auto tag = exec("git", git_dir_param, "describe", "--long", "--tags"); + auto tag = exec("git", git_dir_params, "describe", "--long", "--tags"); if (tag !is null) { auto parts = tag.split("-"); auto commit = parts[$-1]; @@ -829,7 +833,7 @@ } } - auto branch = exec("git", git_dir_param, "rev-parse", "--abbrev-ref", "HEAD"); + auto branch = exec("git", git_dir_params, "rev-parse", "--abbrev-ref", "HEAD"); if (branch !is null) { if (branch != "HEAD") return "~" ~ branch; }