From b54853140a980c421104135cc89ed8f31eb09e03 Mon Sep 17 00:00:00 2001 From: boombuler Date: Sat, 1 Oct 2016 07:37:20 +0200 Subject: [PATCH] new command `plugin list` this command shows all currently installed plugins and their verion --- cmd/micro/autocomplete.go | 2 +- cmd/micro/command.go | 14 ++++++++++++++ cmd/micro/pluginmanager.go | 13 +++++++------ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/cmd/micro/autocomplete.go b/cmd/micro/autocomplete.go index 52055dc2..47aeca73 100644 --- a/cmd/micro/autocomplete.go +++ b/cmd/micro/autocomplete.go @@ -151,7 +151,7 @@ func PluginComplete(complete Completion, input string) (chosen string, suggestio } func PluginCmdComplete(input string) (chosen string, suggestions []string) { - for _, cmd := range []string{"install", "remove", "search", "update"} { + for _, cmd := range []string{"install", "remove", "search", "update", "list"} { if strings.HasPrefix(cmd, input) { suggestions = append(suggestions, cmd) } diff --git a/cmd/micro/command.go b/cmd/micro/command.go index 22ebafc9..4adb6948 100644 --- a/cmd/micro/command.go +++ b/cmd/micro/command.go @@ -2,6 +2,7 @@ package main import ( "bytes" + "fmt" "io" "io/ioutil" "os" @@ -118,6 +119,19 @@ func PluginCmd(args []string) { } case "update": UpdatePlugins(args[1:]) + case "list": + plugins := GetInstalledVersions(false) + messenger.AddLog("----------------") + messenger.AddLog("The following plugins are currently installed:\n") + for _, p := range plugins { + messenger.AddLog(fmt.Sprintf("%s (%s)", p.pack.Name, p.Version)) + } + messenger.AddLog("----------------") + if len(plugins) > 0 { + if CurView().Type != vtLog { + ToggleLog([]string{}) + } + } case "search": plugins := SearchPlugin(args[1:]) messenger.Message(len(plugins), " plugins found") diff --git a/cmd/micro/pluginmanager.go b/cmd/micro/pluginmanager.go index bb330682..837ef659 100644 --- a/cmd/micro/pluginmanager.go +++ b/cmd/micro/pluginmanager.go @@ -261,7 +261,7 @@ func (pp PluginPackage) Match(text string) bool { // IsInstallable returns true if the package can be installed. func (pp PluginPackage) IsInstallable() bool { - _, err := GetAllPluginPackages().Resolve(GetInstalledVersions(), PluginDependencies{ + _, err := GetAllPluginPackages().Resolve(GetInstalledVersions(true), PluginDependencies{ &PluginDependency{ Name: pp.Name, Range: semver.Range(func(v semver.Version) bool { return true }), @@ -310,9 +310,10 @@ func newStaticPluginVersion(name, version string) *PluginVersion { // GetInstalledVersions returns a list of all currently installed plugins including an entry for // micro itself. This can be used to resolve dependencies. -func GetInstalledVersions() PluginVersions { - result := PluginVersions{ - newStaticPluginVersion(CorePluginName, Version), +func GetInstalledVersions(withCore bool) PluginVersions { + result := PluginVersions{} + if withCore { + result = append(result, newStaticPluginVersion(CorePluginName, Version)) } for _, name := range loadedPlugins { @@ -460,7 +461,7 @@ func (all PluginPackages) Resolve(selectedVersions PluginVersions, open PluginDe func (versions PluginVersions) install() { anyInstalled := false - currentlyInstalled := GetInstalledVersions() + currentlyInstalled := GetInstalledVersions(true) for _, sel := range versions { if sel.pack.Name != CorePluginName { @@ -498,7 +499,7 @@ func UninstallPlugin(name string) { } func (pl PluginPackage) Install() { - selected, err := GetAllPluginPackages().Resolve(GetInstalledVersions(), PluginDependencies{ + selected, err := GetAllPluginPackages().Resolve(GetInstalledVersions(true), PluginDependencies{ &PluginDependency{ Name: pl.Name, Range: semver.Range(func(v semver.Version) bool { return true }),