diff --git a/LibGit2Sharp.Tests/FilterBranchFixture.cs b/LibGit2Sharp.Tests/FilterBranchFixture.cs index dfe14329e..aed628a15 100644 --- a/LibGit2Sharp.Tests/FilterBranchFixture.cs +++ b/LibGit2Sharp.Tests/FilterBranchFixture.cs @@ -162,7 +162,8 @@ public void CanRewriteAuthorOfCommits() AssertSucceedingButNotError(); - var nonBackedUpRefs = repo.Refs.Where(x => !x.CanonicalName.StartsWith("refs/original")); + var nonBackedUpRefs = repo.Refs.Where( + x => !x.CanonicalName.StartsWith("refs/original/") && !x.CanonicalName.StartsWith("refs/notes/")); Assert.Empty(repo.Commits.QueryBy(new CommitFilter { Since = nonBackedUpRefs }) .Where(c => c.Author.Name != "Ben Straub")); } @@ -801,6 +802,26 @@ public void HandlesNameRewritingOfChainedTags() Assert.Equal(annotationB, backedUpTag.ResolveToDirectReference().Target); } + [Fact] + public void RewritingNotesHasNoEffect() + { + var notesRefsRetriever = new Func>(() => repo.Refs.Where(r => r.CanonicalName.StartsWith("refs/notes/"))); + var originalNotesRefs = notesRefsRetriever().ToList(); + var commits = repo.Commits.QueryBy(new CommitFilter { Since = originalNotesRefs }).ToArray(); + + repo.Refs.RewriteHistory(new RewriteHistoryOptions + { + OnError = OnError, + OnSucceeding = OnSucceeding, + CommitHeaderRewriter = + c => CommitRewriteInfo.From(c, author: Constants.Signature), + }, commits); + + AssertSucceedingButNotError(); + + Assert.Equal(originalNotesRefs.OrderBy(r => r.CanonicalName), notesRefsRetriever().OrderBy(r => r.CanonicalName)); + } + private static string TagNameRewriter(string name, bool isAnnotated, string target) { const string tagPrefix = "refs/tags/"; diff --git a/LibGit2Sharp/Core/HistoryRewriter.cs b/LibGit2Sharp/Core/HistoryRewriter.cs index 15686ecc8..d520b3c23 100644 --- a/LibGit2Sharp/Core/HistoryRewriter.cs +++ b/LibGit2Sharp/Core/HistoryRewriter.cs @@ -59,7 +59,11 @@ public void Execute() // before A. foreach (var reference in refsToRewrite.OrderBy(ReferenceDepth)) { - // TODO: Check how rewriting of notes actually behaves + // TODO: Rewrite refs/notes/* properly + if (reference.CanonicalName.StartsWith("refs/notes/")) + { + continue; + } RewriteReference(reference); }