diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..e9c05b8 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,10 @@ +language: csharp +solution: src/GitTools.Core.sln +sudo: false +install: + # - sudo nuget update -self + - nuget restore src/GitTools.Core.sln + - nuget install NUnit.Runners -Version 3.2.1 -OutputDirectory ./src/packages +script: + - xbuild ./src/GitTools.Core.sln /property:Configuration="Debug" /verbosity:detailed + - mono --debug --runtime=v4.0.30319 ./src/packages/NUnit.ConsoleRunner.3.2.1/tools/nunit3-console.exe ./output/debug/GitTools.Core.Tests/net45/GitTools.Core.Tests.dll diff --git a/src/GitTools.Core.Tests/Git/GitRepositoryFactoryTests.cs b/src/GitTools.Core.Tests/Git/GitRepositoryFactoryTests.cs index ceeec45..86b51c2 100644 --- a/src/GitTools.Core.Tests/Git/GitRepositoryFactoryTests.cs +++ b/src/GitTools.Core.Tests/Git/GitRepositoryFactoryTests.cs @@ -31,7 +31,7 @@ public void WorksCorrectlyWithRemoteRepository(string branchName, string expecte { using (var fixture = new EmptyRepositoryFixture()) { - var expectedDynamicRepoLocation = Path.Combine(tempPath, fixture.RepositoryPath.Split('\\').Last()); + var expectedDynamicRepoLocation = Path.Combine(tempPath, fixture.RepositoryPath.Split(Path.DirectorySeparatorChar).Last()); fixture.Repository.MakeCommits(5); fixture.Repository.CreateFileAndCommit("TestFile.txt"); @@ -52,7 +52,7 @@ public void WorksCorrectlyWithRemoteRepository(string branchName, string expecte dynamicRepositoryPath = gitRepository.DotGitDirectory; gitRepository.IsDynamic.ShouldBe(true); - gitRepository.DotGitDirectory.ShouldBe(expectedDynamicRepoLocation + "\\.git"); + gitRepository.DotGitDirectory.ShouldBe(Path.Combine(expectedDynamicRepoLocation, ".git")); var currentBranch = gitRepository.Repository.Head.CanonicalName; @@ -133,7 +133,7 @@ public void PicksAnotherDirectoryNameWhenDynamicRepoFolderTaken() { fixture.Repository.CreateFileAndCommit("TestFile.txt"); File.Copy(Path.Combine(fixture.RepositoryPath, "TestFile.txt"), Path.Combine(tempDir, "TestFile.txt")); - expectedDynamicRepoLocation = Path.Combine(tempPath, fixture.RepositoryPath.Split('\\').Last()); + expectedDynamicRepoLocation = Path.Combine(tempPath, fixture.RepositoryPath.Split(Path.DirectorySeparatorChar).Last()); Directory.CreateDirectory(expectedDynamicRepoLocation); var repositoryInfo = new RepositoryInfo @@ -145,16 +145,16 @@ public void PicksAnotherDirectoryNameWhenDynamicRepoFolderTaken() using (var gitRepository = GitRepositoryFactory.CreateRepository(repositoryInfo)) { gitRepository.IsDynamic.ShouldBe(true); - gitRepository.DotGitDirectory.ShouldBe(expectedDynamicRepoLocation + "_1\\.git"); + gitRepository.DotGitDirectory.ShouldBe(Path.Combine(expectedDynamicRepoLocation + "_1", ".git")); } } } finally { - Directory.Delete(tempDir, true); + DeleteHelper.DeleteDirectory(tempDir, true); if (expectedDynamicRepoLocation != null) { - Directory.Delete(expectedDynamicRepoLocation, true); + DeleteHelper.DeleteDirectory(expectedDynamicRepoLocation, true); } if (expectedDynamicRepoLocation != null) diff --git a/src/GitTools.Core.Tests/Git/GitRepositoryHelperTests.cs b/src/GitTools.Core.Tests/Git/GitRepositoryHelperTests.cs index 6391c0a..4aa9239 100644 --- a/src/GitTools.Core.Tests/Git/GitRepositoryHelperTests.cs +++ b/src/GitTools.Core.Tests/Git/GitRepositoryHelperTests.cs @@ -87,7 +87,7 @@ public void UpdatesCurrentBranch() // Advance remote fixture.Repository.Checkout("develop"); var advancedCommit = fixture.Repository.MakeACommit(); - localFixture.Repository.Network.Fetch(localFixture.Repository.Network.Remotes["origin"]); + Commands.Fetch((Repository)localFixture.Repository, localFixture.Repository.Network.Remotes["origin"].Name, new string[0], null, null); localFixture.Repository.Checkout(advancedCommit.Sha); localFixture.Repository.DumpGraph(); GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: "ref/heads/develop"); diff --git a/src/GitTools.Core.Tests/GitRepositoryTests.cs b/src/GitTools.Core.Tests/GitRepositoryTests.cs index 761ae4a..5875b07 100644 --- a/src/GitTools.Core.Tests/GitRepositoryTests.cs +++ b/src/GitTools.Core.Tests/GitRepositoryTests.cs @@ -116,7 +116,7 @@ public void UpdatesCurrentBranch() // Advance remote fixture.Repository.Checkout("develop"); var advancedCommit = fixture.Repository.MakeACommit(); - localFixture.Repository.Network.Fetch(localFixture.Repository.Network.Remotes["origin"]); + Commands.Fetch((Repository)localFixture.Repository, localFixture.Repository.Network.Remotes["origin"].Name, new string[0], null, null); localFixture.Repository.Checkout(advancedCommit.Sha); GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: "ref/heads/develop"); diff --git a/src/GitTools.Core.Tests/GitTools.Core.Tests.csproj b/src/GitTools.Core.Tests/GitTools.Core.Tests.csproj index a48e38e..3377c9e 100644 --- a/src/GitTools.Core.Tests/GitTools.Core.Tests.csproj +++ b/src/GitTools.Core.Tests/GitTools.Core.Tests.csproj @@ -1,6 +1,6 @@  - + Debug @@ -25,7 +25,7 @@ prompt 4 true - 1591 + 1591,1701 pdbonly @@ -46,12 +46,12 @@ ..\packages\GitTools.Testing.1.1.0\lib\net4\GitTools.Testing.dll True - - ..\packages\LibGit2Sharp.0.22.0\lib\net40\LibGit2Sharp.dll + + ..\packages\LibGit2Sharp.0.23.0-pre20150419160303\lib\net40\LibGit2Sharp.dll True - - ..\packages\NUnit.2.6.4\lib\nunit.framework.dll + + ..\packages\NUnit.3.2.1\lib\net45\nunit.framework.dll True @@ -86,6 +86,7 @@ + @@ -94,7 +95,7 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + + --> \ No newline at end of file diff --git a/src/GitTools.Core/GitTools.Core.NET40/packages.config b/src/GitTools.Core/GitTools.Core.NET40/packages.config index 5522629..0e1184b 100644 --- a/src/GitTools.Core/GitTools.Core.NET40/packages.config +++ b/src/GitTools.Core/GitTools.Core.NET40/packages.config @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/src/GitTools.Core/GitTools.Core.NET45/GitTools.Core.NET45.csproj b/src/GitTools.Core/GitTools.Core.NET45/GitTools.Core.NET45.csproj index 1185f30..6ccc06d 100644 --- a/src/GitTools.Core/GitTools.Core.NET45/GitTools.Core.NET45.csproj +++ b/src/GitTools.Core/GitTools.Core.NET45/GitTools.Core.NET45.csproj @@ -1,81 +1,81 @@ - - - - - - Debug - AnyCPU - {66295D7C-58FD-4641-AEAB-3DF7EA8FA4D2} - Library - Properties - GitTools - GitTools.Core - v4.5 - 512 - 5 - - - - - true - full - false - ..\..\..\output\Debug\GitTools.Core\net45\ - TRACE;DEBUG - prompt - 4 - ..\..\..\output\Debug\GitTools.Core\net45\GitTools.Core.xml - true - 1591 - - - pdbonly - true - ..\..\..\output\Release\GitTools.Core\net45\ - TRACE - prompt - 4 - 1591 - true - ..\..\..\output\Release\GitTools.Core\net45\GitTools.Core.xml - - - - ..\..\packages\LibGit2Sharp.0.22.0\lib\net40\LibGit2Sharp.dll - True - - - - - - - - - - - - Properties\SolutionAssemblyInfo.cs - - - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - + + + + + + Debug + AnyCPU + {66295D7C-58FD-4641-AEAB-3DF7EA8FA4D2} + Library + Properties + GitTools + GitTools.Core + v4.5 + 512 + 5 + + + + + true + full + false + ..\..\..\output\Debug\GitTools.Core\net45\ + TRACE;DEBUG + prompt + 4 + ..\..\..\output\Debug\GitTools.Core\net45\GitTools.Core.xml + true + 1591,414 + + + pdbonly + true + ..\..\..\output\Release\GitTools.Core\net45\ + TRACE + prompt + 4 + 1591 + true + ..\..\..\output\Release\GitTools.Core\net45\GitTools.Core.xml + + + + ..\..\packages\LibGit2Sharp.0.23.0-pre20150419160303\lib\net40\LibGit2Sharp.dll + True + + + + + + + + + + + + Properties\SolutionAssemblyInfo.cs + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + --> \ No newline at end of file diff --git a/src/GitTools.Core/GitTools.Core.NET45/packages.config b/src/GitTools.Core/GitTools.Core.NET45/packages.config index 24beef5..c6a9e46 100644 --- a/src/GitTools.Core/GitTools.Core.NET45/packages.config +++ b/src/GitTools.Core/GitTools.Core.NET45/packages.config @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/src/GitTools.Core/GitTools.Core.Shared/Git/Extensions/LibGitExtensions.cs b/src/GitTools.Core/GitTools.Core.Shared/Git/Extensions/LibGitExtensions.cs index 1991b57..9ac05c0 100644 --- a/src/GitTools.Core/GitTools.Core.Shared/Git/Extensions/LibGitExtensions.cs +++ b/src/GitTools.Core/GitTools.Core.Shared/Git/Extensions/LibGitExtensions.cs @@ -33,7 +33,7 @@ public static Branch FindBranch(this IRepository repository, string branchName) static bool IsSameBranch(Branch branch, Branch b) { - return (b.IsRemote ? b.FriendlyName.Replace(b.Remote.Name + "/", string.Empty) : b.FriendlyName) != branch.FriendlyName; + return (b.IsRemote ? b.FriendlyName.Replace(b.RemoteName + "/", string.Empty) : b.FriendlyName) != branch.FriendlyName; } public static IEnumerable GetBranchesContainingCommit([NotNull] this Commit commit, IRepository repository, IList branches, bool onlyTrackedBranches) @@ -99,12 +99,12 @@ public static string GetRepositoryDirectory(this IRepository repository, bool om { var gitDirectory = repository.Info.Path; - gitDirectory = gitDirectory.TrimEnd('\\'); + gitDirectory = gitDirectory.TrimEnd(Path.DirectorySeparatorChar); if (omitGitPostFix && gitDirectory.EndsWith(".git")) { gitDirectory = gitDirectory.Substring(0, gitDirectory.Length - ".git".Length); - gitDirectory = gitDirectory.TrimEnd('\\'); + gitDirectory = gitDirectory.TrimEnd(Path.DirectorySeparatorChar); } return gitDirectory; diff --git a/src/GitTools.Core/GitTools.Core.Shared/Git/Helpers/GitRepositoryHelper.cs b/src/GitTools.Core/GitTools.Core.Shared/Git/Helpers/GitRepositoryHelper.cs index c91d3b5..1f1fa14 100644 --- a/src/GitTools.Core/GitTools.Core.Shared/Git/Helpers/GitRepositoryHelper.cs +++ b/src/GitTools.Core/GitTools.Core.Shared/Git/Helpers/GitRepositoryHelper.cs @@ -36,7 +36,7 @@ public static void NormalizeGitDirectory(string gitDirectory, AuthenticationInfo Log.Info(string.Format("Fetching from remote '{0}' using the following refspecs: {1}.", remote.Name, string.Join(", ", remote.FetchRefSpecs.Select(r => r.Specification)))); var fetchOptions = BuildFetchOptions(authentication.Username, authentication.Password); - repo.Network.Fetch(remote, fetchOptions); + Commands.Fetch(repo, remote.Name, new string[0], fetchOptions, null); } EnsureLocalBranchExistsForCurrentBranch(repo, currentBranch); @@ -143,8 +143,8 @@ static void AddMissingRefSpecs(Repository repo, Remote remote) var allBranchesFetchRefSpec = string.Format("+refs/heads/*:refs/remotes/{0}/*", remote.Name); Log.Info(string.Format("Adding refspec: {0}", allBranchesFetchRefSpec)); - - repo.Network.Remotes.Update(remote, + + repo.Network.Remotes.Update(remote.Name, r => r.FetchRefSpecs.Add(allBranchesFetchRefSpec)); } diff --git a/src/GitTools.Core/GitTools.Core.Shared/Helpers/ProcessHelper.cs b/src/GitTools.Core/GitTools.Core.Shared/Helpers/ProcessHelper.cs index af17bd6..a4662d5 100644 --- a/src/GitTools.Core/GitTools.Core.Shared/Helpers/ProcessHelper.cs +++ b/src/GitTools.Core/GitTools.Core.Shared/Helpers/ProcessHelper.cs @@ -132,14 +132,32 @@ public enum ErrorModes public struct ChangeErrorMode : IDisposable { - int oldMode; + readonly int oldMode; public ChangeErrorMode(ErrorModes mode) { - oldMode = SetErrorMode((int)mode); + try + { + oldMode = SetErrorMode((int)mode); + } + catch (EntryPointNotFoundException) + { + oldMode = (int)mode; + } } - void IDisposable.Dispose() { SetErrorMode(oldMode); } + + void IDisposable.Dispose() + { + try + { + SetErrorMode(oldMode); + } + catch (EntryPointNotFoundException) + { + // NOTE: Mono doesn't support DllImport("kernel32.dll") and its SetErrorMode method, obviously. @asbjornu + } + } [DllImport("kernel32.dll")] static extern int SetErrorMode(int newMode); diff --git a/src/GitTools.Core/GitTools.Core.Shared/IO/Helpers/DeleteHelper.cs b/src/GitTools.Core/GitTools.Core.Shared/IO/Helpers/DeleteHelper.cs index dd88e1f..57638f5 100644 --- a/src/GitTools.Core/GitTools.Core.Shared/IO/Helpers/DeleteHelper.cs +++ b/src/GitTools.Core/GitTools.Core.Shared/IO/Helpers/DeleteHelper.cs @@ -1,5 +1,6 @@ namespace GitTools.IO { + using System; using System.IO; public static class DeleteHelper @@ -11,17 +12,50 @@ public static void DeleteGitRepository(string directory) return; } - foreach (var fileName in Directory.GetFiles(directory, "*.*", SearchOption.AllDirectories)) + try { - var fileInfo = new FileInfo(fileName) + foreach (var fileName in Directory.GetFiles(directory, "*.*", SearchOption.AllDirectories)) { - IsReadOnly = false - }; + var fileInfo = new FileInfo(fileName) + { + IsReadOnly = false + }; - fileInfo.Delete(); + try + { + fileInfo.Delete(); + } + catch (FileNotFoundException) + { + } + catch (UnauthorizedAccessException) + { + } + } + + Directory.Delete(directory, true); + } + catch (DirectoryNotFoundException) + { } + catch (UnauthorizedAccessException) + { + } + } + - Directory.Delete(directory, true); + public static void DeleteDirectory(string directory, bool recursive) + { + try + { + Directory.Delete(directory, recursive); + } + catch (DirectoryNotFoundException) + { + } + catch (UnauthorizedAccessException) + { + } } } } \ No newline at end of file