From 53ebf958bac6765b3a705a2dd20962a2ec7168a4 Mon Sep 17 00:00:00 2001 From: Fabian Schmied Date: Wed, 22 May 2019 11:54:11 +0200 Subject: [PATCH] Fix #5944 by fixing --follow and revision reading a306eb6 by mistake removed the "--follow" option when getting the git log for history. This is reverted by this commit. 1f6b0ca by mistake removed parsing of the file name data into GitRevision.Name. This is also reverted by this commit. Together, these should fix rename tracking in the file history. --- GitCommands/RevisionReader.cs | 17 +++++++++++++++-- GitUI/CommandsDialogs/FormFileHistory.cs | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/GitCommands/RevisionReader.cs b/GitCommands/RevisionReader.cs index 8835773ccb6..715b4ab15bd 100644 --- a/GitCommands/RevisionReader.cs +++ b/GitCommands/RevisionReader.cs @@ -28,6 +28,7 @@ public enum RefFilterOptions public sealed class RevisionReader : IDisposable { + private const string EndOfBody = "1DEA7CC4-FB39-450A-8DDF-762FCEA28B05"; private const string FullFormat = // These header entries can all be decoded from the bytes directly. @@ -47,7 +48,7 @@ public sealed class RevisionReader : IDisposable /* Committer name */ "%cN%n" + /* Committer email */ "%cE%n" + /* Commit subject */ "%s%n%n" + - /* Commit body */ "%b"; + /* Commit body */ "%b" + EndOfBody; private readonly CancellationTokenSequence _cancellationTokenSequence = new CancellationTokenSequence(); @@ -380,7 +381,7 @@ DateTime ParseUnixDateTime() #endregion - #region Encoded string values (names, emails, subject, body) + #region Encoded string values (names, emails, subject, body, name) // Finally, decode the names, email, subject and body strings using the required text encoding var s = encoding.GetString(array, offset, lastOffset - offset); @@ -415,6 +416,17 @@ DateTime ParseUnixDateTime() return false; } + var indexOfEndOfBody = body.LastIndexOf(EndOfBody, StringComparison.InvariantCulture); + + string additionalData = null; + var bodyContainsAdditionalData = body.Length > indexOfEndOfBody + EndOfBody.Length; + if (bodyContainsAdditionalData) + { + additionalData = body.Substring(indexOfEndOfBody + EndOfBody.Length).TrimStart(); + } + + body = body.Substring(0, indexOfEndOfBody); + #endregion revision = new GitRevision(objectId) @@ -430,6 +442,7 @@ DateTime ParseUnixDateTime() MessageEncoding = encodingName, Subject = subject, Body = body, + Name = additionalData, HasMultiLineMessage = !ReferenceEquals(subject, body), HasNotes = false }; diff --git a/GitUI/CommandsDialogs/FormFileHistory.cs b/GitUI/CommandsDialogs/FormFileHistory.cs index acb1488202d..73f8df50e0f 100644 --- a/GitUI/CommandsDialogs/FormFileHistory.cs +++ b/GitUI/CommandsDialogs/FormFileHistory.cs @@ -237,6 +237,7 @@ private void LoadFileHistory() { "--format=\"%n\"", "--name-only", + "--follow", GitCommandHelpers.FindRenamesAndCopiesOpts(), "--", fileName.Quote()