mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-22 19:07:48 +08:00
77 lines
1.8 KiB
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")
|
|
}
|