2016-03-24 20:26:10 +01:00
|
|
|
// -*- Mode: Go; indent-tabs-mode: t -*-
|
|
|
|
|
|
|
|
|
|
/*
|
2018-03-28 22:41:57 +02:00
|
|
|
* Copyright (C) 2014-2018 Canonical Ltd
|
2016-03-24 20:26:10 +01:00
|
|
|
*
|
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License version 3 as
|
|
|
|
|
* published by the Free Software Foundation.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
package store
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"errors"
|
|
|
|
|
"fmt"
|
|
|
|
|
"net/url"
|
store: be less verbose in the common refresh case of "no updates"
Before this change, every snap refresh would log, even without DEBUG,
something like:
Jul 17 08:03:16 fleet snapd[4819]: 2018/07/17 08:03:16.096014 storehelpers.go:398: cannot refresh:
Jul 17 08:03:16 fleet snapd[4819]: snap "bofh": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "interdenominational-counterintelligences": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shellcheck": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "unifonter": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "hello-world": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "wethr": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "cavestory": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "nethack": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "tmnationsforever": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "flare-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xbill-xaw": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "quake-shareware": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "telegram-desktop": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "bash-shell-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "go": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shattered-pixel-dungeon": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xonotic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "youtube-dl-casept": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "mosaic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "spotify": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "firefox": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "http": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "minecraft": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "vlc": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "test-snapd-tools": snap has no updates available
this change turns things around, and instead you'll get
Jul 17 16:02:49 fleet snapd[5123]: 2018/07/19 16:02:49.310941 storehelpers.go:398: cannot refresh: snap has no updates available: "atom", "bash-shell-rpg", "cavestory", "core", "firefox", "flare-rpg", "gnome-3-26-1604", "gnome-calculator", "go", "gtk-common-themes", "hello-world", "http", "interdenominational-counterintelligences", "minecraft", "mosaic", "nethack", "quake-shareware", "shattered-pixel-dungeon", "shellcheck", "spotify", "telegram-desktop", "test-snapd-tools", "tmnationsforever", "unifonter", "vlc", "wethr", "xbill-xaw", "xonotic", "youtube-dl-casept"
which is IMHO better.
It still goes multi-line if there's more than one "kind" of error
(still reversed, “error message: quoted list of snaps”, though).
2018-07-19 16:16:52 +01:00
|
|
|
"sort"
|
2016-07-18 16:05:37 +02:00
|
|
|
"strings"
|
2018-07-04 13:19:25 +02:00
|
|
|
|
2019-08-21 17:12:27 +02:00
|
|
|
"github.com/snapcore/snapd/snap/channel"
|
store: be less verbose in the common refresh case of "no updates"
Before this change, every snap refresh would log, even without DEBUG,
something like:
Jul 17 08:03:16 fleet snapd[4819]: 2018/07/17 08:03:16.096014 storehelpers.go:398: cannot refresh:
Jul 17 08:03:16 fleet snapd[4819]: snap "bofh": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "interdenominational-counterintelligences": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shellcheck": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "unifonter": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "hello-world": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "wethr": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "cavestory": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "nethack": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "tmnationsforever": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "flare-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xbill-xaw": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "quake-shareware": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "telegram-desktop": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "bash-shell-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "go": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shattered-pixel-dungeon": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xonotic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "youtube-dl-casept": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "mosaic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "spotify": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "firefox": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "http": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "minecraft": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "vlc": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "test-snapd-tools": snap has no updates available
this change turns things around, and instead you'll get
Jul 17 16:02:49 fleet snapd[5123]: 2018/07/19 16:02:49.310941 storehelpers.go:398: cannot refresh: snap has no updates available: "atom", "bash-shell-rpg", "cavestory", "core", "firefox", "flare-rpg", "gnome-3-26-1604", "gnome-calculator", "go", "gtk-common-themes", "hello-world", "http", "interdenominational-counterintelligences", "minecraft", "mosaic", "nethack", "quake-shareware", "shattered-pixel-dungeon", "shellcheck", "spotify", "telegram-desktop", "test-snapd-tools", "tmnationsforever", "unifonter", "vlc", "wethr", "xbill-xaw", "xonotic", "youtube-dl-casept"
which is IMHO better.
It still goes multi-line if there's more than one "kind" of error
(still reversed, “error message: quoted list of snaps”, though).
2018-07-19 16:16:52 +01:00
|
|
|
"github.com/snapcore/snapd/strutil"
|
2016-03-24 20:26:10 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var (
|
2016-07-07 13:21:57 +01:00
|
|
|
// ErrBadQuery is returned from Find when the query has special characters in strange places.
|
|
|
|
|
ErrBadQuery = errors.New("bad query")
|
|
|
|
|
|
2020-03-30 20:29:29 +02:00
|
|
|
// ErrInvalidScope is returned from Find when an invalid scope is requested.
|
|
|
|
|
ErrInvalidScope = errors.New("invalid scope")
|
|
|
|
|
|
2016-03-24 20:26:10 +01:00
|
|
|
// ErrSnapNotFound is returned when a snap can not be found
|
|
|
|
|
ErrSnapNotFound = errors.New("snap not found")
|
|
|
|
|
|
2016-07-15 13:44:57 +01:00
|
|
|
// ErrUnauthenticated is returned when authentication is needed to complete the query
|
|
|
|
|
ErrUnauthenticated = errors.New("you need to log in first")
|
|
|
|
|
|
2016-04-12 09:50:19 -03:00
|
|
|
// ErrAuthenticationNeeds2fa is returned if the authentication needs 2factor
|
|
|
|
|
ErrAuthenticationNeeds2fa = errors.New("two factor authentication required")
|
2016-03-24 20:26:10 +01:00
|
|
|
|
store, daemon, client, cmd/snap: bubble TWOFACTOR_FAILURE up from store all the way to snap (#1086)
* store, daemon, client, cmd/snap: bubble TWOFACTOR_FAILURE up from store all the way to snap
* client, store, cmd/snap: addressed issues found in review. In particular, none of cmd/snap prints straight to stdout any more
* client: added tests for IsTwoFactorError, found bug in it, fixed it
* client: added comment for IsTwoFactorError
* more issues from review
2016-04-28 12:27:21 +01:00
|
|
|
// Err2faFailed is returned when 2fa failed (e.g., a bad token was given)
|
|
|
|
|
Err2faFailed = errors.New("two factor authentication failed")
|
|
|
|
|
|
2016-03-24 20:26:10 +01:00
|
|
|
// ErrInvalidCredentials is returned on login error
|
2017-10-19 19:08:52 +08:00
|
|
|
// It can also be returned when refreshing the discharge
|
|
|
|
|
// macaroon if the user has changed their password.
|
2016-03-24 20:26:10 +01:00
|
|
|
ErrInvalidCredentials = errors.New("invalid credentials")
|
2016-09-16 09:53:53 +01:00
|
|
|
|
2016-09-23 10:33:56 +01:00
|
|
|
// ErrTOSNotAccepted is returned when the user has not accepted the store's terms of service.
|
|
|
|
|
ErrTOSNotAccepted = errors.New("terms of service not accepted")
|
2016-09-19 14:56:53 +01:00
|
|
|
|
2016-09-21 09:38:32 +01:00
|
|
|
// ErrNoPaymentMethods is returned when the user has no valid payment methods associated with their account.
|
|
|
|
|
ErrNoPaymentMethods = errors.New("no payment methods")
|
2016-10-06 10:49:41 +01:00
|
|
|
|
|
|
|
|
// ErrPaymentDeclined is returned when the user's payment method was declined by the upstream payment provider.
|
|
|
|
|
ErrPaymentDeclined = errors.New("payment declined")
|
2017-05-24 23:10:06 +01:00
|
|
|
|
|
|
|
|
// ErrLocalSnap is returned when an operation that only applies to snaps that come from a store was attempted on a local snap.
|
2017-05-30 16:10:17 +01:00
|
|
|
ErrLocalSnap = errors.New("cannot perform operation on local snap")
|
2017-05-24 23:16:44 +01:00
|
|
|
|
|
|
|
|
// ErrNoUpdateAvailable is returned when an update is attempetd for a snap that has no update available.
|
|
|
|
|
ErrNoUpdateAvailable = errors.New("snap has no updates available")
|
2016-03-24 20:26:10 +01:00
|
|
|
)
|
|
|
|
|
|
2018-07-04 13:19:25 +02:00
|
|
|
// RevisionNotAvailableError is returned when an install is attempted for a snap but the/a revision is not available (given install constraints).
|
|
|
|
|
type RevisionNotAvailableError struct {
|
|
|
|
|
Action string
|
|
|
|
|
Channel string
|
2019-08-21 17:12:27 +02:00
|
|
|
Releases []channel.Channel
|
2018-07-04 13:19:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (e *RevisionNotAvailableError) Error() string {
|
|
|
|
|
return "no snap revision available as specified"
|
|
|
|
|
}
|
|
|
|
|
|
2017-05-25 16:56:43 +01:00
|
|
|
// DownloadError represents a download error
|
|
|
|
|
type DownloadError struct {
|
2016-03-24 20:26:10 +01:00
|
|
|
Code int
|
|
|
|
|
URL *url.URL
|
|
|
|
|
}
|
|
|
|
|
|
2017-05-25 16:56:43 +01:00
|
|
|
func (e *DownloadError) Error() string {
|
2016-03-24 20:26:10 +01:00
|
|
|
return fmt.Sprintf("received an unexpected http response code (%v) when trying to download %s", e.Code, e.URL)
|
|
|
|
|
}
|
2016-07-18 16:05:37 +02:00
|
|
|
|
2017-05-25 16:56:43 +01:00
|
|
|
// PasswordPolicyError is returned in a few corner cases, most notably
|
|
|
|
|
// when the password has been force-reset.
|
|
|
|
|
type PasswordPolicyError map[string]stringList
|
2017-05-05 20:00:00 +01:00
|
|
|
|
2017-05-25 16:56:43 +01:00
|
|
|
func (e PasswordPolicyError) Error() string {
|
2017-05-05 20:00:00 +01:00
|
|
|
var msg string
|
|
|
|
|
|
|
|
|
|
if reason, ok := e["reason"]; ok && len(reason) == 1 {
|
|
|
|
|
msg = reason[0]
|
|
|
|
|
if location, ok := e["location"]; ok && len(location) == 1 {
|
|
|
|
|
msg += "\nTo address this, go to: " + location[0] + "\n"
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
for k, vs := range e {
|
|
|
|
|
msg += fmt.Sprintf("%s: %s\n", k, strings.Join(vs, " "))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return msg
|
|
|
|
|
}
|
|
|
|
|
|
2017-05-25 16:56:43 +01:00
|
|
|
// InvalidAuthDataError signals that the authentication data didn't pass validation.
|
|
|
|
|
type InvalidAuthDataError map[string]stringList
|
2016-07-18 16:05:37 +02:00
|
|
|
|
2017-05-25 16:56:43 +01:00
|
|
|
func (e InvalidAuthDataError) Error() string {
|
2016-07-18 16:05:37 +02:00
|
|
|
var es []string
|
|
|
|
|
for _, v := range e {
|
|
|
|
|
es = append(es, v...)
|
|
|
|
|
}
|
|
|
|
|
// XXX: confirm with server people that extra args are all
|
|
|
|
|
// full sentences (with periods and capitalization)
|
|
|
|
|
// (empirically this checks out)
|
|
|
|
|
return strings.Join(es, " ")
|
|
|
|
|
}
|
2018-03-28 22:41:57 +02:00
|
|
|
|
|
|
|
|
// SnapActionError conveys errors that were reported on otherwise overall successful snap action (install/refresh) request.
|
|
|
|
|
type SnapActionError struct {
|
2020-09-27 23:38:17 +02:00
|
|
|
// NoResults is set if there were no results in the response
|
2018-03-28 22:41:57 +02:00
|
|
|
NoResults bool
|
|
|
|
|
// Refresh errors by snap name.
|
|
|
|
|
Refresh map[string]error
|
|
|
|
|
// Install errors by snap name.
|
|
|
|
|
Install map[string]error
|
2018-06-11 12:07:13 +01:00
|
|
|
// Download errors by snap name.
|
|
|
|
|
Download map[string]error
|
2018-03-28 22:41:57 +02:00
|
|
|
// Other errors.
|
|
|
|
|
Other []error
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-31 11:25:24 +00:00
|
|
|
// SingleOpError returns the single operation, snap name, and error if
|
|
|
|
|
// e represents a single error of a single operation on a single snap
|
|
|
|
|
// (i.e. if e.Other is empty, and e.Refresh, e.Install and e.Download
|
|
|
|
|
// have a single error in total).
|
|
|
|
|
// In any other case, the error returned will be nil.
|
|
|
|
|
func (e SnapActionError) SingleOpError() (op, name string, err error) {
|
|
|
|
|
if len(e.Other) > 0 {
|
|
|
|
|
return "", "", nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
nRefresh := len(e.Refresh)
|
|
|
|
|
nInstall := len(e.Install)
|
|
|
|
|
nDownload := len(e.Download)
|
|
|
|
|
if nRefresh+nInstall+nDownload != 1 {
|
|
|
|
|
return "", "", nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var errs map[string]error
|
|
|
|
|
switch {
|
|
|
|
|
case nRefresh > 0:
|
|
|
|
|
op = "refresh"
|
|
|
|
|
errs = e.Refresh
|
|
|
|
|
case nInstall > 0:
|
|
|
|
|
op = "install"
|
|
|
|
|
errs = e.Install
|
|
|
|
|
case nDownload > 0:
|
|
|
|
|
op = "download"
|
|
|
|
|
errs = e.Download
|
|
|
|
|
}
|
|
|
|
|
for name, err = range errs {
|
|
|
|
|
return op, name, err
|
|
|
|
|
}
|
|
|
|
|
// can't happen
|
|
|
|
|
return "", "", nil
|
|
|
|
|
}
|
|
|
|
|
|
2018-03-28 22:41:57 +02:00
|
|
|
func (e SnapActionError) Error() string {
|
|
|
|
|
nRefresh := len(e.Refresh)
|
|
|
|
|
nInstall := len(e.Install)
|
2018-06-11 12:07:13 +01:00
|
|
|
nDownload := len(e.Download)
|
2018-03-28 22:41:57 +02:00
|
|
|
nOther := len(e.Other)
|
|
|
|
|
|
|
|
|
|
// single error
|
store: be less verbose in the common refresh case of "no updates"
Before this change, every snap refresh would log, even without DEBUG,
something like:
Jul 17 08:03:16 fleet snapd[4819]: 2018/07/17 08:03:16.096014 storehelpers.go:398: cannot refresh:
Jul 17 08:03:16 fleet snapd[4819]: snap "bofh": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "interdenominational-counterintelligences": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shellcheck": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "unifonter": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "hello-world": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "wethr": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "cavestory": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "nethack": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "tmnationsforever": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "flare-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xbill-xaw": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "quake-shareware": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "telegram-desktop": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "bash-shell-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "go": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shattered-pixel-dungeon": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xonotic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "youtube-dl-casept": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "mosaic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "spotify": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "firefox": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "http": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "minecraft": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "vlc": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "test-snapd-tools": snap has no updates available
this change turns things around, and instead you'll get
Jul 17 16:02:49 fleet snapd[5123]: 2018/07/19 16:02:49.310941 storehelpers.go:398: cannot refresh: snap has no updates available: "atom", "bash-shell-rpg", "cavestory", "core", "firefox", "flare-rpg", "gnome-3-26-1604", "gnome-calculator", "go", "gtk-common-themes", "hello-world", "http", "interdenominational-counterintelligences", "minecraft", "mosaic", "nethack", "quake-shareware", "shattered-pixel-dungeon", "shellcheck", "spotify", "telegram-desktop", "test-snapd-tools", "tmnationsforever", "unifonter", "vlc", "wethr", "xbill-xaw", "xonotic", "youtube-dl-casept"
which is IMHO better.
It still goes multi-line if there's more than one "kind" of error
(still reversed, “error message: quoted list of snaps”, though).
2018-07-19 16:16:52 +01:00
|
|
|
switch nRefresh + nInstall + nDownload + nOther {
|
|
|
|
|
case 0:
|
|
|
|
|
if e.NoResults {
|
|
|
|
|
// this is an atypical result
|
|
|
|
|
return "no install/refresh information results from the store"
|
|
|
|
|
}
|
|
|
|
|
case 1:
|
2018-03-28 22:41:57 +02:00
|
|
|
if nOther == 0 {
|
2020-01-31 11:25:24 +00:00
|
|
|
op, name, err := e.SingleOpError()
|
|
|
|
|
return fmt.Sprintf("cannot %s snap %q: %v", op, name, err)
|
2018-03-28 22:41:57 +02:00
|
|
|
} else {
|
2018-06-11 12:07:13 +01:00
|
|
|
return fmt.Sprintf("cannot refresh, install, or download: %v", e.Other[0])
|
2018-03-28 22:41:57 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-06-11 12:07:13 +01:00
|
|
|
header := "cannot refresh, install, or download:"
|
|
|
|
|
if nOther == 0 {
|
|
|
|
|
// at least one of nDownload, nInstall, or nRefresh is > 0
|
|
|
|
|
switch {
|
|
|
|
|
case nDownload == 0 && nRefresh == 0:
|
|
|
|
|
header = "cannot install:"
|
|
|
|
|
case nDownload == 0 && nInstall == 0:
|
|
|
|
|
header = "cannot refresh:"
|
|
|
|
|
case nRefresh == 0 && nInstall == 0:
|
|
|
|
|
header = "cannot download:"
|
2018-06-12 09:30:01 +01:00
|
|
|
case nDownload == 0:
|
|
|
|
|
header = "cannot refresh or install:"
|
2018-06-11 12:07:13 +01:00
|
|
|
case nInstall == 0:
|
|
|
|
|
header = "cannot refresh or download:"
|
|
|
|
|
case nRefresh == 0:
|
|
|
|
|
header = "cannot install or download:"
|
|
|
|
|
}
|
2018-03-28 22:41:57 +02:00
|
|
|
}
|
|
|
|
|
|
2018-08-02 10:47:03 +01:00
|
|
|
// reverse the "snap->error" map to "error->snap", as the
|
|
|
|
|
// common case is that all snaps fail with the same error
|
|
|
|
|
// (e.g. "no refresh available")
|
|
|
|
|
errToSnaps := map[string][]string{}
|
|
|
|
|
errKeys := []string{} // poorman's ordered map
|
store: be less verbose in the common refresh case of "no updates"
Before this change, every snap refresh would log, even without DEBUG,
something like:
Jul 17 08:03:16 fleet snapd[4819]: 2018/07/17 08:03:16.096014 storehelpers.go:398: cannot refresh:
Jul 17 08:03:16 fleet snapd[4819]: snap "bofh": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "interdenominational-counterintelligences": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shellcheck": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "unifonter": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "hello-world": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "wethr": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "cavestory": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "nethack": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "tmnationsforever": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "flare-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xbill-xaw": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "quake-shareware": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "telegram-desktop": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "bash-shell-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "go": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shattered-pixel-dungeon": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xonotic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "youtube-dl-casept": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "mosaic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "spotify": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "firefox": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "http": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "minecraft": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "vlc": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "test-snapd-tools": snap has no updates available
this change turns things around, and instead you'll get
Jul 17 16:02:49 fleet snapd[5123]: 2018/07/19 16:02:49.310941 storehelpers.go:398: cannot refresh: snap has no updates available: "atom", "bash-shell-rpg", "cavestory", "core", "firefox", "flare-rpg", "gnome-3-26-1604", "gnome-calculator", "go", "gtk-common-themes", "hello-world", "http", "interdenominational-counterintelligences", "minecraft", "mosaic", "nethack", "quake-shareware", "shattered-pixel-dungeon", "shellcheck", "spotify", "telegram-desktop", "test-snapd-tools", "tmnationsforever", "unifonter", "vlc", "wethr", "xbill-xaw", "xonotic", "youtube-dl-casept"
which is IMHO better.
It still goes multi-line if there's more than one "kind" of error
(still reversed, “error message: quoted list of snaps”, though).
2018-07-19 16:16:52 +01:00
|
|
|
|
|
|
|
|
for _, m := range []map[string]error{e.Refresh, e.Install, e.Download} {
|
2018-08-02 10:47:03 +01:00
|
|
|
for snapName, err := range m {
|
store: be less verbose in the common refresh case of "no updates"
Before this change, every snap refresh would log, even without DEBUG,
something like:
Jul 17 08:03:16 fleet snapd[4819]: 2018/07/17 08:03:16.096014 storehelpers.go:398: cannot refresh:
Jul 17 08:03:16 fleet snapd[4819]: snap "bofh": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "interdenominational-counterintelligences": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shellcheck": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "unifonter": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "hello-world": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "wethr": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "cavestory": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "nethack": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "tmnationsforever": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "flare-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xbill-xaw": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "quake-shareware": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "telegram-desktop": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "bash-shell-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "go": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shattered-pixel-dungeon": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xonotic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "youtube-dl-casept": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "mosaic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "spotify": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "firefox": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "http": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "minecraft": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "vlc": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "test-snapd-tools": snap has no updates available
this change turns things around, and instead you'll get
Jul 17 16:02:49 fleet snapd[5123]: 2018/07/19 16:02:49.310941 storehelpers.go:398: cannot refresh: snap has no updates available: "atom", "bash-shell-rpg", "cavestory", "core", "firefox", "flare-rpg", "gnome-3-26-1604", "gnome-calculator", "go", "gtk-common-themes", "hello-world", "http", "interdenominational-counterintelligences", "minecraft", "mosaic", "nethack", "quake-shareware", "shattered-pixel-dungeon", "shellcheck", "spotify", "telegram-desktop", "test-snapd-tools", "tmnationsforever", "unifonter", "vlc", "wethr", "xbill-xaw", "xonotic", "youtube-dl-casept"
which is IMHO better.
It still goes multi-line if there's more than one "kind" of error
(still reversed, “error message: quoted list of snaps”, though).
2018-07-19 16:16:52 +01:00
|
|
|
k := err.Error()
|
2018-08-02 10:47:03 +01:00
|
|
|
v, ok := errToSnaps[k]
|
store: be less verbose in the common refresh case of "no updates"
Before this change, every snap refresh would log, even without DEBUG,
something like:
Jul 17 08:03:16 fleet snapd[4819]: 2018/07/17 08:03:16.096014 storehelpers.go:398: cannot refresh:
Jul 17 08:03:16 fleet snapd[4819]: snap "bofh": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "interdenominational-counterintelligences": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shellcheck": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "unifonter": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "hello-world": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "wethr": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "cavestory": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "nethack": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "tmnationsforever": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "flare-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xbill-xaw": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "quake-shareware": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "telegram-desktop": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "bash-shell-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "go": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shattered-pixel-dungeon": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xonotic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "youtube-dl-casept": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "mosaic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "spotify": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "firefox": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "http": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "minecraft": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "vlc": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "test-snapd-tools": snap has no updates available
this change turns things around, and instead you'll get
Jul 17 16:02:49 fleet snapd[5123]: 2018/07/19 16:02:49.310941 storehelpers.go:398: cannot refresh: snap has no updates available: "atom", "bash-shell-rpg", "cavestory", "core", "firefox", "flare-rpg", "gnome-3-26-1604", "gnome-calculator", "go", "gtk-common-themes", "hello-world", "http", "interdenominational-counterintelligences", "minecraft", "mosaic", "nethack", "quake-shareware", "shattered-pixel-dungeon", "shellcheck", "spotify", "telegram-desktop", "test-snapd-tools", "tmnationsforever", "unifonter", "vlc", "wethr", "xbill-xaw", "xonotic", "youtube-dl-casept"
which is IMHO better.
It still goes multi-line if there's more than one "kind" of error
(still reversed, “error message: quoted list of snaps”, though).
2018-07-19 16:16:52 +01:00
|
|
|
if !ok {
|
2018-08-02 10:47:03 +01:00
|
|
|
errKeys = append(errKeys, k)
|
store: be less verbose in the common refresh case of "no updates"
Before this change, every snap refresh would log, even without DEBUG,
something like:
Jul 17 08:03:16 fleet snapd[4819]: 2018/07/17 08:03:16.096014 storehelpers.go:398: cannot refresh:
Jul 17 08:03:16 fleet snapd[4819]: snap "bofh": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "interdenominational-counterintelligences": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shellcheck": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "unifonter": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "hello-world": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "wethr": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "cavestory": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "nethack": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "tmnationsforever": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "flare-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xbill-xaw": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "quake-shareware": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "telegram-desktop": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "bash-shell-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "go": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shattered-pixel-dungeon": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xonotic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "youtube-dl-casept": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "mosaic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "spotify": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "firefox": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "http": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "minecraft": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "vlc": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "test-snapd-tools": snap has no updates available
this change turns things around, and instead you'll get
Jul 17 16:02:49 fleet snapd[5123]: 2018/07/19 16:02:49.310941 storehelpers.go:398: cannot refresh: snap has no updates available: "atom", "bash-shell-rpg", "cavestory", "core", "firefox", "flare-rpg", "gnome-3-26-1604", "gnome-calculator", "go", "gtk-common-themes", "hello-world", "http", "interdenominational-counterintelligences", "minecraft", "mosaic", "nethack", "quake-shareware", "shattered-pixel-dungeon", "shellcheck", "spotify", "telegram-desktop", "test-snapd-tools", "tmnationsforever", "unifonter", "vlc", "wethr", "xbill-xaw", "xonotic", "youtube-dl-casept"
which is IMHO better.
It still goes multi-line if there's more than one "kind" of error
(still reversed, “error message: quoted list of snaps”, though).
2018-07-19 16:16:52 +01:00
|
|
|
}
|
2018-08-02 10:47:03 +01:00
|
|
|
errToSnaps[k] = append(v, snapName)
|
store: be less verbose in the common refresh case of "no updates"
Before this change, every snap refresh would log, even without DEBUG,
something like:
Jul 17 08:03:16 fleet snapd[4819]: 2018/07/17 08:03:16.096014 storehelpers.go:398: cannot refresh:
Jul 17 08:03:16 fleet snapd[4819]: snap "bofh": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "interdenominational-counterintelligences": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shellcheck": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "unifonter": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "hello-world": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "wethr": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "cavestory": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "nethack": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "tmnationsforever": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "flare-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xbill-xaw": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "quake-shareware": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "telegram-desktop": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "bash-shell-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "go": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shattered-pixel-dungeon": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xonotic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "youtube-dl-casept": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "mosaic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "spotify": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "firefox": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "http": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "minecraft": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "vlc": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "test-snapd-tools": snap has no updates available
this change turns things around, and instead you'll get
Jul 17 16:02:49 fleet snapd[5123]: 2018/07/19 16:02:49.310941 storehelpers.go:398: cannot refresh: snap has no updates available: "atom", "bash-shell-rpg", "cavestory", "core", "firefox", "flare-rpg", "gnome-3-26-1604", "gnome-calculator", "go", "gtk-common-themes", "hello-world", "http", "interdenominational-counterintelligences", "minecraft", "mosaic", "nethack", "quake-shareware", "shattered-pixel-dungeon", "shellcheck", "spotify", "telegram-desktop", "test-snapd-tools", "tmnationsforever", "unifonter", "vlc", "wethr", "xbill-xaw", "xonotic", "youtube-dl-casept"
which is IMHO better.
It still goes multi-line if there's more than one "kind" of error
(still reversed, “error message: quoted list of snaps”, though).
2018-07-19 16:16:52 +01:00
|
|
|
}
|
2018-03-28 22:41:57 +02:00
|
|
|
}
|
|
|
|
|
|
2018-08-02 10:47:03 +01:00
|
|
|
es := make([]string, 1, 1+len(errToSnaps)+nOther)
|
store: be less verbose in the common refresh case of "no updates"
Before this change, every snap refresh would log, even without DEBUG,
something like:
Jul 17 08:03:16 fleet snapd[4819]: 2018/07/17 08:03:16.096014 storehelpers.go:398: cannot refresh:
Jul 17 08:03:16 fleet snapd[4819]: snap "bofh": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "interdenominational-counterintelligences": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shellcheck": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "unifonter": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "hello-world": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "wethr": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "cavestory": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "nethack": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "tmnationsforever": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "flare-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xbill-xaw": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "quake-shareware": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "telegram-desktop": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "bash-shell-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "go": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shattered-pixel-dungeon": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xonotic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "youtube-dl-casept": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "mosaic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "spotify": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "firefox": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "http": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "minecraft": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "vlc": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "test-snapd-tools": snap has no updates available
this change turns things around, and instead you'll get
Jul 17 16:02:49 fleet snapd[5123]: 2018/07/19 16:02:49.310941 storehelpers.go:398: cannot refresh: snap has no updates available: "atom", "bash-shell-rpg", "cavestory", "core", "firefox", "flare-rpg", "gnome-3-26-1604", "gnome-calculator", "go", "gtk-common-themes", "hello-world", "http", "interdenominational-counterintelligences", "minecraft", "mosaic", "nethack", "quake-shareware", "shattered-pixel-dungeon", "shellcheck", "spotify", "telegram-desktop", "test-snapd-tools", "tmnationsforever", "unifonter", "vlc", "wethr", "xbill-xaw", "xonotic", "youtube-dl-casept"
which is IMHO better.
It still goes multi-line if there's more than one "kind" of error
(still reversed, “error message: quoted list of snaps”, though).
2018-07-19 16:16:52 +01:00
|
|
|
es[0] = header
|
2018-08-02 10:47:03 +01:00
|
|
|
for _, k := range errKeys {
|
|
|
|
|
sort.Strings(errToSnaps[k])
|
|
|
|
|
es = append(es, fmt.Sprintf("%s: %s", k, strutil.Quoted(errToSnaps[k])))
|
2018-06-11 12:07:13 +01:00
|
|
|
}
|
|
|
|
|
|
2018-03-28 22:41:57 +02:00
|
|
|
for _, e := range e.Other {
|
store: be less verbose in the common refresh case of "no updates"
Before this change, every snap refresh would log, even without DEBUG,
something like:
Jul 17 08:03:16 fleet snapd[4819]: 2018/07/17 08:03:16.096014 storehelpers.go:398: cannot refresh:
Jul 17 08:03:16 fleet snapd[4819]: snap "bofh": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "interdenominational-counterintelligences": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shellcheck": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "unifonter": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "hello-world": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "wethr": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "cavestory": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "nethack": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "tmnationsforever": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "flare-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xbill-xaw": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "quake-shareware": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "telegram-desktop": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "bash-shell-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "go": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shattered-pixel-dungeon": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xonotic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "youtube-dl-casept": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "mosaic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "spotify": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "firefox": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "http": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "minecraft": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "vlc": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "test-snapd-tools": snap has no updates available
this change turns things around, and instead you'll get
Jul 17 16:02:49 fleet snapd[5123]: 2018/07/19 16:02:49.310941 storehelpers.go:398: cannot refresh: snap has no updates available: "atom", "bash-shell-rpg", "cavestory", "core", "firefox", "flare-rpg", "gnome-3-26-1604", "gnome-calculator", "go", "gtk-common-themes", "hello-world", "http", "interdenominational-counterintelligences", "minecraft", "mosaic", "nethack", "quake-shareware", "shattered-pixel-dungeon", "shellcheck", "spotify", "telegram-desktop", "test-snapd-tools", "tmnationsforever", "unifonter", "vlc", "wethr", "xbill-xaw", "xonotic", "youtube-dl-casept"
which is IMHO better.
It still goes multi-line if there's more than one "kind" of error
(still reversed, “error message: quoted list of snaps”, though).
2018-07-19 16:16:52 +01:00
|
|
|
es = append(es, e.Error())
|
2018-03-28 22:41:57 +02:00
|
|
|
}
|
|
|
|
|
|
store: be less verbose in the common refresh case of "no updates"
Before this change, every snap refresh would log, even without DEBUG,
something like:
Jul 17 08:03:16 fleet snapd[4819]: 2018/07/17 08:03:16.096014 storehelpers.go:398: cannot refresh:
Jul 17 08:03:16 fleet snapd[4819]: snap "bofh": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "interdenominational-counterintelligences": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shellcheck": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "unifonter": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "hello-world": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "wethr": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "cavestory": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "nethack": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "tmnationsforever": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "flare-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xbill-xaw": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "quake-shareware": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "telegram-desktop": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "bash-shell-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "go": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shattered-pixel-dungeon": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xonotic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "youtube-dl-casept": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "mosaic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "spotify": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "firefox": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "http": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "minecraft": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "vlc": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "test-snapd-tools": snap has no updates available
this change turns things around, and instead you'll get
Jul 17 16:02:49 fleet snapd[5123]: 2018/07/19 16:02:49.310941 storehelpers.go:398: cannot refresh: snap has no updates available: "atom", "bash-shell-rpg", "cavestory", "core", "firefox", "flare-rpg", "gnome-3-26-1604", "gnome-calculator", "go", "gtk-common-themes", "hello-world", "http", "interdenominational-counterintelligences", "minecraft", "mosaic", "nethack", "quake-shareware", "shattered-pixel-dungeon", "shellcheck", "spotify", "telegram-desktop", "test-snapd-tools", "tmnationsforever", "unifonter", "vlc", "wethr", "xbill-xaw", "xonotic", "youtube-dl-casept"
which is IMHO better.
It still goes multi-line if there's more than one "kind" of error
(still reversed, “error message: quoted list of snaps”, though).
2018-07-19 16:16:52 +01:00
|
|
|
if len(es) == 2 {
|
|
|
|
|
// header + 1 reason
|
|
|
|
|
return strings.Join(es, " ")
|
2018-03-28 22:41:57 +02:00
|
|
|
}
|
store: be less verbose in the common refresh case of "no updates"
Before this change, every snap refresh would log, even without DEBUG,
something like:
Jul 17 08:03:16 fleet snapd[4819]: 2018/07/17 08:03:16.096014 storehelpers.go:398: cannot refresh:
Jul 17 08:03:16 fleet snapd[4819]: snap "bofh": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "interdenominational-counterintelligences": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shellcheck": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "unifonter": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "hello-world": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "wethr": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "cavestory": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "nethack": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "tmnationsforever": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "flare-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xbill-xaw": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "quake-shareware": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "telegram-desktop": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "bash-shell-rpg": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "go": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "shattered-pixel-dungeon": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "xonotic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "youtube-dl-casept": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "mosaic": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "spotify": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "firefox": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "http": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "minecraft": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "vlc": snap has no updates available
Jul 17 08:03:16 fleet snapd[4819]: snap "test-snapd-tools": snap has no updates available
this change turns things around, and instead you'll get
Jul 17 16:02:49 fleet snapd[5123]: 2018/07/19 16:02:49.310941 storehelpers.go:398: cannot refresh: snap has no updates available: "atom", "bash-shell-rpg", "cavestory", "core", "firefox", "flare-rpg", "gnome-3-26-1604", "gnome-calculator", "go", "gtk-common-themes", "hello-world", "http", "interdenominational-counterintelligences", "minecraft", "mosaic", "nethack", "quake-shareware", "shattered-pixel-dungeon", "shellcheck", "spotify", "telegram-desktop", "test-snapd-tools", "tmnationsforever", "unifonter", "vlc", "wethr", "xbill-xaw", "xonotic", "youtube-dl-casept"
which is IMHO better.
It still goes multi-line if there's more than one "kind" of error
(still reversed, “error message: quoted list of snaps”, though).
2018-07-19 16:16:52 +01:00
|
|
|
|
2018-03-28 22:41:57 +02:00
|
|
|
return strings.Join(es, "\n")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Authorization soft-expiry errors that get handled automatically.
|
|
|
|
|
var (
|
|
|
|
|
errUserAuthorizationNeedsRefresh = errors.New("soft-expired user authorization needs refresh")
|
|
|
|
|
errDeviceAuthorizationNeedsRefresh = errors.New("soft-expired device authorization needs refresh")
|
|
|
|
|
)
|
|
|
|
|
|
2019-08-21 17:12:27 +02:00
|
|
|
func translateSnapActionError(action, snapChannel, code, message string, releases []snapRelease) error {
|
2018-03-28 22:41:57 +02:00
|
|
|
switch code {
|
|
|
|
|
case "revision-not-found":
|
2018-07-04 13:19:25 +02:00
|
|
|
e := &RevisionNotAvailableError{
|
|
|
|
|
Action: action,
|
2019-08-21 17:12:27 +02:00
|
|
|
Channel: snapChannel,
|
2018-07-04 13:19:25 +02:00
|
|
|
}
|
|
|
|
|
if len(releases) != 0 {
|
2019-08-21 17:12:27 +02:00
|
|
|
parsedReleases := make([]channel.Channel, len(releases))
|
2018-07-04 13:19:25 +02:00
|
|
|
for i := 0; i < len(releases); i++ {
|
|
|
|
|
var err error
|
2019-08-21 17:12:27 +02:00
|
|
|
parsedReleases[i], err = channel.Parse(releases[i].Channel, releases[i].Architecture)
|
2018-07-04 13:19:25 +02:00
|
|
|
if err != nil {
|
|
|
|
|
// shouldn't happen, return error without Releases
|
|
|
|
|
return e
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
e.Releases = parsedReleases
|
|
|
|
|
}
|
|
|
|
|
return e
|
2018-03-28 22:41:57 +02:00
|
|
|
case "id-not-found", "name-not-found":
|
|
|
|
|
return ErrSnapNotFound
|
|
|
|
|
case "user-authorization-needs-refresh":
|
|
|
|
|
return errUserAuthorizationNeedsRefresh
|
|
|
|
|
case "device-authorization-needs-refresh":
|
|
|
|
|
return errDeviceAuthorizationNeedsRefresh
|
|
|
|
|
default:
|
|
|
|
|
return fmt.Errorf("%v", message)
|
|
|
|
|
}
|
|
|
|
|
}
|