mirror of
https://github.com/Adembc/lazyssh.git
synced 2026-07-14 12:13:34 +02:00
fix: preserve trailing blank lines when adding SSH config fields (#66)
This commit is contained in:
@@ -98,7 +98,6 @@ func (r *Repository) createHostFromServer(server domain.Server) *ssh_config.Host
|
|||||||
{Str: server.Alias},
|
{Str: server.Alias},
|
||||||
},
|
},
|
||||||
Nodes: make([]ssh_config.Node, 0),
|
Nodes: make([]ssh_config.Node, 0),
|
||||||
LeadingSpace: 4,
|
|
||||||
EOLComment: "Added by lazyssh",
|
EOLComment: "Added by lazyssh",
|
||||||
SpaceBeforeComment: strings.Repeat(" ", 4),
|
SpaceBeforeComment: strings.Repeat(" ", 4),
|
||||||
}
|
}
|
||||||
@@ -200,7 +199,49 @@ func (r *Repository) addKVNodeIfNotEmpty(host *ssh_config.Host, key, value strin
|
|||||||
Value: value,
|
Value: value,
|
||||||
LeadingSpace: 4,
|
LeadingSpace: 4,
|
||||||
}
|
}
|
||||||
host.Nodes = append(host.Nodes, kvNode)
|
r.insertKVNodeAfterLastKV(host, kvNode)
|
||||||
|
}
|
||||||
|
|
||||||
|
// insertKVNodeAfterLastKV inserts a KV node immediately after the last existing KV node in the host.
|
||||||
|
// This preserves any trailing non-KV nodes (blank lines, comments) that may exist after the host's
|
||||||
|
// configuration block, preventing formatting shifts when adding new fields to a host entry.
|
||||||
|
//
|
||||||
|
// Example: If a host block has trailing blank lines separating it from the next host entry,
|
||||||
|
// this function ensures new fields are inserted before those blank lines, maintaining the
|
||||||
|
// visual separation between host blocks.
|
||||||
|
func (r *Repository) insertKVNodeAfterLastKV(host *ssh_config.Host, kvNode *ssh_config.KV) {
|
||||||
|
// STEP 1: Find the last KV node (search backwards)
|
||||||
|
lastKVIndex := -1
|
||||||
|
for i := len(host.Nodes) - 1; i >= 0; i-- {
|
||||||
|
if _, ok := host.Nodes[i].(*ssh_config.KV); ok {
|
||||||
|
lastKVIndex = i
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// STEP 2: Handle case where no KV nodes exist
|
||||||
|
if lastKVIndex == -1 {
|
||||||
|
if len(host.Nodes) == 0 {
|
||||||
|
// Case A: Empty host - just append
|
||||||
|
host.Nodes = append(host.Nodes, kvNode)
|
||||||
|
} else {
|
||||||
|
// Case B: Only comments/blanks exist - prepend before them
|
||||||
|
host.Nodes = append([]ssh_config.Node{kvNode}, host.Nodes...)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// STEP 3: We found KV nodes - insert after the last one
|
||||||
|
insertAt := lastKVIndex + 1
|
||||||
|
|
||||||
|
if insertAt == len(host.Nodes) {
|
||||||
|
// Case C: Last KV is at the end - just append
|
||||||
|
host.Nodes = append(host.Nodes, kvNode)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Case D: Last KV has trailing nodes (blanks/comments) - insert between them
|
||||||
|
host.Nodes = append(host.Nodes[:insertAt], append([]ssh_config.Node{kvNode}, host.Nodes[insertAt:]...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// removeNodesByKey removes all nodes with the specified key from the nodes slice
|
// removeNodesByKey removes all nodes with the specified key from the nodes slice
|
||||||
@@ -337,12 +378,10 @@ func (r *Repository) updateHostNodes(host *ssh_config.Host, newServer domain.Ser
|
|||||||
|
|
||||||
// updateOrAddKVNode updates an existing key-value node or adds a new one if it doesn't exist.
|
// updateOrAddKVNode updates an existing key-value node or adds a new one if it doesn't exist.
|
||||||
func (r *Repository) updateOrAddKVNode(host *ssh_config.Host, key, newValue string) {
|
func (r *Repository) updateOrAddKVNode(host *ssh_config.Host, key, newValue string) {
|
||||||
keyLower := strings.ToLower(key)
|
|
||||||
|
|
||||||
// Try to update existing node
|
// Try to update existing node
|
||||||
for _, node := range host.Nodes {
|
for _, node := range host.Nodes {
|
||||||
kvNode, ok := node.(*ssh_config.KV)
|
kvNode, ok := node.(*ssh_config.KV)
|
||||||
if ok && strings.EqualFold(kvNode.Key, keyLower) {
|
if ok && strings.EqualFold(kvNode.Key, key) {
|
||||||
kvNode.Value = newValue
|
kvNode.Value = newValue
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -354,7 +393,7 @@ func (r *Repository) updateOrAddKVNode(host *ssh_config.Host, key, newValue stri
|
|||||||
Value: newValue,
|
Value: newValue,
|
||||||
LeadingSpace: 4,
|
LeadingSpace: 4,
|
||||||
}
|
}
|
||||||
host.Nodes = append(host.Nodes, kvNode)
|
r.insertKVNodeAfterLastKV(host, kvNode)
|
||||||
}
|
}
|
||||||
|
|
||||||
// removeKVNode removes a key-value node from the host if it exists.
|
// removeKVNode removes a key-value node from the host if it exists.
|
||||||
|
|||||||
Reference in New Issue
Block a user