代码拉取完成,页面将自动刷新
using System.IO.Abstractions;
using System.Text;
using JetBrains.Annotations;
namespace GitCommands
{
public interface ICommitMessageManager
{
/// <summary>
/// Reads/stores whether the previous commit shall be amended (if AppSettings.RememberAmendCommitState).
/// </summary>
bool AmendState { get; set; }
/// <summary>
/// The pathname of the file where a prepared (non-merge) commit message is stored.
/// </summary>
string CommitMessagePath { get; }
/// <summary>
/// Returns whether .git/MERGE_MSG exists.
/// </summary>
bool IsMergeCommit { get; }
/// <summary>
/// Reads/stores the prepared commit message from/in .git/MERGE_MSG if it exists or else in .git/COMMITMESSAGE.
/// </summary>
string MergeOrCommitMessage { get; set; }
/// <summary>
/// Deletes .git/COMMITMESSAGE and the file with the AmendState.
/// </summary>
void ResetCommitMessage();
}
public sealed class CommitMessageManager : ICommitMessageManager
{
private readonly string _amendSaveStatePath;
private readonly string _commitMessagePath;
private readonly string _mergeMessagePath;
private Encoding _commitEncoding;
private IFileSystem _fileSystem;
[CanBeNull]
private string _overriddenCommitMessage;
public CommitMessageManager(string workingDirGitDir, Encoding commitEncoding, string overriddenCommitMessage = null)
: this(workingDirGitDir, commitEncoding, new FileSystem(), overriddenCommitMessage)
{
}
private CommitMessageManager(string workingDirGitDir, Encoding commitEncoding, IFileSystem fileSystem, string overriddenCommitMessage = null)
{
_fileSystem = fileSystem;
_commitEncoding = commitEncoding;
_amendSaveStatePath = GetFilePath(workingDirGitDir, "GitExtensions.amend");
_commitMessagePath = GetFilePath(workingDirGitDir, "COMMITMESSAGE");
_mergeMessagePath = GetFilePath(workingDirGitDir, "MERGE_MSG");
_overriddenCommitMessage = overriddenCommitMessage;
}
public bool AmendState
{
get
{
bool amendState = false;
if (AppSettings.RememberAmendCommitState && _fileSystem.File.Exists(_amendSaveStatePath))
{
bool.TryParse(_fileSystem.File.ReadAllText(_amendSaveStatePath), out amendState);
}
return amendState;
}
set
{
if (AppSettings.RememberAmendCommitState && value)
{
_fileSystem.File.WriteAllText(_amendSaveStatePath, true.ToString());
}
else
{
_fileSystem.File.Delete(_amendSaveStatePath);
}
}
}
public string CommitMessagePath => _commitMessagePath;
public bool IsMergeCommit => _fileSystem.File.Exists(_mergeMessagePath);
public string MergeOrCommitMessage
{
get
{
if (_overriddenCommitMessage != null)
{
return _overriddenCommitMessage;
}
var (file, exists) = GetMergeOrCommitMessagePath();
return exists ? _fileSystem.File.ReadAllText(file, _commitEncoding) : string.Empty;
}
set
{
var content = value ?? string.Empty;
// do not remember commit message when they have been specified by the command line
if (content != _overriddenCommitMessage)
{
_fileSystem.File.WriteAllText(GetMergeOrCommitMessagePath().FilePath, content, _commitEncoding);
}
}
}
public void ResetCommitMessage()
{
_overriddenCommitMessage = null;
_fileSystem.File.Delete(_commitMessagePath);
_fileSystem.File.Delete(_amendSaveStatePath);
}
private string GetFilePath(string workingDirGitDir, string fileName) => _fileSystem.Path.Combine(workingDirGitDir, fileName);
private (string FilePath, bool FileExists) GetMergeOrCommitMessagePath()
{
if (IsMergeCommit)
{
return (_mergeMessagePath, FileExists: true);
}
return (_commitMessagePath, _fileSystem.File.Exists(_commitMessagePath));
}
internal class TestAccessor
{
internal static CommitMessageManager Construct(string workingDirGitDir, Encoding commitEncoding, IFileSystem fileSystem, string overriddenCommitMessage)
=> new CommitMessageManager(workingDirGitDir, commitEncoding, fileSystem, overriddenCommitMessage);
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。