forked from dotnet/source-build
-
Notifications
You must be signed in to change notification settings - Fork 0
/
0005-Allow-using-.git-directory-instead-of-gitdir-redirec.patch
34 lines (31 loc) · 1.75 KB
/
0005-Allow-using-.git-directory-instead-of-gitdir-redirec.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
From 94b74dcdde1787617d8665e231334f089c01ce24 Mon Sep 17 00:00:00 2001
From: Chris Rummel <crummel@microsoft.com>
Date: Tue, 4 Aug 2020 20:28:53 -0500
Subject: [PATCH 5/5] Allow using .git directory instead of gitdir redirect in
submodules.
---
.../GitDataReader/GitRepository.cs | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitRepository.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitRepository.cs
index 196c57d..e1ab9c4 100644
--- a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitRepository.cs
+++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitRepository.cs
@@ -209,6 +209,16 @@ private string ReadHeadCommitSha()
/// <returns>Null if the HEAD tip reference can't be resolved.</returns>
internal string ReadSubmoduleHeadCommitSha(string submoduleWorkingDirectoryFullPath)
{
+ // submodules don't usually have their own .git directories but can when Arcade uberclone
+ // was used. Handle this case first since the other case throws.
+ var dotGitPath = Path.Combine(submoduleWorkingDirectoryFullPath, GitDirName);
+ if (IsGitDirectory(dotGitPath, out var directSubmoduleGitDirectory))
+ {
+ var submoduleGitDirResolver = new GitReferenceResolver(directSubmoduleGitDirectory, submoduleWorkingDirectoryFullPath);
+ return submoduleGitDirResolver.ResolveHeadReference();
+ }
+
+ // normal-looking submodule gitdir redirect, or a repo broken in some other way.
var gitDirectory = ReadDotGitFile(Path.Combine(submoduleWorkingDirectoryFullPath, GitDirName));
if (!IsGitDirectory(gitDirectory, out var commonDirectory))
{
--
2.18.0