in src/authoring/Elastic.Documentation.Refactor/Move.cs [104:163]
private async Task<int> MoveAndRewriteLinks(bool isDryRun, Cancel ctx)
{
foreach (var (changeSet, linkModifications) in _linkModifications)
{
foreach (var (oldLink, newLink, sourceFile, lineNumber, columnNumber) in linkModifications)
{
_logger.LogInformation(
"Change \e[31m{OldLink}\e[0m to \e[32m{NewLink}\e[0m at \e[34m{SourceFile}:{LineNumber}:{Column}\e[0m",
oldLink,
newLink,
sourceFile == changeSet.From.FullName && !isDryRun ? changeSet.To.FullName : sourceFile,
lineNumber,
columnNumber
);
}
}
if (isDryRun)
return 0;
try
{
foreach (var (changeSet, changes) in _changes)
{
foreach (var (filePath, _, newContent) in changes)
{
if (!filePath.Directory!.Exists)
_ = writeFileSystem.Directory.CreateDirectory(filePath.Directory.FullName);
await writeFileSystem.File.WriteAllTextAsync(filePath.FullName, newContent, ctx);
}
var targetDirectory = Path.GetDirectoryName(changeSet.To.FullName);
_ = readFileSystem.Directory.CreateDirectory(targetDirectory!);
readFileSystem.File.Move(changeSet.From.FullName, changeSet.To.FullName);
}
}
catch (Exception)
{
if (_changes.Count > 1)
{
_logger.LogError("An error occurred while moving files. Can only revert a single file move at this time");
throw;
}
foreach (var (changeSet, changes) in _changes)
{
foreach (var (filePath, originalContent, _) in changes)
await writeFileSystem.File.WriteAllTextAsync(filePath.FullName, originalContent, ctx);
if (!changeSet.To.Exists)
writeFileSystem.File.Move(changeSet.To.FullName, changeSet.From.FullName);
else
writeFileSystem.File.Copy(changeSet.To.FullName, changeSet.From.FullName, overwrite: true);
_logger.LogError("An error occurred while moving files. Reverting changes");
}
throw;
}
return 0;
}