public virtual void TestBoth() { GitIndex index = new GitIndex(db); Tree tree = new Tree(db); index.Add(trash, WriteTrashFile("a", "a")); tree.AddFile("b/b"); index.Add(trash, WriteTrashFile("c", "c")); tree.AddFile("c"); new IndexTreeWalker(index, tree, trash, new IndexTreeWalkerTest.TestIndexTreeVisitor (this)).Walk(); NUnit.Framework.Assert.IsTrue(indexOnlyEntriesVisited.Contains("a")); NUnit.Framework.Assert.IsTrue(treeOnlyEntriesVisited.Contains("b/b")); NUnit.Framework.Assert.IsTrue(bothVisited.Contains("c")); }
public virtual void TestAdded() { GitIndex index = new GitIndex(db); WriteTrashFile("file1", "file1"); WriteTrashFile("dir/subfile", "dir/subfile"); Tree tree = new Tree(db); tree.SetId(InsertTree(tree)); index.Add(trash, new FilePath(trash, "file1")); index.Add(trash, new FilePath(trash, "dir/subfile")); index.Write(); FileTreeIterator iterator = new FileTreeIterator(db); IndexDiff diff = new IndexDiff(db, tree.GetId(), iterator); diff.Diff(); NUnit.Framework.Assert.AreEqual(2, diff.GetAdded().Count); NUnit.Framework.Assert.IsTrue(diff.GetAdded().Contains("file1")); NUnit.Framework.Assert.IsTrue(diff.GetAdded().Contains("dir/subfile")); NUnit.Framework.Assert.AreEqual(0, diff.GetChanged().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetModified().Count); NUnit.Framework.Assert.AreEqual(0, diff.GetRemoved().Count); }
public virtual void TestCheckingOutWithConflicts() { GitIndex index = new GitIndex(db); index.Add(trash, WriteTrashFile("bar", "bar")); index.Add(trash, WriteTrashFile("foo/bar/baz/qux", "foo/bar")); RecursiveDelete(new FilePath(trash, "bar")); RecursiveDelete(new FilePath(trash, "foo")); WriteTrashFile("bar/baz/qux/foo", "another nasty one"); WriteTrashFile("foo", "troublesome little bugger"); try { WorkDirCheckout workDirCheckout = new WorkDirCheckout(db, trash, index, index); workDirCheckout.Checkout(); NUnit.Framework.Assert.Fail("Should have thrown exception"); } catch (NGit.Errors.CheckoutConflictException) { } // all is well WorkDirCheckout workDirCheckout_1 = new WorkDirCheckout(db, trash, index, index); workDirCheckout_1.SetFailOnConflict(false); workDirCheckout_1.Checkout(); NUnit.Framework.Assert.IsTrue(new FilePath(trash, "bar").IsFile()); NUnit.Framework.Assert.IsTrue(new FilePath(trash, "foo/bar/baz/qux").IsFile()); GitIndex index2 = new GitIndex(db); RecursiveDelete(new FilePath(trash, "bar")); RecursiveDelete(new FilePath(trash, "foo")); index2.Add(trash, WriteTrashFile("bar/baz/qux/foo", "bar")); WriteTrashFile("bar/baz/qux/bar", "evil? I thought it said WEEVIL!"); index2.Add(trash, WriteTrashFile("foo", "lalala")); workDirCheckout_1 = new WorkDirCheckout(db, trash, index2, index); workDirCheckout_1.SetFailOnConflict(false); workDirCheckout_1.Checkout(); NUnit.Framework.Assert.IsTrue(new FilePath(trash, "bar").IsFile()); NUnit.Framework.Assert.IsTrue(new FilePath(trash, "foo/bar/baz/qux").IsFile()); NUnit.Framework.Assert.IsNotNull(index2.GetEntry("bar")); NUnit.Framework.Assert.IsNotNull(index2.GetEntry("foo/bar/baz/qux")); NUnit.Framework.Assert.IsNull(index2.GetEntry("bar/baz/qux/foo")); NUnit.Framework.Assert.IsNull(index2.GetEntry("foo")); }
/// <summary> /// Requires absolute path /// </summary> /// <param name="fileName"></param> public void StageFile(string fileName) { if (!this.HasGitRepository) { return; } //var index = repository.GetIndex(); //index.RereadIfNecessary(); if (GitBash.Exists) { if (File.Exists(fileName)) { GitBash.Run(string.Format("add \"{0}\"", GetRelativeFileName(fileName)), this.GitWorkingDirectory); } else { GitBash.Run(string.Format("rm --cached -- \"{0}\"", GetRelativeFileName(fileName)), this.GitWorkingDirectory); } } else { index.Remove(repository.WorkTree, fileName); if (File.Exists(fileName)) { var content = File.ReadAllBytes(fileName); index.Add(repository.WorkTree, fileName, content); } else { //stage deleted index.Remove(repository.WorkTree, fileName); } index.Write(); } this.cache.Remove(GetCacheKey(fileName)); this.changedFiles = null; }
public virtual void TestIndexOnlyOneLevel() { GitIndex index = new GitIndex(db); Tree tree = new Tree(db); index.Add(trash, WriteTrashFile("foo", "foo")); index.Add(trash, WriteTrashFile("bar", "bar")); new IndexTreeWalker(index, tree, trash, new IndexTreeWalkerTest.TestIndexTreeVisitor (this)).Walk(); NUnit.Framework.Assert.IsTrue(indexOnlyEntriesVisited[0].Equals("bar")); NUnit.Framework.Assert.IsTrue(indexOnlyEntriesVisited[1].Equals("foo")); }
public virtual void TestLeavingTree() { GitIndex index = new GitIndex(db); index.Add(trash, WriteTrashFile("foo/bar", "foo/bar")); index.Add(trash, WriteTrashFile("foobar", "foobar")); new IndexTreeWalker(index, db.MapTree(index.WriteTree()), trash, new _AbstractIndexTreeVisitor_144 ()).Walk(); }
public virtual void TestIndexOnlySubDirs() { GitIndex index = new GitIndex(db); Tree tree = new Tree(db); index.Add(trash, WriteTrashFile("foo/bar/baz", "foobar")); index.Add(trash, WriteTrashFile("asdf", "asdf")); new IndexTreeWalker(index, tree, trash, new IndexTreeWalkerTest.TestIndexTreeVisitor (this)).Walk(); NUnit.Framework.Assert.AreEqual("asdf", indexOnlyEntriesVisited[0]); NUnit.Framework.Assert.AreEqual("foo/bar/baz", indexOnlyEntriesVisited[1]); }
public virtual void TestFindingConflicts() { GitIndex index = new GitIndex(db); index.Add(trash, WriteTrashFile("bar", "bar")); index.Add(trash, WriteTrashFile("foo/bar/baz/qux", "foo/bar")); RecursiveDelete(new FilePath(trash, "bar")); RecursiveDelete(new FilePath(trash, "foo")); WriteTrashFile("bar/baz/qux/foo", "another nasty one"); WriteTrashFile("foo", "troublesome little bugger"); WorkDirCheckout workDirCheckout = new WorkDirCheckout(db, trash, index, index); workDirCheckout.PrescanOneTree(); IList<string> conflictingEntries = workDirCheckout.GetConflicts(); IList<string> removedEntries = workDirCheckout.GetRemoved(); NUnit.Framework.Assert.AreEqual("bar/baz/qux/foo", conflictingEntries[0]); NUnit.Framework.Assert.AreEqual("foo", conflictingEntries[1]); GitIndex index2 = new GitIndex(db); RecursiveDelete(new FilePath(trash, "bar")); RecursiveDelete(new FilePath(trash, "foo")); index2.Add(trash, WriteTrashFile("bar/baz/qux/foo", "bar")); index2.Add(trash, WriteTrashFile("foo", "lalala")); workDirCheckout = new WorkDirCheckout(db, trash, index2, index); workDirCheckout.PrescanOneTree(); conflictingEntries = workDirCheckout.GetConflicts(); removedEntries = workDirCheckout.GetRemoved(); NUnit.Framework.Assert.IsTrue(conflictingEntries.IsEmpty()); NUnit.Framework.Assert.IsTrue(removedEntries.Contains("bar/baz/qux/foo")); NUnit.Framework.Assert.IsTrue(removedEntries.Contains("foo")); }
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 TestUnchangedComplex() { 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/b.b/b", "a/b.b/b")); 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/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); }
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); }
/// <exception cref="System.IO.IOException"></exception> private void BuildIndex(Dictionary<string, string> indexEntries) { GitIndex index = new GitIndex(db); if (indexEntries != null) { foreach (KeyValuePair<string, string> e in indexEntries.EntrySet()) { index.Add(trash, WriteTrashFile(e.Key, e.Value)).ForceRecheck(); } } index.Write(); db.GetIndex().Read(); }