Skip to content

Commit 220741c

Browse files
authored
Merge pull request #143 from TraGicCode/chore/handle-config-updates-without-modifying-users-yaml-structure
Change how current-transport and removal of a transport updates the file. This is an attempt to preserve formatting from user.
2 parents 6c6909e + 3ff9cd3 commit 220741c

File tree

4 files changed

+56
-6
lines changed

4 files changed

+56
-6
lines changed

src/BuslyCLI.Console/Commands/Transport/DeleteTransportCommand.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,11 @@ public override async Task<int> ExecuteAsync(CommandContext context, DeleteTrans
1515
{
1616
if (nsbConfiguration.CurrentTransport.ToLower() == targetTransport)
1717
{
18-
nsbConfiguration.CurrentTransport = "";
18+
await nservicebusConfiguration.UpdateCurrentTransportAsync(settings.Config.Path, "");
1919
console.WriteLine("This removed your active transport, use \"nservicebus transport set\" to select a different one.");
2020
}
21-
nsbConfiguration.Transports = nsbConfiguration.Transports.Where(x => x.Name.ToLower() != targetTransport).ToList();
21+
await nservicebusConfiguration.RemoveTransportAsync(settings.Config.Path, targetTransport);
2222
console.WriteLine($"deleted transport named {targetTransport} from {settings.Config.Path}");
23-
await nservicebusConfiguration.PersistConfiguration(settings.Config.Path, nsbConfiguration);
2423
}
2524
else
2625
{

src/BuslyCLI.Console/Commands/Transport/SetTransportCommand.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@ public override async Task<int> ExecuteAsync(CommandContext context, SetTranspor
1313
var targetTransport = settings.TransportName.ToLower();
1414
if (nsbConfiguration.Transports.Select(x => x.Name.ToLower()).Contains(targetTransport))
1515
{
16-
nsbConfiguration.CurrentTransport = targetTransport;
16+
await nservicebusConfiguration.UpdateCurrentTransportAsync(settings.Config.Path, targetTransport);
1717
console.WriteLine($"Switched to transport \"{targetTransport}\".");
18-
await nservicebusConfiguration.PersistConfiguration(settings.Config.Path, nsbConfiguration);
1918
}
2019
else
2120
{

src/BuslyCLI.Console/Config/INServiceBusConfiguration.cs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ public interface INServiceBusConfiguration
1010
Task<NServiceBusConfig> GetUnValidatedConfigurationAsync(string path);
1111

1212
Task PersistConfiguration(string path, NServiceBusConfig config);
13+
Task UpdateCurrentTransportAsync(string path, string newTransport);
14+
Task RemoveTransportAsync(string path, string transportToRemove);
1315
}
1416

1517
public class NServiceBusConfiguration(IDeserializer yamlDeserializer, ISerializer yamlSerializer, IValidator<NServiceBusConfig> validator) : INServiceBusConfiguration
@@ -45,4 +47,55 @@ public async Task PersistConfiguration(string path, NServiceBusConfig config)
4547
var yaml = yamlSerializer.Serialize(config);
4648
await File.WriteAllTextAsync(path, yaml);
4749
}
50+
51+
public async Task UpdateCurrentTransportAsync(string path, string newTransport)
52+
{
53+
// Load the YAML
54+
var lines = await File.ReadAllLinesAsync(path);
55+
56+
for (int i = 0; i < lines.Length; i++)
57+
{
58+
var line = lines[i].TrimStart();
59+
60+
if (line.StartsWith("current-transport:"))
61+
{
62+
int indent = lines[i].Length - line.Length; // preserve original indent
63+
64+
lines[i] =
65+
new string(' ', indent) +
66+
"current-transport: " + newTransport;
67+
68+
break;
69+
}
70+
}
71+
72+
await File.WriteAllLinesAsync(path, lines);
73+
}
74+
75+
public async Task RemoveTransportAsync(string path, string transportToRemove)
76+
{
77+
var lines = (await File.ReadAllLinesAsync(path)).ToList();
78+
79+
for (int i = 0; i < lines.Count; i++)
80+
{
81+
if (lines[i].TrimStart().StartsWith($"- name: {transportToRemove}"))
82+
{
83+
int indent = lines[i].TakeWhile(char.IsWhiteSpace).Count();
84+
int j = i + 1;
85+
86+
// Continue deleting child lines until indentation decreases
87+
while (j < lines.Count &&
88+
lines[j].TakeWhile(char.IsWhiteSpace).Count() > indent)
89+
{
90+
j++;
91+
}
92+
93+
// Remove the array item block
94+
lines.RemoveRange(i, j - i);
95+
break;
96+
}
97+
}
98+
99+
await File.WriteAllLinesAsync(path, lines);
100+
}
48101
}

src/BuslyCLI.Console/Spectre/AppConfiguration.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using BuslyCLI.Commands.Transport;
66
using Spectre.Console;
77
using Spectre.Console.Cli;
8-
using YamlDotNet.Core;
98

109
namespace BuslyCLI.Spectre;
1110

0 commit comments

Comments
 (0)