enhance: try to get stopped at revision info from .git/rebase-merge/head

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo 2025-03-07 11:26:17 +08:00
parent 773e27fda7
commit ca6d41ee60
No known key found for this signature in database
2 changed files with 36 additions and 10 deletions

View file

@ -0,0 +1,21 @@
namespace SourceGit.Commands
{
public class QueryRevisionByRefName : Command
{
public QueryRevisionByRefName(string repo, string refname)
{
WorkingDirectory = repo;
Context = repo;
Args = $"rev-parse {refname}";
}
public string Result()
{
var rs = ReadToEnd();
if (rs.IsSuccess && !string.IsNullOrEmpty(rs.StdOut))
return rs.StdOut.Trim();
return null;
}
}
}

View file

@ -107,19 +107,24 @@ namespace SourceGit.ViewModels
{
_gitDir = repo.GitDir;
var stoppedSHAPath = Path.Combine(repo.GitDir, "rebase-merge", "stopped-sha");
if (File.Exists(stoppedSHAPath))
{
var stoppedSHA = File.ReadAllText(stoppedSHAPath).Trim();
StoppedAt = new Commands.QuerySingleCommit(repo.FullPath, stoppedSHA).Result() ?? new Models.Commit() { SHA = stoppedSHA };
}
var ontoSHA = File.ReadAllText(Path.Combine(repo.GitDir, "rebase-merge", "onto")).Trim();
Onto = new Commands.QuerySingleCommit(repo.FullPath, ontoSHA).Result() ?? new Models.Commit() { SHA = ontoSHA };
HeadName = File.ReadAllText(Path.Combine(repo.GitDir, "rebase-merge", "head-name")).Trim();
if (HeadName.StartsWith("refs/heads/"))
HeadName = HeadName.Substring(11);
else if (HeadName.StartsWith("refs/tags/"))
HeadName = HeadName.Substring(10);
var stoppedSHAPath = Path.Combine(repo.GitDir, "rebase-merge", "stopped-sha");
var stoppedSHA = string.Empty;
if (File.Exists(stoppedSHAPath))
stoppedSHA = File.ReadAllText(stoppedSHAPath).Trim();
else
stoppedSHA = new Commands.QueryRevisionByRefName(repo.FullPath, HeadName).Result();
if (!string.IsNullOrEmpty(stoppedSHA))
StoppedAt = new Commands.QuerySingleCommit(repo.FullPath, stoppedSHA).Result() ?? new Models.Commit() { SHA = stoppedSHA };
var ontoSHA = File.ReadAllText(Path.Combine(repo.GitDir, "rebase-merge", "onto")).Trim();
Onto = new Commands.QuerySingleCommit(repo.FullPath, ontoSHA).Result() ?? new Models.Commit() { SHA = ontoSHA };
}
public override bool Continue()