/// <param name="diff"></param> public Status(IndexDiff diff) : base() { this.diff = diff; clean = diff.GetAdded().IsEmpty() && diff.GetChanged().IsEmpty() && diff.GetRemoved ().IsEmpty() && diff.GetMissing().IsEmpty() && diff.GetModified().IsEmpty() && diff .GetUntracked().IsEmpty() && diff.GetConflicting().IsEmpty(); }
public virtual void TestConflictingFromMultipleCreations() { Git git = new Git(db); WriteTrashFile("a", "1\na\n3\n"); git.Add().AddFilepattern("a").Call(); RevCommit initialCommit = git.Commit().SetMessage("initial").Call(); CreateBranch(initialCommit, "refs/heads/side"); CheckoutBranch("refs/heads/side"); WriteTrashFile("b", "1\nb(side)\n3\n"); git.Add().AddFilepattern("b").Call(); RevCommit secondCommit = git.Commit().SetMessage("side").Call(); CheckoutBranch("refs/heads/master"); WriteTrashFile("b", "1\nb(main)\n3\n"); git.Add().AddFilepattern("b").Call(); git.Commit().SetMessage("main").Call(); MergeCommandResult result = git.Merge().Include(secondCommit.Id).SetStrategy(MergeStrategy .RESOLVE).Call(); NUnit.Framework.Assert.AreEqual(MergeStatus.CONFLICTING, result.GetMergeStatus()); FileTreeIterator iterator = new FileTreeIterator(db); IndexDiff diff = new IndexDiff(db, Constants.HEAD, iterator); diff.Diff(); NUnit.Framework.Assert.AreEqual("[]", new TreeSet <string>(diff.GetChanged()).ToString ()); NUnit.Framework.Assert.AreEqual("[]", diff.GetAdded().ToString()); NUnit.Framework.Assert.AreEqual("[]", diff.GetRemoved().ToString()); NUnit.Framework.Assert.AreEqual("[]", diff.GetMissing().ToString()); NUnit.Framework.Assert.AreEqual("[]", diff.GetModified().ToString()); NUnit.Framework.Assert.AreEqual("[b]", diff.GetConflicting().ToString()); }
public virtual void TestUnchangedSimple() { GitIndex index = new GitIndex(db); index.Add(trash, WriteTrashFile("a.b", "a.b")); index.Add(trash, WriteTrashFile("a.c", "a.c")); index.Add(trash, WriteTrashFile("a=c", "a=c")); index.Add(trash, WriteTrashFile("a=d", "a=d")); index.Write(); Tree tree = new Tree(db); // got the hash id'd from the data using echo -n a.b|git hash-object -t blob --stdin tree.AddFile("a.b").SetId(ObjectId.FromString("f6f28df96c2b40c951164286e08be7c38ec74851" )); tree.AddFile("a.c").SetId(ObjectId.FromString("6bc0e647512d2a0bef4f26111e484dc87df7f5ca" )); tree.AddFile("a=c").SetId(ObjectId.FromString("06022365ddbd7fb126761319633bf73517770714" )); tree.AddFile("a=d").SetId(ObjectId.FromString("fa6414df3da87840700e9eeb7fc261dd77ccd5c2" )); tree.SetId(InsertTree(tree)); FileTreeIterator iterator = new FileTreeIterator(db); IndexDiff diff = new IndexDiff(db, tree.GetId(), iterator); diff.Diff(); NUnit.Framework.Assert.AreEqual(0, diff.GetChanged().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetAdded().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetRemoved().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetMissing().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetModified().Count); }
public virtual void TestModified() { WriteTrashFile("file2", "file2"); WriteTrashFile("dir/file3", "dir/file3"); Git git = new Git(db); git.Add().AddFilepattern("file2").AddFilepattern("dir/file3").Call(); WriteTrashFile("dir/file3", "changed"); Tree tree = new Tree(db); tree.AddFile("file2").SetId(ObjectId.FromString("0123456789012345678901234567890123456789" )); tree.AddFile("dir/file3").SetId(ObjectId.FromString("0123456789012345678901234567890123456789" )); NUnit.Framework.Assert.AreEqual(2, tree.MemberCount()); Tree tree2 = (Tree)tree.FindTreeMember("dir"); tree2.SetId(InsertTree(tree2)); tree.SetId(InsertTree(tree)); FileTreeIterator iterator = new FileTreeIterator(db); IndexDiff diff = new IndexDiff(db, tree.GetId(), iterator); diff.Diff(); NUnit.Framework.Assert.AreEqual(2, diff.GetChanged().Count); NUnit.Framework.Assert.IsTrue(diff.GetChanged().Contains("file2")); NUnit.Framework.Assert.IsTrue(diff.GetChanged().Contains("dir/file3")); NUnit.Framework.Assert.AreEqual(1, diff.GetModified().Count); NUnit.Framework.Assert.IsTrue(diff.GetModified().Contains("dir/file3")); NUnit.Framework.Assert.AreEqual(0, diff.GetAdded().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetRemoved().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetMissing().Count); NUnit.Framework.Assert.AreEqual(Collections <string> .EMPTY_SET, diff.GetUntrackedFolders() ); }
public virtual void TestModified() { GitIndex index = new GitIndex(db); index.Add(trash, WriteTrashFile("file2", "file2")); index.Add(trash, WriteTrashFile("dir/file3", "dir/file3")); index.Write(); WriteTrashFile("dir/file3", "changed"); Tree tree = new Tree(db); tree.AddFile("file2").SetId(ObjectId.FromString("0123456789012345678901234567890123456789" )); tree.AddFile("dir/file3").SetId(ObjectId.FromString("0123456789012345678901234567890123456789" )); NUnit.Framework.Assert.AreEqual(2, tree.MemberCount()); Tree tree2 = (Tree)tree.FindTreeMember("dir"); tree2.SetId(InsertTree(tree2)); tree.SetId(InsertTree(tree)); FileTreeIterator iterator = new FileTreeIterator(db); IndexDiff diff = new IndexDiff(db, tree.GetId(), iterator); diff.Diff(); NUnit.Framework.Assert.AreEqual(2, diff.GetChanged().Count); NUnit.Framework.Assert.IsTrue(diff.GetChanged().Contains("file2")); NUnit.Framework.Assert.IsTrue(diff.GetChanged().Contains("dir/file3")); NUnit.Framework.Assert.AreEqual(1, diff.GetModified().Count); NUnit.Framework.Assert.IsTrue(diff.GetModified().Contains("dir/file3")); NUnit.Framework.Assert.AreEqual(0, diff.GetAdded().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetRemoved().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetMissing().Count); }
public virtual void TestUnchangedComplex() { Git git = new Git(db); WriteTrashFile("a.b", "a.b"); WriteTrashFile("a.c", "a.c"); WriteTrashFile("a/b.b/b", "a/b.b/b"); WriteTrashFile("a/b", "a/b"); WriteTrashFile("a/c", "a/c"); WriteTrashFile("a=c", "a=c"); WriteTrashFile("a=d", "a=d"); git.Add().AddFilepattern("a.b").AddFilepattern("a.c").AddFilepattern("a/b.b/b").AddFilepattern ("a/b").AddFilepattern("a/c").AddFilepattern("a=c").AddFilepattern("a=d").Call(); Tree tree = new Tree(db); // got the hash id'd from the data using echo -n a.b|git hash-object -t blob --stdin tree.AddFile("a.b").SetId(ObjectId.FromString("f6f28df96c2b40c951164286e08be7c38ec74851" )); tree.AddFile("a.c").SetId(ObjectId.FromString("6bc0e647512d2a0bef4f26111e484dc87df7f5ca" )); tree.AddFile("a/b.b/b").SetId(ObjectId.FromString("8d840bd4e2f3a48ff417c8e927d94996849933fd" )); tree.AddFile("a/b").SetId(ObjectId.FromString("db89c972fc57862eae378f45b74aca228037d415" )); tree.AddFile("a/c").SetId(ObjectId.FromString("52ad142a008aeb39694bafff8e8f1be75ed7f007" )); tree.AddFile("a=c").SetId(ObjectId.FromString("06022365ddbd7fb126761319633bf73517770714" )); tree.AddFile("a=d").SetId(ObjectId.FromString("fa6414df3da87840700e9eeb7fc261dd77ccd5c2" )); Tree tree3 = (Tree)tree.FindTreeMember("a/b.b"); tree3.SetId(InsertTree(tree3)); Tree tree2 = (Tree)tree.FindTreeMember("a"); tree2.SetId(InsertTree(tree2)); tree.SetId(InsertTree(tree)); FileTreeIterator iterator = new FileTreeIterator(db); IndexDiff diff = new IndexDiff(db, tree.GetId(), iterator); diff.Diff(); NUnit.Framework.Assert.AreEqual(0, diff.GetChanged().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetAdded().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetRemoved().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetMissing().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetModified().Count); NUnit.Framework.Assert.AreEqual(Collections <string> .EMPTY_SET, diff.GetUntrackedFolders() ); }
public virtual void TestConflicting() { Git git = new Git(db); WriteTrashFile("a", "1\na\n3\n"); WriteTrashFile("b", "1\nb\n3\n"); git.Add().AddFilepattern("a").AddFilepattern("b").Call(); RevCommit initialCommit = git.Commit().SetMessage("initial").Call(); // create side branch with two modifications CreateBranch(initialCommit, "refs/heads/side"); CheckoutBranch("refs/heads/side"); WriteTrashFile("a", "1\na(side)\n3\n"); WriteTrashFile("b", "1\nb\n3\n(side)"); git.Add().AddFilepattern("a").AddFilepattern("b").Call(); RevCommit secondCommit = git.Commit().SetMessage("side").Call(); // update a on master to generate conflict CheckoutBranch("refs/heads/master"); WriteTrashFile("a", "1\na(main)\n3\n"); git.Add().AddFilepattern("a").Call(); git.Commit().SetMessage("main").Call(); // merge side with master MergeCommandResult result = git.Merge().Include(secondCommit.Id).SetStrategy(MergeStrategy .RESOLVE).Call(); NUnit.Framework.Assert.AreEqual(MergeStatus.CONFLICTING, result.GetMergeStatus()); FileTreeIterator iterator = new FileTreeIterator(db); IndexDiff diff = new IndexDiff(db, Constants.HEAD, iterator); diff.Diff(); NUnit.Framework.CollectionAssert.AreEqual("[b]", new TreeSet <string>(diff.GetChanged()).ToString ()); NUnit.Framework.CollectionAssert.IsEmpty(diff.GetAdded()); NUnit.Framework.CollectionAssert.IsEmpty(diff.GetRemoved()); NUnit.Framework.CollectionAssert.IsEmpty(diff.GetMissing()); NUnit.Framework.CollectionAssert.IsEmpty(diff.GetModified()); NUnit.Framework.Assert.AreEqual("a", diff.GetConflicting().First()); NUnit.Framework.Assert.AreEqual(1, diff.GetConflicting().Count()); NUnit.Framework.CollectionAssert.IsEmpty(diff.GetUntrackedFolders()); }
public GitFileStatus GetFileStatusNoCache(string fileName) { //Debug.WriteLine(string.Format("===+ GetFileStatusNoCache {0}", fileName)); var fileNameRel = GetRelativeFileNameForGit(fileName); IndexDiff indexDiff = new IndexDiff(repository, Constants.HEAD, new FileTreeIterator(repository)); indexDiff.SetFilter(PathFilterGroup.CreateFromStrings(fileNameRel)); indexDiff.Diff(); if (indexDiff.GetModified().Count > 0) return GitFileStatus.Modified; if (indexDiff.GetConflicting().Count > 0) return GitFileStatus.Conflict; if (indexDiff.GetUntracked().Count > 0 || indexDiff.GetUntrackedFolders().Count > 0) { if (File.Exists(fileName)) return GitFileStatus.New; return GitFileStatus.NotControlled; } if (indexDiff.GetAdded().Count > 0) return GitFileStatus.Added; if (!File.Exists(fileName)) { if (indexDiff.GetMissing().Count > 0) return GitFileStatus.Removed; return GitFileStatus.Deleted; } if (indexDiff.GetChanged().Count > 0) return GitFileStatus.Staged; if (indexDiff.GetIgnoredNotInIndex().Count > 0) return GitFileStatus.Ignored; return GitFileStatus.Tracked; }
public virtual void TestUnchangedSimple() { WriteTrashFile("a.b", "a.b"); WriteTrashFile("a.c", "a.c"); WriteTrashFile("a=c", "a=c"); WriteTrashFile("a=d", "a=d"); Git git = new Git(db); git.Add().AddFilepattern("a.b").Call(); git.Add().AddFilepattern("a.c").Call(); git.Add().AddFilepattern("a=c").Call(); git.Add().AddFilepattern("a=d").Call(); Tree tree = new Tree(db); // got the hash id'd from the data using echo -n a.b|git hash-object -t blob --stdin tree.AddFile("a.b").SetId(ObjectId.FromString("f6f28df96c2b40c951164286e08be7c38ec74851" )); tree.AddFile("a.c").SetId(ObjectId.FromString("6bc0e647512d2a0bef4f26111e484dc87df7f5ca" )); tree.AddFile("a=c").SetId(ObjectId.FromString("06022365ddbd7fb126761319633bf73517770714" )); tree.AddFile("a=d").SetId(ObjectId.FromString("fa6414df3da87840700e9eeb7fc261dd77ccd5c2" )); tree.SetId(InsertTree(tree)); FileTreeIterator iterator = new FileTreeIterator(db); IndexDiff diff = new IndexDiff(db, tree.GetId(), iterator); diff.Diff(); NUnit.Framework.Assert.AreEqual(0, diff.GetChanged().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetAdded().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetRemoved().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetMissing().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetModified().Count); NUnit.Framework.CollectionAssert.AreEquivalent(Collections<string>.EMPTY_SET, diff.GetUntrackedFolders() ); }
public virtual void TestUnchangedComplex() { Git git = new Git(db); WriteTrashFile("a.b", "a.b"); WriteTrashFile("a.c", "a.c"); WriteTrashFile("a/b.b/b", "a/b.b/b"); WriteTrashFile("a/b", "a/b"); WriteTrashFile("a/c", "a/c"); WriteTrashFile("a=c", "a=c"); WriteTrashFile("a=d", "a=d"); git.Add().AddFilepattern("a.b").AddFilepattern("a.c").AddFilepattern("a/b.b/b").AddFilepattern ("a/b").AddFilepattern("a/c").AddFilepattern("a=c").AddFilepattern("a=d").Call(); Tree tree = new Tree(db); // got the hash id'd from the data using echo -n a.b|git hash-object -t blob --stdin tree.AddFile("a.b").SetId(ObjectId.FromString("f6f28df96c2b40c951164286e08be7c38ec74851" )); tree.AddFile("a.c").SetId(ObjectId.FromString("6bc0e647512d2a0bef4f26111e484dc87df7f5ca" )); tree.AddFile("a/b.b/b").SetId(ObjectId.FromString("8d840bd4e2f3a48ff417c8e927d94996849933fd" )); tree.AddFile("a/b").SetId(ObjectId.FromString("db89c972fc57862eae378f45b74aca228037d415" )); tree.AddFile("a/c").SetId(ObjectId.FromString("52ad142a008aeb39694bafff8e8f1be75ed7f007" )); tree.AddFile("a=c").SetId(ObjectId.FromString("06022365ddbd7fb126761319633bf73517770714" )); tree.AddFile("a=d").SetId(ObjectId.FromString("fa6414df3da87840700e9eeb7fc261dd77ccd5c2" )); Tree tree3 = (Tree)tree.FindTreeMember("a/b.b"); tree3.SetId(InsertTree(tree3)); Tree tree2 = (Tree)tree.FindTreeMember("a"); tree2.SetId(InsertTree(tree2)); tree.SetId(InsertTree(tree)); FileTreeIterator iterator = new FileTreeIterator(db); IndexDiff diff = new IndexDiff(db, tree.GetId(), iterator); diff.Diff(); NUnit.Framework.Assert.AreEqual(0, diff.GetChanged().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetAdded().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetRemoved().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetMissing().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetModified().Count); NUnit.Framework.CollectionAssert.AreEquivalent(Collections<string>.EMPTY_SET, diff.GetUntrackedFolders() ); }
public virtual void TestModified() { WriteTrashFile("file2", "file2"); WriteTrashFile("dir/file3", "dir/file3"); Git git = new Git(db); git.Add().AddFilepattern("file2").AddFilepattern("dir/file3").Call(); WriteTrashFile("dir/file3", "changed"); Tree tree = new Tree(db); tree.AddFile("file2").SetId(ObjectId.FromString("0123456789012345678901234567890123456789" )); tree.AddFile("dir/file3").SetId(ObjectId.FromString("0123456789012345678901234567890123456789" )); NUnit.Framework.Assert.AreEqual(2, tree.MemberCount()); Tree tree2 = (Tree)tree.FindTreeMember("dir"); tree2.SetId(InsertTree(tree2)); tree.SetId(InsertTree(tree)); FileTreeIterator iterator = new FileTreeIterator(db); IndexDiff diff = new IndexDiff(db, tree.GetId(), iterator); diff.Diff(); NUnit.Framework.Assert.AreEqual(2, diff.GetChanged().Count); NUnit.Framework.Assert.IsTrue(diff.GetChanged().Contains("file2")); NUnit.Framework.Assert.IsTrue(diff.GetChanged().Contains("dir/file3")); NUnit.Framework.Assert.AreEqual(1, diff.GetModified().Count); NUnit.Framework.Assert.IsTrue(diff.GetModified().Contains("dir/file3")); NUnit.Framework.Assert.AreEqual(0, diff.GetAdded().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetRemoved().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetMissing().Count); NUnit.Framework.CollectionAssert.AreEquivalent(Collections<string>.EMPTY_SET, diff.GetUntrackedFolders() ); }
public virtual void TestConflictingFromMultipleCreations() { Git git = new Git(db); WriteTrashFile("a", "1\na\n3\n"); git.Add().AddFilepattern("a").Call(); RevCommit initialCommit = git.Commit().SetMessage("initial").Call(); CreateBranch(initialCommit, "refs/heads/side"); CheckoutBranch("refs/heads/side"); WriteTrashFile("b", "1\nb(side)\n3\n"); git.Add().AddFilepattern("b").Call(); RevCommit secondCommit = git.Commit().SetMessage("side").Call(); CheckoutBranch("refs/heads/master"); WriteTrashFile("b", "1\nb(main)\n3\n"); git.Add().AddFilepattern("b").Call(); git.Commit().SetMessage("main").Call(); MergeCommandResult result = git.Merge().Include(secondCommit.Id).SetStrategy(MergeStrategy .RESOLVE).Call(); NUnit.Framework.Assert.AreEqual(MergeStatus.CONFLICTING, result.GetMergeStatus()); FileTreeIterator iterator = new FileTreeIterator(db); IndexDiff diff = new IndexDiff(db, Constants.HEAD, iterator); diff.Diff(); NUnit.Framework.Assert.AreEqual("[]", new TreeSet<string>(diff.GetChanged()).ToString ()); NUnit.Framework.CollectionAssert.IsEmpty(diff.GetAdded()); NUnit.Framework.CollectionAssert.IsEmpty(diff.GetRemoved()); NUnit.Framework.CollectionAssert.IsEmpty(diff.GetMissing()); NUnit.Framework.CollectionAssert.IsEmpty(diff.GetModified()); NUnit.Framework.Assert.AreEqual(1, diff.GetConflicting().Count()); NUnit.Framework.Assert.AreEqual("b", diff.GetConflicting().First()); NUnit.Framework.CollectionAssert.IsEmpty(diff.GetUntrackedFolders() ); }
protected void RaiseNotifyFromDiff(Repository repository) { if (repository == null) throw new ArgumentNullException("repository"); var workingTreeIt = new FileTreeIterator(repository); var diff = new IndexDiff(repository, Constants.HEAD, workingTreeIt); diff.Diff(); RaiseNotifyFromDiff(repository, diff.GetAdded(), GitNotifyAction.UpdateAdd); RaiseNotifyFromDiff(repository, diff.GetAssumeUnchanged(), GitNotifyAction.UpdateUpdate); RaiseNotifyFromDiff(repository, diff.GetChanged(), GitNotifyAction.UpdateUpdate); RaiseNotifyFromDiff(repository, diff.GetConflicting(), GitNotifyAction.UpdateUpdate); RaiseNotifyFromDiff(repository, diff.GetMissing(), GitNotifyAction.UpdateDeleted); RaiseNotifyFromDiff(repository, diff.GetModified(), GitNotifyAction.UpdateUpdate); RaiseNotifyFromDiff(repository, diff.GetRemoved(), GitNotifyAction.UpdateDeleted); RaiseNotifyFromDiff(repository, diff.GetUntracked(), GitNotifyAction.UpdateUpdate); }
public virtual void TestConflictingDeletedAndModified() { Git git = new Git(db); WriteTrashFile("a", "1\na\n3\n"); WriteTrashFile("b", "1\nb\n3\n"); git.Add().AddFilepattern("a").AddFilepattern("b").Call(); RevCommit initialCommit = git.Commit().SetMessage("initial").Call(); // create side branch and delete "a" CreateBranch(initialCommit, "refs/heads/side"); CheckoutBranch("refs/heads/side"); git.Rm().AddFilepattern("a").Call(); RevCommit secondCommit = git.Commit().SetMessage("side").Call(); // update a on master to generate conflict CheckoutBranch("refs/heads/master"); WriteTrashFile("a", "1\na(main)\n3\n"); git.Add().AddFilepattern("a").Call(); git.Commit().SetMessage("main").Call(); // merge side with master MergeCommandResult result = git.Merge().Include(secondCommit.Id).SetStrategy(MergeStrategy .RESOLVE).Call(); NUnit.Framework.Assert.AreEqual(MergeStatus.CONFLICTING, result.GetMergeStatus()); FileTreeIterator iterator = new FileTreeIterator(db); IndexDiff diff = new IndexDiff(db, Constants.HEAD, iterator); diff.Diff(); NUnit.Framework.Assert.AreEqual("[]", new TreeSet<string>(diff.GetChanged()).ToString ()); NUnit.Framework.Assert.AreEqual("[]", diff.GetAdded().ToString()); NUnit.Framework.Assert.AreEqual("[]", diff.GetRemoved().ToString()); NUnit.Framework.Assert.AreEqual("[]", diff.GetMissing().ToString()); NUnit.Framework.Assert.AreEqual("[]", diff.GetModified().ToString()); NUnit.Framework.Assert.AreEqual("[a]", diff.GetConflicting().ToString()); }