Skip to content

Commit 4bb95ac

Browse files
committed
Uninstall skills which were removed from the upstream source
1 parent 30fb4cd commit 4bb95ac

1 file changed

Lines changed: 21 additions & 1 deletion

File tree

cmd/skills.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cmd
33
import (
44
"errors"
55
"fmt"
6+
"os"
67
"strings"
78
"time"
89

@@ -331,16 +332,31 @@ func updateSource(manifest *skill.Manifest, repo string) error {
331332
defer cleanup()
332333

333334
fmt.Println()
335+
var removed []string
334336
for _, s := range installed {
335337
entry := &skill.SkillEntry{
336338
Name: s.Name,
337339
Description: s.Description,
338340
Path: s.Path,
339341
}
340342
if err := installSkillEntry(manifest, entry, repo, dir); err != nil {
343+
if errors.Is(err, os.ErrNotExist) {
344+
removed = append(removed, s.Name)
345+
continue
346+
}
341347
terminal.Errorf("Failed to update %q: %v", s.Name, err)
342348
}
343349
}
350+
if len(removed) > 0 {
351+
for _, name := range removed {
352+
skill.Uninstall(name)
353+
manifest.RemoveSkill(name)
354+
}
355+
if err := manifest.Save(); err != nil {
356+
return fmt.Errorf("failed to update manifest after removing skills: %w", err)
357+
}
358+
terminal.Warningf("The following skills were removed from upstream: %s", strings.Join(removed, ", "))
359+
}
344360
return nil
345361
}
346362

@@ -359,7 +375,11 @@ func installSkillEntry(manifest *skill.Manifest, entry *skill.SkillEntry, repo s
359375
targets, err = skill.Install(entry.Name, repo, entry.Path)
360376
}
361377
if err != nil {
362-
spinner.Error(fmt.Sprintf("Failed to install skill %q", entry.Name))
378+
if errors.Is(err, os.ErrNotExist) {
379+
spinner.Stop()
380+
} else {
381+
spinner.Error(fmt.Sprintf("Failed to install skill %q", entry.Name))
382+
}
363383
return fmt.Errorf("failed to install skill %q: %w", entry.Name, err)
364384
}
365385

0 commit comments

Comments
 (0)