protected override bool DrawWizardGUI() { GUILayout.Label(GitGUI.GetTempContent("Fetch Settings:"), "ProjectBrowserHeaderBgMiddle"); base.DrawWizardGUI(); prune = EditorGUILayout.Toggle(GitGUI.GetTempContent("Prune", "Prune all unreachable objects from the object database"), prune); GUILayout.Label(GitGUI.GetTempContent("Merge Settings:"), "ProjectBrowserHeaderBgMiddle"); prune = EditorGUILayout.Toggle(GitGUI.GetTempContent("Prune", "Prune all unreachable objects from the object database"), prune); commitOnSuccess = EditorGUILayout.Toggle(GitGUI.GetTempContent("Commit on success"), commitOnSuccess); fastForwardStrategy = (FastForwardStrategy)EditorGUILayout.EnumPopup(GitGUI.GetTempContent("Fast Forward Strategy"), fastForwardStrategy); mergeFileFavor = (ConflictMergeType)EditorGUILayout.EnumPopup(GitGUI.GetTempContent("File Merge Favor"), mergeFileFavor); return(false); }
public void CanMergeCommittish(string committish, FastForwardStrategy strategy, MergeStatus expectedMergeStatus) { string path = CloneMergeTestRepo(); using (var repo = new Repository(path)) { MergeResult result = repo.Merge(committish, Constants.Signature, new MergeOptions() { FastForwardStrategy = strategy }); Assert.Equal(expectedMergeStatus, result.Status); Assert.False(repo.Index.RetrieveStatus().Any()); } }
public void CanMergeBranch(string branchName, FastForwardStrategy strategy, MergeStatus expectedMergeStatus) { string path = SandboxMergeTestRepo(); using (var repo = new Repository(path)) { Branch branch = repo.Branches[branchName]; MergeResult result = repo.Merge(branch, Constants.Signature, new MergeOptions() { FastForwardStrategy = strategy }); Assert.Equal(expectedMergeStatus, result.Status); Assert.False(repo.RetrieveStatus().Any()); } }
public void CanFastForwardCommit(bool fromDetachedHead, FastForwardStrategy fastForwardStrategy, string expectedCommitId, MergeStatus expectedMergeStatus) { string path = CloneMergeTestRepo(); using (var repo = new Repository(path)) { if(fromDetachedHead) { repo.Checkout(repo.Head.Tip.Id.Sha); } Commit commitToMerge = repo.Branches["fast_forward"].Tip; MergeResult result = repo.Merge(commitToMerge, Constants.Signature, new MergeOptions() { FastForwardStrategy = fastForwardStrategy }); Assert.Equal(expectedMergeStatus, result.Status); Assert.Equal(expectedCommitId, result.Commit.Id.Sha); Assert.False(repo.Index.RetrieveStatus().Any()); Assert.Equal(fromDetachedHead, repo.Info.IsHeadDetached); } }
public void CanNonFastForwardMergeCommit(bool fromDetachedHead, FastForwardStrategy fastForwardStrategy, MergeStatus expectedMergeStatus) { string path = CloneMergeTestRepo(); using (var repo = new Repository(path)) { if (fromDetachedHead) { repo.Checkout(repo.Head.Tip.Id.Sha); } Commit commitToMerge = repo.Branches["normal_merge"].Tip; MergeResult result = repo.Merge(commitToMerge, Constants.Signature, new MergeOptions() { FastForwardStrategy = fastForwardStrategy }); Assert.Equal(expectedMergeStatus, result.Status); Assert.False(repo.Index.RetrieveStatus().Any()); Assert.Equal(fromDetachedHead, repo.Info.IsHeadDetached); } }
public void MergeWithWorkDirConflictsThrows(bool shouldStage, FastForwardStrategy strategy) { // Merging the fast_forward branch results in a change to file // b.txt. In this test we modify the file in the working directory // and then attempt to perform a merge. We expect the merge to fail // due to checkout conflicts. string committishToMerge = "fast_forward"; using (var repo = new Repository(SandboxMergeTestRepo())) { Touch(repo.Info.WorkingDirectory, "b.txt", "this is an alternate change"); if (shouldStage) { Commands.Stage(repo, "b.txt"); } Assert.Throws <CheckoutConflictException>(() => repo.Merge(committishToMerge, Constants.Signature, new MergeOptions() { FastForwardStrategy = strategy })); } }
public void CanPull(FastForwardStrategy fastForwardStrategy) { string url = "https://github.com/libgit2/TestGitRepository"; var scd = BuildSelfCleaningDirectory(); string clonedRepoPath = Repository.Clone(url, scd.DirectoryPath); using (var repo = new Repository(clonedRepoPath)) { repo.Reset(ResetMode.Hard, "HEAD~1"); Assert.False(repo.RetrieveStatus().Any()); Assert.Equal(repo.Lookup <Commit>("refs/remotes/origin/master~1"), repo.Head.Tip); PullOptions pullOptions = new PullOptions() { MergeOptions = new MergeOptions() { FastForwardStrategy = fastForwardStrategy } }; MergeResult mergeResult = repo.Network.Pull(Constants.Signature, pullOptions); if (fastForwardStrategy == FastForwardStrategy.Default || fastForwardStrategy == FastForwardStrategy.FastForwardOnly) { Assert.Equal(mergeResult.Status, MergeStatus.FastForward); Assert.Equal(mergeResult.Commit, repo.Branches["refs/remotes/origin/master"].Tip); Assert.Equal(repo.Head.Tip, repo.Branches["refs/remotes/origin/master"].Tip); } else { Assert.Equal(mergeResult.Status, MergeStatus.NonFastForward); } } }
public void CanFastForwardCommit(bool fromDetachedHead, FastForwardStrategy fastForwardStrategy, string expectedCommitId, MergeStatus expectedMergeStatus) { string path = SandboxMergeTestRepo(); using (var repo = new Repository(path)) { if (fromDetachedHead) { Commands.Checkout(repo, repo.Head.Tip.Id.Sha); } Commit commitToMerge = repo.Branches["fast_forward"].Tip; MergeResult result = repo.Merge(commitToMerge, Constants.Signature, new MergeOptions() { FastForwardStrategy = fastForwardStrategy }); Assert.Equal(expectedMergeStatus, result.Status); Assert.Equal(expectedCommitId, result.Commit.Id.Sha); Assert.False(repo.RetrieveStatus().Any()); Assert.Equal(fromDetachedHead, repo.Info.IsHeadDetached); } }
public void CanPull(FastForwardStrategy fastForwardStrategy) { string url = "https://github.com/libgit2/TestGitRepository"; var scd = BuildSelfCleaningDirectory(); string clonedRepoPath = Repository.Clone(url, scd.DirectoryPath); using (var repo = new Repository(clonedRepoPath)) { repo.Reset(ResetMode.Hard, "HEAD~1"); Assert.False(repo.RetrieveStatus().Any()); Assert.Equal(repo.Lookup<Commit>("refs/remotes/origin/master~1"), repo.Head.Tip); PullOptions pullOptions = new PullOptions() { MergeOptions = new MergeOptions() { FastForwardStrategy = fastForwardStrategy } }; MergeResult mergeResult = repo.Network.Pull(Constants.Signature, pullOptions); if(fastForwardStrategy == FastForwardStrategy.Default || fastForwardStrategy == FastForwardStrategy.FastForwardOnly) { Assert.Equal(mergeResult.Status, MergeStatus.FastForward); Assert.Equal(mergeResult.Commit, repo.Branches["refs/remotes/origin/master"].Tip); Assert.Equal(repo.Head.Tip, repo.Branches["refs/remotes/origin/master"].Tip); } else { Assert.Equal(mergeResult.Status, MergeStatus.NonFastForward); } } }
public void Merge (string branch, GitUpdateOptions options, ProgressMonitor monitor, FastForwardStrategy strategy = FastForwardStrategy.Default) { int stashIndex = -1; var oldHead = RootRepository.Head.Tip; Signature sig = GetSignature (); if (sig == null) return; try { monitor.BeginTask (GettextCatalog.GetString ("Merging"), 5); CommonPreMergeRebase (options, monitor, out stashIndex); // Do a merge. MergeResult mergeResult = RootRepository.Merge (branch, sig, new MergeOptions { CheckoutNotifyFlags = refreshFlags, OnCheckoutNotify = RefreshFile, }); if (mergeResult.Status == MergeStatus.Conflicts) ConflictResolver (monitor, RootRepository.Head.Tip, RootRepository.Info.Message); } finally { CommonPostMergeRebase (stashIndex, GitUpdateOptions.SaveLocalChanges, monitor, oldHead); } }
public void CanMergeBranch(string branchName, FastForwardStrategy strategy, MergeStatus expectedMergeStatus) { string path = SandboxMergeTestRepo(); using (var repo = new Repository(path)) { Branch branch = repo. Branches[branchName]; MergeResult result = repo.Merge(branch, Constants.Signature, new MergeOptions() { FastForwardStrategy = strategy }); Assert.Equal(expectedMergeStatus, result.Status); Assert.False(repo.RetrieveStatus().Any()); } }
public void MergeWithWorkDirConflictsThrows(bool shouldStage, FastForwardStrategy strategy) { // Merging the fast_forward branch results in a change to file // b.txt. In this test we modify the file in the working directory // and then attempt to perform a merge. We expect the merge to fail // due to merge conflicts. string committishToMerge = "fast_forward"; using (var repo = new Repository(SandboxMergeTestRepo())) { Touch(repo.Info.WorkingDirectory, "b.txt", "this is an alternate change"); if (shouldStage) { repo.Stage("b.txt"); } Assert.Throws<MergeConflictException>(() => repo.Merge(committishToMerge, Constants.Signature, new MergeOptions() { FastForwardStrategy = strategy })); } }
public void CanNonFastForwardMergeCommit(bool fromDetachedHead, FastForwardStrategy fastForwardStrategy, MergeStatus expectedMergeStatus) { string path = SandboxMergeTestRepo(); using (var repo = new Repository(path)) { if (fromDetachedHead) { Commands.Checkout(repo, repo.Head.Tip.Id.Sha); } Commit commitToMerge = repo.Branches["normal_merge"].Tip; MergeResult result = repo.Merge(commitToMerge, Constants.Signature, new MergeOptions() { FastForwardStrategy = fastForwardStrategy }); Assert.Equal(expectedMergeStatus, result.Status); Assert.False(repo.RetrieveStatus().Any()); Assert.Equal(fromDetachedHead, repo.Info.IsHeadDetached); } }