diff --git a/GVFS/GVFS.Common/FileSystem/HooksInstaller.cs b/GVFS/GVFS.Common/FileSystem/HooksInstaller.cs index c9d691397e..8480f83a00 100644 --- a/GVFS/GVFS.Common/FileSystem/HooksInstaller.cs +++ b/GVFS/GVFS.Common/FileSystem/HooksInstaller.cs @@ -28,6 +28,7 @@ static HooksInstaller() public static string MergeHooksData(string[] defaultHooksLines, string filename, string hookName) { IEnumerable valuableHooksLines = defaultHooksLines.Where(line => !string.IsNullOrEmpty(line.Trim())); + string absolutePathToHooksExecutable = Path.Combine(ExecutingDirectory, GVFSPlatform.Instance.Constants.GVFSHooksExecutableName); if (valuableHooksLines.Contains(GVFSPlatform.Instance.Constants.GVFSHooksExecutableName, GVFSPlatform.Instance.Constants.PathComparer)) { @@ -37,15 +38,15 @@ public static string MergeHooksData(string[] defaultHooksLines, string filename, } else if (!valuableHooksLines.Any()) { - return GVFSPlatform.Instance.Constants.GVFSHooksExecutableName; + return absolutePathToHooksExecutable; } else if (hookName.Equals(GVFSConstants.DotGit.Hooks.PostCommandHookName)) { - return string.Join("\n", new string[] { GVFSPlatform.Instance.Constants.GVFSHooksExecutableName }.Concat(valuableHooksLines)); + return string.Join("\n", new string[] { absolutePathToHooksExecutable }.Concat(valuableHooksLines)); } else { - return string.Join("\n", valuableHooksLines.Concat(new string[] { GVFSPlatform.Instance.Constants.GVFSHooksExecutableName })); + return string.Join("\n", valuableHooksLines.Concat(new string[] { absolutePathToHooksExecutable })); } } diff --git a/GVFS/GVFS.UnitTests/CommandLine/HooksInstallerTests.cs b/GVFS/GVFS.UnitTests/CommandLine/HooksInstallerTests.cs index 52b56ac18c..bf40c040b5 100644 --- a/GVFS/GVFS.UnitTests/CommandLine/HooksInstallerTests.cs +++ b/GVFS/GVFS.UnitTests/CommandLine/HooksInstallerTests.cs @@ -5,7 +5,9 @@ using NUnit.Framework; using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Reflection; namespace GVFS.UnitTests.CommandLine { @@ -13,6 +15,10 @@ namespace GVFS.UnitTests.CommandLine public class HooksInstallerTests { private const string Filename = "hooksfile"; + private readonly string expectedAbsoluteGvfsHookPath = + Path.Combine( + Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), + GVFSPlatform.Instance.Constants.GVFSHooksExecutableName); [TestCase] [Category(CategoryConstants.ExceptionExpected)] @@ -22,7 +28,7 @@ public void MergeHooksDataThrowsOnFoundGVFSHooks() () => HooksInstaller.MergeHooksData( new string[] { "first", GVFSPlatform.Instance.Constants.GVFSHooksExecutableName }, Filename, - GVFSConstants.DotGit.Hooks.PreCommandHookName)); + this.expectedAbsoluteGvfsHookPath)); } [TestCase] @@ -33,7 +39,7 @@ public void MergeHooksDataEmptyConfig() .Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries) .Where(line => !line.StartsWith("#")); - resultLines.Single().ShouldEqual(GVFSPlatform.Instance.Constants.GVFSHooksExecutableName); + resultLines.Single().ShouldEqual(this.expectedAbsoluteGvfsHookPath); } [TestCase] @@ -47,7 +53,7 @@ public void MergeHooksDataPreCommandLast() resultLines.Count().ShouldEqual(3); resultLines.ElementAt(0).ShouldEqual("first"); resultLines.ElementAt(1).ShouldEqual("second"); - resultLines.ElementAt(2).ShouldEqual(GVFSPlatform.Instance.Constants.GVFSHooksExecutableName); + resultLines.ElementAt(2).ShouldEqual(this.expectedAbsoluteGvfsHookPath); } [TestCase] @@ -59,7 +65,7 @@ public void MergeHooksDataPostCommandFirst() .Where(line => !line.StartsWith("#")); resultLines.Count().ShouldEqual(3); - resultLines.ElementAt(0).ShouldEqual(GVFSPlatform.Instance.Constants.GVFSHooksExecutableName); + resultLines.ElementAt(0).ShouldEqual(this.expectedAbsoluteGvfsHookPath); resultLines.ElementAt(1).ShouldEqual("first"); resultLines.ElementAt(2).ShouldEqual("second"); } @@ -75,7 +81,7 @@ public void MergeHooksDataDiscardBlankLines() resultLines.Count().ShouldEqual(3); resultLines.ElementAt(0).ShouldEqual("first"); resultLines.ElementAt(1).ShouldEqual("second"); - resultLines.ElementAt(2).ShouldEqual(GVFSPlatform.Instance.Constants.GVFSHooksExecutableName); + resultLines.ElementAt(2).ShouldEqual(this.expectedAbsoluteGvfsHookPath); } } }