diff --git a/docs/guide/automate.md b/docs/guide/automate.md index d2eedad..099da89 100644 --- a/docs/guide/automate.md +++ b/docs/guide/automate.md @@ -31,7 +31,8 @@ To manually attach husky to your project, add the below code to one of your proj - + diff --git a/docs/guide/submodules.md b/docs/guide/submodules.md index 20070d4..002f095 100644 --- a/docs/guide/submodules.md +++ b/docs/guide/submodules.md @@ -34,10 +34,17 @@ The `attach` command offers a `--ignore-submodule` options that generates an MsB The generated block will look something like this, If you're attaching husky manually copy the target to your `.csproj` and adjust `WorkingDirectory` accordingly. ```xml:no-line-numbers:no-v-pre - + + + + + ``` diff --git a/src/Husky/Cli/AttachCommand.cs b/src/Husky/Cli/AttachCommand.cs index fc1f25f..09e45fa 100644 --- a/src/Husky/Cli/AttachCommand.cs +++ b/src/Husky/Cli/AttachCommand.cs @@ -83,9 +83,11 @@ private XElement GetTarget(string condition, string rootRelativePath) exec.SetAttributeValue("WorkingDirectory", rootRelativePath); target.Add(exec); + var huskyDir = Path.Combine(rootRelativePath, ".husky", "_"); var touch = new XElement("Touch"); touch.SetAttributeValue("Files", sentinelPath); touch.SetAttributeValue("AlwaysCreate", "true"); + touch.SetAttributeValue("Condition", $"Exists('{huskyDir}')"); target.Add(touch); var itemGroup = new XElement("ItemGroup"); diff --git a/src/Husky/Husky.csproj b/src/Husky/Husky.csproj index 4a1bf36..c31effb 100644 --- a/src/Husky/Husky.csproj +++ b/src/Husky/Husky.csproj @@ -68,12 +68,12 @@ - - - + + diff --git a/tests/HuskyTest/Cli/AttachCommandTests.cs b/tests/HuskyTest/Cli/AttachCommandTests.cs index 12f59a6..af66282 100644 --- a/tests/HuskyTest/Cli/AttachCommandTests.cs +++ b/tests/HuskyTest/Cli/AttachCommandTests.cs @@ -61,14 +61,16 @@ public async Task Attach_WhenParametersProvided_ShouldAddHuskyTargetElement() huskyTarget!.Descendants("Exec").Should().HaveCount(2); huskyTarget.Attribute("Inputs").Should().NotBeNull(); huskyTarget.Attribute("Outputs").Should().NotBeNull(); + + // Verify Touch is conditioned on directory existence huskyTarget.Descendants("Touch").Should().HaveCount(1); - huskyTarget.Descendants("Touch").First().Attribute("AlwaysCreate")?.Value.Should().Be("true"); + var touch = huskyTarget.Descendants("Touch").First(); + touch.Attribute("AlwaysCreate")?.Value.Should().Be("true"); + touch.Attribute("Condition")?.Value.Should().Contain("Exists("); + huskyTarget.Descendants("ItemGroup").Descendants("FileWrites").Should().HaveCount(1); _console.ReadOutputString().Trim().Should().Be("Husky dev-dependency successfully attached to this project."); - - huskyTarget.Attribute("AfterTargets")?.Value.Should().Be("Restore"); - huskyTarget.Attribute("BeforeTargets").Should().BeNull(); } [Fact]