mirror of
https://fastgit.cc/github.com/sourcegit-scm/sourcegit
synced 2026-04-20 21:01:06 +08:00
feature: reorder fixup commits to its right position when loading commits for interactive rebase (#588)
Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
@@ -12,7 +12,7 @@ namespace SourceGit.Commands
|
||||
|
||||
WorkingDirectory = repo;
|
||||
Context = repo;
|
||||
Args = $"log --topo-order --cherry-pick --right-only --no-merges --no-show-signature --decorate=full --format=\"%H%n%P%n%D%n%aN±%aE%n%at%n%cN±%cE%n%ct%n%B%n{_boundary}\" {on}...HEAD";
|
||||
Args = $"log --topo-order --cherry-pick --right-only --no-merges --no-show-signature --decorate=full --format=\"%H%n%P%n%D%n%aN±%aE%n%at%n%cN±%cE%n%ct%n%s%n%B%n{_boundary}\" {on}...HEAD";
|
||||
}
|
||||
|
||||
public async Task<List<Models.InteractiveCommit>> GetResultAsync()
|
||||
@@ -58,6 +58,9 @@ namespace SourceGit.Commands
|
||||
case 6:
|
||||
current.Commit.CommitterTime = ulong.Parse(line);
|
||||
break;
|
||||
case 7:
|
||||
current.Commit.Subject = line;
|
||||
break;
|
||||
default:
|
||||
var boundary = rs.StdOut.IndexOf(_boundary, end + 1, StringComparison.Ordinal);
|
||||
if (boundary > end)
|
||||
|
||||
@@ -172,10 +172,41 @@ namespace SourceGit.ViewModels
|
||||
.ConfigureAwait(false);
|
||||
|
||||
var list = new List<InteractiveRebaseItem>();
|
||||
var fixups = new List<InteractiveRebaseItem>();
|
||||
for (var i = 0; i < commits.Count; i++)
|
||||
{
|
||||
var c = commits[i];
|
||||
list.Add(new InteractiveRebaseItem(commits.Count - i, c.Commit, c.Message));
|
||||
var item = new InteractiveRebaseItem(commits.Count - i, c.Commit, c.Message);
|
||||
if (c.Commit.Subject.StartsWith("fixup! ", StringComparison.Ordinal) && item.OriginalOrder > 1)
|
||||
{
|
||||
fixups.Add(item);
|
||||
continue;
|
||||
}
|
||||
|
||||
var reordered = new List<InteractiveRebaseItem>();
|
||||
foreach (var f in fixups)
|
||||
{
|
||||
if (c.Commit.Subject.StartsWith(f.Commit.Subject.Substring(7), StringComparison.Ordinal))
|
||||
{
|
||||
f.Action = Models.InteractiveRebaseAction.Fixup;
|
||||
reordered.Add(f);
|
||||
list.Add(f);
|
||||
}
|
||||
}
|
||||
fixups.RemoveAll(x => reordered.Contains(x));
|
||||
list.Add(item);
|
||||
}
|
||||
|
||||
foreach (var f in fixups)
|
||||
{
|
||||
for (var i = 0; i < list.Count; i++)
|
||||
{
|
||||
if (f.OriginalOrder > list[i].OriginalOrder)
|
||||
{
|
||||
list.Insert(i, f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var selected = list.Count > 0 ? list[0] : null;
|
||||
|
||||
Reference in New Issue
Block a user