kubo/core/commands/update.go

77 lines
1.8 KiB
Go

package commands
import (
"errors"
"fmt"
"io"
"os"
"github.com/jbenet/go-ipfs/core"
"github.com/jbenet/go-ipfs/updates"
)
// UpdateApply applys an update of the ipfs binary and shuts down the node if successful
func UpdateApply(n *core.IpfsNode, args []string, opts map[string]interface{}, out io.Writer) error {
fmt.Fprintln(out, "Current Version:", updates.Version)
u, err := updates.CheckForUpdate()
if err != nil {
return err
}
if u == nil {
fmt.Fprintln(out, "No update available")
return nil
}
fmt.Fprintln(out, "New Version:", u.Version)
_, onDaemon := opts["onDaemon"]
force := opts["force"].(bool)
if onDaemon && !force {
return fmt.Errorf(`Error: update must stop running ipfs service.
You may want to abort the update, or shut the service down manually.
To shut it down automatically, run:
ipfs update --force
`)
}
if err = updates.Apply(u); err != nil {
fmt.Fprint(out, err.Error())
return fmt.Errorf("Couldn't apply update: %v", err)
}
fmt.Fprintln(out, "Updated applied!")
if onDaemon {
if force {
fmt.Fprintln(out, "Shutting down ipfs service.")
os.Exit(1) // is there a cleaner shutdown routine?
} else {
fmt.Fprintln(out, "You can now restart the ipfs service.")
}
}
return nil
}
// UpdateCheck checks wether there is an update available
func UpdateCheck(n *core.IpfsNode, args []string, opts map[string]interface{}, out io.Writer) error {
fmt.Fprintln(out, "Current Version:", updates.Version)
u, err := updates.CheckForUpdate()
if err != nil {
return err
}
if u == nil {
fmt.Fprintln(out, "No update available")
return nil
}
fmt.Fprintln(out, "New Version:", u.Version)
return nil
}
// UpdateLog lists the version available online
func UpdateLog(n *core.IpfsNode, args []string, opts map[string]interface{}, out io.Writer) error {
return errors.New("Not yet implemented")
}