Skip to content

Commit

Permalink
Merge pull request gitextensions#7399 from gerhardol/bugfix/i7316-com…
Browse files Browse the repository at this point in the history
…mit-delete-dir

CommitMessage: Only save if directory exists
  • Loading branch information
msftbot[bot] authored Nov 11, 2019
2 parents 607c426 + aac49bb commit 4769a5a
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
12 changes: 10 additions & 2 deletions GitCommands/CommitMessageManager.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.IO.Abstractions;
using System.IO;
using System.IO.Abstractions;
using System.Text;
using JetBrains.Annotations;

Expand Down Expand Up @@ -108,7 +109,14 @@ public string MergeOrCommitMessage
// do not remember commit message when they have been specified by the command line
if (content != _overriddenCommitMessage)
{
_fileSystem.File.WriteAllText(GetMergeOrCommitMessagePath().FilePath, content, _commitEncoding);
var path = GetMergeOrCommitMessagePath().FilePath;
if (!_fileSystem.Directory.Exists(Path.GetDirectoryName(path)))
{
// The repo no longer exists
return;
}

_fileSystem.File.WriteAllText(path, content, _commitEncoding);
}
}
}
Expand Down
21 changes: 21 additions & 0 deletions UnitTests/GitCommandsTests/CommitMessageManagerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public class CommitMessageManagerTests
private readonly bool _rememberAmendCommitState;

private FileBase _file;
private DirectoryBase _directory;
private IFileSystem _fileSystem;
private CommitMessageManager _manager;

Expand All @@ -43,12 +44,14 @@ public void Setup()
_file = Substitute.For<FileBase>();
_file.ReadAllText(_commitMessagePath, _encoding).Returns(_commitMessage);
_file.ReadAllText(_mergeMessagePath, _encoding).Returns(_mergeMessage);
_directory = Substitute.For<DirectoryBase>();

var path = Substitute.For<PathBase>();
path.Combine(Arg.Any<string>(), Arg.Any<string>()).Returns(x => Path.Combine((string)x[0], (string)x[1]));

_fileSystem = Substitute.For<IFileSystem>();
_fileSystem.File.Returns(_file);
_fileSystem.Directory.Returns(_directory);
_fileSystem.Path.Returns(path);

_manager = new CommitMessageManager(_workingDirGitDir, _encoding, _fileSystem, overriddenCommitMessage: null);
Expand Down Expand Up @@ -238,6 +241,7 @@ public void MergeOrCommitMessage_should_write_merge_message_if_exists()
_file.When(x => x.WriteAllText(_mergeMessagePath, _newMessage, _encoding)).Do(_ => correctlyWritten = true);
_file.Exists(_commitMessagePath).Returns(true);
_file.Exists(_mergeMessagePath).Returns(true);
_directory.Exists(Path.GetDirectoryName(_commitMessagePath)).Returns(true);

_manager.MergeOrCommitMessage = _newMessage;

Expand Down Expand Up @@ -265,6 +269,7 @@ public void MergeOrCommitMessage_should_write_commit_message_if_exists_and_no_me
_file.When(x => x.WriteAllText(_commitMessagePath, _newMessage, _encoding)).Do(_ => correctlyWritten = true);
_file.Exists(_commitMessagePath).Returns(true);
_file.Exists(_mergeMessagePath).Returns(false);
_directory.Exists(Path.GetDirectoryName(_commitMessagePath)).Returns(true);

_manager.MergeOrCommitMessage = _newMessage;

Expand All @@ -278,6 +283,7 @@ public void MergeOrCommitMessage_should_write_commit_message_if_no_file_exists()
_file.When(x => x.WriteAllText(_commitMessagePath, _newMessage, _encoding)).Do(_ => correctlyWritten = true);
_file.Exists(_commitMessagePath).Returns(false);
_file.Exists(_mergeMessagePath).Returns(false);
_directory.Exists(Path.GetDirectoryName(_commitMessagePath)).Returns(true);

_manager.MergeOrCommitMessage = _newMessage;

Expand All @@ -291,12 +297,27 @@ public void MergeOrCommitMessage_should_write_empty_message_if_null()
_file.When(x => x.WriteAllText(_commitMessagePath, string.Empty, _encoding)).Do(_ => correctlyWritten = true);
_file.Exists(_commitMessagePath).Returns(false);
_file.Exists(_mergeMessagePath).Returns(false);
_directory.Exists(Path.GetDirectoryName(_commitMessagePath)).Returns(true);

_manager.MergeOrCommitMessage = null;

Assert.That(correctlyWritten);
}

[Test]
public void MergeOrCommitMessage_should_not_write_if_dir_no_longer_exists()
{
bool correctlyWritten = false;
_file.When(x => x.WriteAllText(_commitMessagePath, string.Empty, _encoding)).Do(_ => correctlyWritten = true);
_file.Exists(_commitMessagePath).Returns(false);
_file.Exists(_mergeMessagePath).Returns(false);
_directory.Exists(Path.GetDirectoryName(_commitMessagePath)).Returns(false);

_manager.MergeOrCommitMessage = null;

Assert.That(!correctlyWritten);
}

[Test]
public void ResetCommitMessage()
{
Expand Down

0 comments on commit 4769a5a

Please sign in to comment.