From a2d6f36ba6b0e1611842653463b44ab5b67ac307 Mon Sep 17 00:00:00 2001 From: vikukush <98849971+vikukush@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:22:24 -0700 Subject: [PATCH 1/2] Update GitReferenceResolverTests.cs --- .../GitReferenceResolverTests.cs | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/Microsoft.Build.Tasks.Git.UnitTests/GitReferenceResolverTests.cs b/src/Microsoft.Build.Tasks.Git.UnitTests/GitReferenceResolverTests.cs index c61fb555..fcebee96 100644 --- a/src/Microsoft.Build.Tasks.Git.UnitTests/GitReferenceResolverTests.cs +++ b/src/Microsoft.Build.Tasks.Git.UnitTests/GitReferenceResolverTests.cs @@ -87,6 +87,42 @@ 2222222222222222222222222222222222222222 refs/heads/br2 Assert.Equal("2222222222222222222222222222222222222222", resolver.ResolveReference("ref: refs/heads/br2")); } + [Fact] + public void ResolveReference_Worktree_Packed() + { + using var temp = new TempRoot(); + + string mainGitFolder = "worktreepackedtestmain"; + string worktreeName = "worktreepackedtestchild"; + + var gitDir = temp.CreateDirectory(mainGitFolder); + + gitDir.CreateFile("packed-refs").WriteAllText( +@"# pack-refs with: peeled fully-peeled sorted +1111111111111111111111111111111111111111 refs/heads/master +2222222222222222222222222222222222222222 refs/heads/br2 +"); + var commonDir = temp.CreateDirectory(); + var refsHeadsDir = commonDir.CreateDirectory("refs").CreateDirectory("heads"); + var worktreeDir = + + + + var gitSubmoduleDir = temp.CreateDirectory(submoduleName); + gitSubmoduleDir + + + + + var refsHeadsDir = commonDir.CreateDirectory("refs").CreateDirectory("heads"); + + var resolver = new GitReferenceResolver(gitDir.Path, commonDir.Path); + + Assert.Equal("1111111111111111111111111111111111111111", resolver.ResolveReference("ref: refs/heads/master")); + Assert.Equal("2222222222222222222222222222222222222222", resolver.ResolveReference("ref: refs/heads/br1")); + Assert.Equal("2222222222222222222222222222222222222222", resolver.ResolveReference("ref: refs/heads/br2")); + } + [Fact] public void ReadPackedReferences() { From 50140f933b933681b8b3898a1e8b00f4f7f028eb Mon Sep 17 00:00:00 2001 From: Vitaly Kukushkin Date: Tue, 1 Oct 2024 17:46:04 -0700 Subject: [PATCH 2/2] Worktree_Packed_GetHeadCommitSha --- .../GitReferenceResolverTests.cs | 36 ----------------- .../GitRepositoryTests.cs | 40 +++++++++++++++++++ 2 files changed, 40 insertions(+), 36 deletions(-) diff --git a/src/Microsoft.Build.Tasks.Git.UnitTests/GitReferenceResolverTests.cs b/src/Microsoft.Build.Tasks.Git.UnitTests/GitReferenceResolverTests.cs index fcebee96..c61fb555 100644 --- a/src/Microsoft.Build.Tasks.Git.UnitTests/GitReferenceResolverTests.cs +++ b/src/Microsoft.Build.Tasks.Git.UnitTests/GitReferenceResolverTests.cs @@ -87,42 +87,6 @@ 2222222222222222222222222222222222222222 refs/heads/br2 Assert.Equal("2222222222222222222222222222222222222222", resolver.ResolveReference("ref: refs/heads/br2")); } - [Fact] - public void ResolveReference_Worktree_Packed() - { - using var temp = new TempRoot(); - - string mainGitFolder = "worktreepackedtestmain"; - string worktreeName = "worktreepackedtestchild"; - - var gitDir = temp.CreateDirectory(mainGitFolder); - - gitDir.CreateFile("packed-refs").WriteAllText( -@"# pack-refs with: peeled fully-peeled sorted -1111111111111111111111111111111111111111 refs/heads/master -2222222222222222222222222222222222222222 refs/heads/br2 -"); - var commonDir = temp.CreateDirectory(); - var refsHeadsDir = commonDir.CreateDirectory("refs").CreateDirectory("heads"); - var worktreeDir = - - - - var gitSubmoduleDir = temp.CreateDirectory(submoduleName); - gitSubmoduleDir - - - - - var refsHeadsDir = commonDir.CreateDirectory("refs").CreateDirectory("heads"); - - var resolver = new GitReferenceResolver(gitDir.Path, commonDir.Path); - - Assert.Equal("1111111111111111111111111111111111111111", resolver.ResolveReference("ref: refs/heads/master")); - Assert.Equal("2222222222222222222222222222222222222222", resolver.ResolveReference("ref: refs/heads/br1")); - Assert.Equal("2222222222222222222222222222222222222222", resolver.ResolveReference("ref: refs/heads/br2")); - } - [Fact] public void ReadPackedReferences() { diff --git a/src/Microsoft.Build.Tasks.Git.UnitTests/GitRepositoryTests.cs b/src/Microsoft.Build.Tasks.Git.UnitTests/GitRepositoryTests.cs index 7ba9993d..733f6653 100644 --- a/src/Microsoft.Build.Tasks.Git.UnitTests/GitRepositoryTests.cs +++ b/src/Microsoft.Build.Tasks.Git.UnitTests/GitRepositoryTests.cs @@ -124,6 +124,46 @@ public void TryFindRepository_Worktree_Realistic() Assert.Null(repository.WorkingDirectory); } + [Fact] + public void Worktree_Packed_GetHeadCommitSha() + { + using var temp = new TempRoot(); + + var mainWorkingDir = temp.CreateDirectory(); + var mainWorkingSubDir = mainWorkingDir.CreateDirectory("A"); + var mainGitDir = mainWorkingDir.CreateDirectory(".git"); + mainGitDir.CreateFile("HEAD"); + mainGitDir.CreateFile("packed-refs").WriteAllText( +@"# pack-refs with: peeled fully-peeled sorted +1111111111111111111111111111111111111111 refs/heads/master +2222222222222222222222222222222222222222 refs/heads/br2 +"); + + var worktreesDir = mainGitDir.CreateDirectory("worktrees"); + var worktreeGitDir = worktreesDir.CreateDirectory("C"); + var worktreeGitSubDir = worktreeGitDir.CreateDirectory("B"); + var worktreeDir = temp.CreateDirectory(); + var worktreeSubDir = worktreeDir.CreateDirectory("C"); + var worktreeGitFile = worktreeDir.CreateFile(".git").WriteAllText("gitdir: " + worktreeGitDir + " \r\n\t\v"); + + worktreeGitDir.CreateFile("HEAD").WriteAllText("ref: refs/heads/br2\n"); + worktreeGitDir.CreateFile("commondir").WriteAllText("../..\n"); + worktreeGitDir.CreateFile("gitdir").WriteAllText(worktreeGitFile.Path + " \r\n\t\v"); + + // start under worktree directory: + Assert.True(GitRepository.TryFindRepository(worktreeSubDir.Path, out var location)); + Assert.Equal(worktreeGitDir.Path, location.GitDirectory); + Assert.Equal(mainGitDir.Path, location.CommonDirectory); + Assert.Equal(worktreeDir.Path, location.WorkingDirectory); + + var repository = GitRepository.OpenRepository(location, GitEnvironment.Empty); + Assert.Equal(location.GitDirectory, repository.GitDirectory); + Assert.Equal(location.WorkingDirectory, repository.WorkingDirectory); + Assert.Equal(location.CommonDirectory, repository.CommonDirectory); + + Assert.Equal("2222222222222222222222222222222222222222", repository.GetHeadCommitSha()); + } + [Fact] public void LocateRepository_Submodule() {