未验证 提交 ec8ff4a8 编写于 作者: B Brandon Ording 提交者: GitHub

Merge pull request #1936 from jairbubbles/throw-notfoundexception-if-trees-are-missing-when

Throw NotFoundException if trees are missing when computing diff
......@@ -1256,5 +1256,40 @@ public void UsingPatienceAlgorithmCompareOptionProducesPatienceDiff()
Assert.Equal(diffPatience, changes);
}
}
[Fact]
public void DiffThrowsANotFoundExceptionIfATreeIsMissing()
{
string repoPath = SandboxBareTestRepo();
// Manually delete the tree object to simulate a partial clone
File.Delete(Path.Combine(repoPath, "objects", "58", "1f9824ecaf824221bd36edf5430f2739a7c4f5"));
using (var repo = new Repository(repoPath))
{
// The commit is there but its tree is missing
var commit = repo.Lookup<Commit>("4c062a6361ae6959e06292c1fa5e2822d9c96345");
Assert.NotNull(commit);
Assert.Equal("581f9824ecaf824221bd36edf5430f2739a7c4f5", commit.Tree.Sha);
Assert.True(commit.Tree.IsMissing);
var tree = repo.Lookup<Tree>("581f9824ecaf824221bd36edf5430f2739a7c4f5");
Assert.Null(tree);
var otherCommit = repo.Lookup<Commit>("be3563ae3f795b2b4353bcce3a527ad0a4f7f644");
Assert.NotNull(otherCommit);
Assert.False(otherCommit.Tree.IsMissing);
Assert.Throws<NotFoundException>(() =>
{
using (repo.Diff.Compare<TreeChanges>(commit.Tree, otherCommit.Tree)) {}
});
Assert.Throws<NotFoundException>(() =>
{
using (repo.Diff.Compare<TreeChanges>(otherCommit.Tree, commit.Tree)) {}
});
}
}
}
}
......@@ -797,8 +797,8 @@ public static unsafe void git_diff_merge(DiffHandle onto, DiffHandle from)
ObjectId newTree,
GitDiffOptions options)
{
using (var osw1 = new ObjectSafeWrapper(oldTree, repo, true))
using (var osw2 = new ObjectSafeWrapper(newTree, repo, true))
using (var osw1 = new ObjectSafeWrapper(oldTree, repo, true, throwIfMissing: true))
using (var osw2 = new ObjectSafeWrapper(newTree, repo, true, throwIfMissing: true))
{
git_diff* diff;
int res = NativeMethods.git_diff_tree_to_tree(out diff, repo, osw1.ObjectPtr, osw2.ObjectPtr, options);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册