Errorlint sweep + minor linter tweaks (#1796)

* Replace error assertions with Go 1.13 style

Use `errors.As(..)` over type assertions. This enables better use of
wrapped errors in the future, and lets us pass some errorlint checks
in the process.

The rewrite is entirely mechanical, and uses a standard idiom for
doing so.

* Use Go 1.13's errors.Is(..)

Rather than directly checking for error equality, use errors.Is(..).

This protects against error wrapping issues in the future.

Even though something like sql.ErrNoRows doesn't need the wrapping, do
so anyway, for the sake of consistency throughout the code base.

The change almost lets us pass the `errorlint` Go checker except for
a missing case in `js.go` which is to be handled separately; it isn't
mechanical, like these changes are.

* Remove goconst

goconst isn't a useful linter in many cases, because it's false positive
rate is high. It's 100% for the current code base.

* Avoid direct comparison of errors in recover()

Assert that we are catching an error from recover(). If we are,
check that the error caught matches errStop.

* Enable the "errorlint" checker

Configure the checker to avoid checking for errorf wraps. These are
often false positives since the suggestion is to blanket wrap errors
with %w, and that exposes the underlying API which you might not want
to do.

The other warnings are good however, and with the current patch stack,
the code base passes all these checks as well.

* Configure rowserrcheck

The project uses sqlx. Configure rowserrcheck to include said package.

* Mechanically rewrite a large set of errors

Mechanically search for errors that look like

    fmt.Errorf("...%s", err.Error())

and rewrite those into

    fmt.Errorf("...%v", err)

The `fmt` package is error-aware and knows how to call err.Error()
itself.

The rationale is that this is more idiomatic Go; it paves the
way for using error wrapping later with %w in some sites.

This patch only addresses the entirely mechanical rewriting caught by
a project-side search/replace. There are more individual sites not
addressed by this patch.
This commit is contained in:
SmallCoccinelle 2021-10-12 05:03:08 +02:00 committed by GitHub
parent 38384f2c60
commit c6f6205e4f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
46 changed files with 176 additions and 143 deletions

View file

@ -20,13 +20,13 @@ linters:
# Linters added by the stash project
# - bodyclose
- dogsled
# - errorlint
- errorlint
# - exhaustive
- exportloopref
# - goconst
# - gocritic
# - goerr113
- gofmt
# - gomnd
# - gosec
# - ifshort
- misspell
@ -41,6 +41,13 @@ linters-settings:
gofmt:
simplify: false
errorlint:
# Disable errorf because there are false positives, where you don't want to wrap
# an error.
errorf: false
asserts: true
comparison: true
revive:
ignore-generated-header: true
severity: error
@ -79,4 +86,8 @@ linters-settings:
- name: unused-parameter
disabled: true
- name: unreachable-code
- name: redefines-builtin-id
- name: redefines-builtin-id
rowserrcheck:
packages:
- github.com/jmoiron/sqlx

View file

@ -1,6 +1,7 @@
package api
import (
"errors"
"net"
"net/http"
"net/url"
@ -39,7 +40,7 @@ func authenticateHandler() func(http.Handler) http.Handler {
userID, err := manager.GetInstance().SessionStore.Authenticate(w, r)
if err != nil {
if err != session.ErrUnauthorized {
if errors.Is(err, session.ErrUnauthorized) {
w.WriteHeader(http.StatusInternalServerError)
_, err = w.Write([]byte(err.Error()))
if err != nil {
@ -55,16 +56,18 @@ func authenticateHandler() func(http.Handler) http.Handler {
}
if err := session.CheckAllowPublicWithoutAuth(c, r); err != nil {
switch err := err.(type) {
case session.ExternalAccessError:
securityActivateTripwireAccessedFromInternetWithoutAuth(c, err, w)
var externalAccess session.ExternalAccessError
var untrustedProxy session.UntrustedProxyError
switch {
case errors.As(err, &externalAccess):
securityActivateTripwireAccessedFromInternetWithoutAuth(c, externalAccess, w)
return
case session.UntrustedProxyError:
logger.Warnf("Rejected request from untrusted proxy: %s", net.IP(err).String())
case errors.As(err, &untrustedProxy):
logger.Warnf("Rejected request from untrusted proxy: %v", net.IP(untrustedProxy))
w.WriteHeader(http.StatusForbidden)
return
default:
logger.Errorf("Error checking external access security: %s", err.Error())
logger.Errorf("Error checking external access security: %v", err)
w.WriteHeader(http.StatusInternalServerError)
return
}

View file

@ -229,7 +229,7 @@ func Start(uiBox embed.FS, loginUIBox embed.FS) {
tlsConfig, err := makeTLSConfig(c)
if err != nil {
// assume we don't want to start with a broken TLS configuration
panic(fmt.Errorf("error loading TLS config: %s", err.Error()))
panic(fmt.Errorf("error loading TLS config: %v", err))
}
server := &http.Server{
@ -296,7 +296,7 @@ func makeTLSConfig(c *config.Instance) (*tls.Config, error) {
certs := make([]tls.Certificate, 1)
certs[0], err = tls.X509KeyPair(cert, key)
if err != nil {
return nil, fmt.Errorf("error parsing key pair: %s", err.Error())
return nil, fmt.Errorf("error parsing key pair: %v", err)
}
tlsConfig := &tls.Config{
Certificates: certs,

View file

@ -2,6 +2,7 @@ package api
import (
"embed"
"errors"
"fmt"
"html/template"
"net/http"
@ -60,7 +61,7 @@ func handleLogin(loginUIBox embed.FS) http.HandlerFunc {
}
err := manager.GetInstance().SessionStore.Login(w, r)
if err == session.ErrInvalidCredentials {
if errors.Is(err, session.ErrInvalidCredentials) {
// redirect back to the login page with an error
redirectToLogin(loginUIBox, w, url, "Username or password is invalid")
return

View file

@ -2,6 +2,7 @@ package database
import (
"database/sql"
"errors"
"fmt"
"strings"
@ -21,7 +22,7 @@ func createImagesChecksumIndex() error {
return WithTxn(func(tx *sqlx.Tx) error {
row := tx.QueryRow("SELECT 1 AS found FROM sqlite_master WHERE type = 'index' AND name = 'images_checksum_unique'")
err := row.Err()
if err != nil && err != sql.ErrNoRows {
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return err
}
@ -55,7 +56,7 @@ func createImagesChecksumIndex() error {
}
err = tx.Select(&result, "SELECT checksum FROM images GROUP BY checksum HAVING COUNT(1) > 1")
if err != nil && err != sql.ErrNoRows {
if err != nil && !errors.Is(err, sql.ErrNoRows) {
logger.Errorf("Unable to determine non-unique image checksums: %s", err)
return nil
}

View file

@ -63,13 +63,13 @@ func Initialize(databasePath string) error {
dbPath = databasePath
if err := getDatabaseSchemaVersion(); err != nil {
return fmt.Errorf("error getting database schema version: %s", err.Error())
return fmt.Errorf("error getting database schema version: %v", err)
}
if databaseSchemaVersion == 0 {
// new database, just run the migrations
if err := RunMigrations(); err != nil {
return fmt.Errorf("error running initial schema migrations: %s", err.Error())
return fmt.Errorf("error running initial schema migrations: %v", err)
}
// RunMigrations calls Initialise. Just return
return nil
@ -298,7 +298,7 @@ func registerCustomDriver() {
})
if err != nil {
return fmt.Errorf("error registering natural sort collation: %s", err.Error())
return fmt.Errorf("error registering natural sort collation: %v", err)
}
return nil

View file

@ -78,7 +78,7 @@ func (i *Importer) populateStudio() error {
if i.Input.Studio != "" {
studio, err := i.StudioWriter.FindByName(i.Input.Studio, false)
if err != nil {
return fmt.Errorf("error finding studio by name: %s", err.Error())
return fmt.Errorf("error finding studio by name: %v", err)
}
if studio == nil {
@ -147,7 +147,7 @@ func (i *Importer) populatePerformers() error {
if i.MissingRefBehaviour == models.ImportMissingRefEnumCreate {
createdPerformers, err := i.createPerformers(missingPerformers)
if err != nil {
return fmt.Errorf("error creating gallery performers: %s", err.Error())
return fmt.Errorf("error creating gallery performers: %v", err)
}
performers = append(performers, createdPerformers...)
@ -203,7 +203,7 @@ func (i *Importer) populateTags() error {
if i.MissingRefBehaviour == models.ImportMissingRefEnumCreate {
createdTags, err := i.createTags(missingTags)
if err != nil {
return fmt.Errorf("error creating gallery tags: %s", err.Error())
return fmt.Errorf("error creating gallery tags: %v", err)
}
tags = append(tags, createdTags...)
@ -242,7 +242,7 @@ func (i *Importer) PostImport(id int) error {
}
if err := i.ReaderWriter.UpdatePerformers(id, performerIDs); err != nil {
return fmt.Errorf("failed to associate performers: %s", err.Error())
return fmt.Errorf("failed to associate performers: %v", err)
}
}
@ -252,7 +252,7 @@ func (i *Importer) PostImport(id int) error {
tagIDs = append(tagIDs, t.ID)
}
if err := i.ReaderWriter.UpdateTags(id, tagIDs); err != nil {
return fmt.Errorf("failed to associate tags: %s", err.Error())
return fmt.Errorf("failed to associate tags: %v", err)
}
}
@ -280,7 +280,7 @@ func (i *Importer) FindExistingID() (*int, error) {
func (i *Importer) Create() (*int, error) {
created, err := i.ReaderWriter.Create(i.gallery)
if err != nil {
return nil, fmt.Errorf("error creating gallery: %s", err.Error())
return nil, fmt.Errorf("error creating gallery: %v", err)
}
id := created.ID
@ -292,7 +292,7 @@ func (i *Importer) Update(id int) error {
gallery.ID = id
_, err := i.ReaderWriter.Update(gallery)
if err != nil {
return fmt.Errorf("error updating existing gallery: %s", err.Error())
return fmt.Errorf("error updating existing gallery: %v", err)
}
return nil

View file

@ -75,7 +75,7 @@ func GetStudioName(reader models.StudioReader, image *models.Image) (string, err
// func GetGalleryChecksum(reader models.GalleryReader, image *models.Image) (string, error) {
// gallery, err := reader.FindByImageID(image.ID)
// if err != nil {
// return "", fmt.Errorf("error getting image gallery: %s", err.Error())
// return "", fmt.Errorf("error getting image gallery: %v", err)
// }
// if gallery != nil {

View file

@ -86,7 +86,7 @@ func (i *Importer) populateStudio() error {
if i.Input.Studio != "" {
studio, err := i.StudioWriter.FindByName(i.Input.Studio, false)
if err != nil {
return fmt.Errorf("error finding studio by name: %s", err.Error())
return fmt.Errorf("error finding studio by name: %v", err)
}
if studio == nil {
@ -131,7 +131,7 @@ func (i *Importer) populateGalleries() error {
for _, checksum := range i.Input.Galleries {
gallery, err := i.GalleryWriter.FindByChecksum(checksum)
if err != nil {
return fmt.Errorf("error finding gallery: %s", err.Error())
return fmt.Errorf("error finding gallery: %v", err)
}
if gallery == nil {
@ -179,7 +179,7 @@ func (i *Importer) populatePerformers() error {
if i.MissingRefBehaviour == models.ImportMissingRefEnumCreate {
createdPerformers, err := i.createPerformers(missingPerformers)
if err != nil {
return fmt.Errorf("error creating image performers: %s", err.Error())
return fmt.Errorf("error creating image performers: %v", err)
}
performers = append(performers, createdPerformers...)
@ -232,7 +232,7 @@ func (i *Importer) PostImport(id int) error {
}
if err := i.ReaderWriter.UpdateGalleries(id, galleryIDs); err != nil {
return fmt.Errorf("failed to associate galleries: %s", err.Error())
return fmt.Errorf("failed to associate galleries: %v", err)
}
}
@ -243,7 +243,7 @@ func (i *Importer) PostImport(id int) error {
}
if err := i.ReaderWriter.UpdatePerformers(id, performerIDs); err != nil {
return fmt.Errorf("failed to associate performers: %s", err.Error())
return fmt.Errorf("failed to associate performers: %v", err)
}
}
@ -253,7 +253,7 @@ func (i *Importer) PostImport(id int) error {
tagIDs = append(tagIDs, t.ID)
}
if err := i.ReaderWriter.UpdateTags(id, tagIDs); err != nil {
return fmt.Errorf("failed to associate tags: %s", err.Error())
return fmt.Errorf("failed to associate tags: %v", err)
}
}
@ -284,7 +284,7 @@ func (i *Importer) FindExistingID() (*int, error) {
func (i *Importer) Create() (*int, error) {
created, err := i.ReaderWriter.Create(i.image)
if err != nil {
return nil, fmt.Errorf("error creating image: %s", err.Error())
return nil, fmt.Errorf("error creating image: %v", err)
}
id := created.ID
@ -298,7 +298,7 @@ func (i *Importer) Update(id int) error {
i.ID = id
_, err := i.ReaderWriter.UpdateFull(image)
if err != nil {
return fmt.Errorf("error updating existing image: %s", err.Error())
return fmt.Errorf("error updating existing image: %v", err)
}
return nil
@ -327,7 +327,7 @@ func importTags(tagWriter models.TagReaderWriter, names []string, missingRefBeha
if missingRefBehaviour == models.ImportMissingRefEnumCreate {
createdTags, err := createTags(tagWriter, missingTags)
if err != nil {
return nil, fmt.Errorf("error creating tags: %s", err.Error())
return nil, fmt.Errorf("error creating tags: %v", err)
}
tags = append(tags, createdTags...)

View file

@ -1,6 +1,7 @@
package config
import (
"errors"
"fmt"
"net"
"os"
@ -85,7 +86,8 @@ func initConfig(flags flagStruct) error {
err := viper.ReadInConfig() // Find and read the config file
// if not found, assume its a new system
if _, isMissing := err.(viper.ConfigFileNotFoundError); isMissing {
var notFoundErr viper.ConfigFileNotFoundError
if errors.As(err, &notFoundErr) {
instance.isNewSystem = true
return nil
} else if err != nil {

View file

@ -25,7 +25,7 @@ func performImport(i importer, duplicateBehaviour models.ImportDuplicateEnum) er
name := i.Name()
existing, err := i.FindExistingID()
if err != nil {
return fmt.Errorf("error finding existing objects: %s", err.Error())
return fmt.Errorf("error finding existing objects: %v", err)
}
var id int
@ -41,13 +41,13 @@ func performImport(i importer, duplicateBehaviour models.ImportDuplicateEnum) er
// must be overwriting
id = *existing
if err := i.Update(id); err != nil {
return fmt.Errorf("error updating existing object: %s", err.Error())
return fmt.Errorf("error updating existing object: %v", err)
}
} else {
// creating
createdID, err := i.Create()
if err != nil {
return fmt.Errorf("error creating object: %s", err.Error())
return fmt.Errorf("error creating object: %v", err)
}
id = *createdID

View file

@ -302,19 +302,19 @@ func (s *singleton) Setup(input models.SetupInput) error {
configDir := filepath.Dir(input.ConfigLocation)
if exists, _ := utils.DirExists(configDir); !exists {
if err := os.Mkdir(configDir, 0755); err != nil {
return fmt.Errorf("abc: %s", err.Error())
return fmt.Errorf("abc: %v", err)
}
}
// create the generated directory if it does not exist
if exists, _ := utils.DirExists(input.GeneratedLocation); !exists {
if err := os.Mkdir(input.GeneratedLocation, 0755); err != nil {
return fmt.Errorf("error creating generated directory: %s", err.Error())
return fmt.Errorf("error creating generated directory: %v", err)
}
}
if err := utils.Touch(input.ConfigLocation); err != nil {
return fmt.Errorf("error creating config file: %s", err.Error())
return fmt.Errorf("error creating config file: %v", err)
}
s.Config.SetConfigFile(input.ConfigLocation)
@ -324,12 +324,12 @@ func (s *singleton) Setup(input models.SetupInput) error {
s.Config.Set(config.Database, input.DatabaseFile)
s.Config.Set(config.Stash, input.Stashes)
if err := s.Config.Write(); err != nil {
return fmt.Errorf("error writing configuration file: %s", err.Error())
return fmt.Errorf("error writing configuration file: %v", err)
}
// initialise the database
if err := s.PostInit(); err != nil {
return fmt.Errorf("error initializing the database: %s", err.Error())
return fmt.Errorf("error initializing the database: %v", err)
}
s.Config.FinalizeSetup()

View file

@ -663,7 +663,7 @@ func (s *singleton) StashBoxBatchPerformerTag(ctx context.Context, input models.
performers, err = performerQuery.FindByStashIDStatus(false, box.Endpoint)
}
if err != nil {
return fmt.Errorf("error querying performers: %s", err.Error())
return fmt.Errorf("error querying performers: %v", err)
}
for _, performer := range performers {

View file

@ -194,7 +194,7 @@ func GetSceneFileContainer(scene *models.Scene) (ffmpeg.Container, error) {
// shouldn't happen, fallback to ffprobe
tmpVideoFile, err := ffmpeg.NewVideoFile(GetInstance().FFProbePath, scene.Path, false)
if err != nil {
return ffmpeg.Container(""), fmt.Errorf("error reading video file: %s", err.Error())
return ffmpeg.Container(""), fmt.Errorf("error reading video file: %v", err)
}
container = ffmpeg.MatchContainer(tmpVideoFile.Container, scene.Path)

View file

@ -24,7 +24,7 @@ func ValidateModifyStudio(studio models.StudioPartial, qb models.StudioReader) e
currentStudio, err := qb.Find(int(currentParentID.Int64))
if err != nil {
return fmt.Errorf("error finding parent studio: %s", err.Error())
return fmt.Errorf("error finding parent studio: %v", err)
}
currentParentID = currentStudio.ParentID

View file

@ -73,19 +73,19 @@ func (j *autoTagJob) autoTagSpecific(ctx context.Context, progress *job.Progress
if performerCount == 1 && performerIds[0] == wildcard {
performerCount, err = performerQuery.Count()
if err != nil {
return fmt.Errorf("error getting performer count: %s", err.Error())
return fmt.Errorf("error getting performer count: %v", err)
}
}
if studioCount == 1 && studioIds[0] == wildcard {
studioCount, err = studioQuery.Count()
if err != nil {
return fmt.Errorf("error getting studio count: %s", err.Error())
return fmt.Errorf("error getting studio count: %v", err)
}
}
if tagCount == 1 && tagIds[0] == wildcard {
tagCount, err = tagQuery.Count()
if err != nil {
return fmt.Errorf("error getting tag count: %s", err.Error())
return fmt.Errorf("error getting tag count: %v", err)
}
}
@ -122,7 +122,7 @@ func (j *autoTagJob) autoTagPerformers(ctx context.Context, progress *job.Progre
var err error
performers, err = performerQuery.All()
if err != nil {
return fmt.Errorf("error querying performers: %s", err.Error())
return fmt.Errorf("error querying performers: %v", err)
}
} else {
performerIdInt, err := strconv.Atoi(performerId)
@ -188,7 +188,7 @@ func (j *autoTagJob) autoTagStudios(ctx context.Context, progress *job.Progress,
var err error
studios, err = studioQuery.All()
if err != nil {
return fmt.Errorf("error querying studios: %s", err.Error())
return fmt.Errorf("error querying studios: %v", err)
}
} else {
studioIdInt, err := strconv.Atoi(studioId)
@ -259,7 +259,7 @@ func (j *autoTagJob) autoTagTags(ctx context.Context, progress *job.Progress, pa
var err error
tags, err = tagQuery.All()
if err != nil {
return fmt.Errorf("error querying tags: %s", err.Error())
return fmt.Errorf("error querying tags: %v", err)
}
} else {
tagIdInt, err := strconv.Atoi(tagId)

View file

@ -4,6 +4,7 @@ import (
"archive/zip"
"context"
"database/sql"
"errors"
"fmt"
"io"
"os"
@ -239,7 +240,7 @@ func (t *ImportTask) ImportStudios(ctx context.Context) {
if err := t.txnManager.WithTxn(ctx, func(r models.Repository) error {
return t.ImportStudio(studioJSON, pendingParent, r.Studio())
}); err != nil {
if err == studio.ErrParentStudioNotExist {
if errors.Is(err, studio.ErrParentStudioNotExist) {
// add to the pending parent list so that it is created after the parent
s := pendingParent[studioJSON.ParentStudio]
s = append(s, studioJSON)
@ -391,7 +392,8 @@ func (t *ImportTask) ImportTags(ctx context.Context) {
if err := t.txnManager.WithTxn(ctx, func(r models.Repository) error {
return t.ImportTag(tagJSON, pendingParent, false, r.Tag())
}); err != nil {
if parentError, ok := err.(tag.ParentTagNotExistError); ok {
var parentError tag.ParentTagNotExistError
if errors.As(err, &parentError) {
pendingParent[parentError.MissingParent()] = append(pendingParent[parentError.MissingParent()], tagJSON)
continue
}
@ -433,7 +435,8 @@ func (t *ImportTask) ImportTag(tagJSON *jsonschema.Tag, pendingParent map[string
for _, childTagJSON := range pendingParent[tagJSON.Name] {
if err := t.ImportTag(childTagJSON, pendingParent, fail, readerWriter); err != nil {
if parentError, ok := err.(tag.ParentTagNotExistError); ok {
var parentError tag.ParentTagNotExistError
if errors.As(err, &parentError) {
pendingParent[parentError.MissingParent()] = append(pendingParent[parentError.MissingParent()], tagJSON)
continue
}

View file

@ -128,7 +128,7 @@ func (j *ScanJob) Execute(ctx context.Context, progress *job.Progress) {
return nil
})
if err == stoppingErr {
if errors.Is(err, stoppingErr) {
logger.Info("Stopping due to user request")
break
}
@ -206,7 +206,7 @@ func (j *ScanJob) neededScan(ctx context.Context, paths []*models.StashConfig) (
return nil
})
if err == timeoutErr {
if errors.Is(err, timeoutErr) {
// timeout should return nil counts
return nil, nil
}

View file

@ -46,7 +46,7 @@ func ToJSON(reader models.MovieReader, studioReader models.StudioReader, movie *
if movie.StudioID.Valid {
studio, err := studioReader.Find(int(movie.StudioID.Int64))
if err != nil {
return nil, fmt.Errorf("error getting movie studio: %s", err.Error())
return nil, fmt.Errorf("error getting movie studio: %v", err)
}
if studio != nil {
@ -56,7 +56,7 @@ func ToJSON(reader models.MovieReader, studioReader models.StudioReader, movie *
frontImage, err := reader.GetFrontImage(movie.ID)
if err != nil {
return nil, fmt.Errorf("error getting movie front image: %s", err.Error())
return nil, fmt.Errorf("error getting movie front image: %v", err)
}
if len(frontImage) > 0 {
@ -65,7 +65,7 @@ func ToJSON(reader models.MovieReader, studioReader models.StudioReader, movie *
backImage, err := reader.GetBackImage(movie.ID)
if err != nil {
return nil, fmt.Errorf("error getting movie back image: %s", err.Error())
return nil, fmt.Errorf("error getting movie back image: %v", err)
}
if len(backImage) > 0 {

View file

@ -31,13 +31,13 @@ func (i *Importer) PreImport() error {
if len(i.Input.FrontImage) > 0 {
_, i.frontImageData, err = utils.ProcessBase64Image(i.Input.FrontImage)
if err != nil {
return fmt.Errorf("invalid front_image: %s", err.Error())
return fmt.Errorf("invalid front_image: %v", err)
}
}
if len(i.Input.BackImage) > 0 {
_, i.backImageData, err = utils.ProcessBase64Image(i.Input.BackImage)
if err != nil {
return fmt.Errorf("invalid back_image: %s", err.Error())
return fmt.Errorf("invalid back_image: %v", err)
}
}
@ -74,7 +74,7 @@ func (i *Importer) populateStudio() error {
if i.Input.Studio != "" {
studio, err := i.StudioWriter.FindByName(i.Input.Studio, false)
if err != nil {
return fmt.Errorf("error finding studio by name: %s", err.Error())
return fmt.Errorf("error finding studio by name: %v", err)
}
if studio == nil {
@ -118,7 +118,7 @@ func (i *Importer) createStudio(name string) (int, error) {
func (i *Importer) PostImport(id int) error {
if len(i.frontImageData) > 0 {
if err := i.ReaderWriter.UpdateImages(id, i.frontImageData, i.backImageData); err != nil {
return fmt.Errorf("error setting movie images: %s", err.Error())
return fmt.Errorf("error setting movie images: %v", err)
}
}
@ -147,7 +147,7 @@ func (i *Importer) FindExistingID() (*int, error) {
func (i *Importer) Create() (*int, error) {
created, err := i.ReaderWriter.Create(i.movie)
if err != nil {
return nil, fmt.Errorf("error creating movie: %s", err.Error())
return nil, fmt.Errorf("error creating movie: %v", err)
}
id := created.ID
@ -159,7 +159,7 @@ func (i *Importer) Update(id int) error {
movie.ID = id
_, err := i.ReaderWriter.UpdateFull(movie)
if err != nil {
return fmt.Errorf("error updating existing movie: %s", err.Error())
return fmt.Errorf("error updating existing movie: %v", err)
}
return nil

View file

@ -84,7 +84,7 @@ func ToJSON(reader models.PerformerReader, performer *models.Performer) (*jsonsc
image, err := reader.GetImage(performer.ID)
if err != nil {
return nil, fmt.Errorf("error getting performers image: %s", err.Error())
return nil, fmt.Errorf("error getting performers image: %v", err)
}
if len(image) > 0 {

View file

@ -34,7 +34,7 @@ func (i *Importer) PreImport() error {
if len(i.Input.Image) > 0 {
_, i.imageData, err = utils.ProcessBase64Image(i.Input.Image)
if err != nil {
return fmt.Errorf("invalid image: %s", err.Error())
return fmt.Errorf("invalid image: %v", err)
}
}
@ -78,7 +78,7 @@ func importTags(tagWriter models.TagReaderWriter, names []string, missingRefBeha
if missingRefBehaviour == models.ImportMissingRefEnumCreate {
createdTags, err := createTags(tagWriter, missingTags)
if err != nil {
return nil, fmt.Errorf("error creating tags: %s", err.Error())
return nil, fmt.Errorf("error creating tags: %v", err)
}
tags = append(tags, createdTags...)
@ -113,13 +113,13 @@ func (i *Importer) PostImport(id int) error {
tagIDs = append(tagIDs, t.ID)
}
if err := i.ReaderWriter.UpdateTags(id, tagIDs); err != nil {
return fmt.Errorf("failed to associate tags: %s", err.Error())
return fmt.Errorf("failed to associate tags: %v", err)
}
}
if len(i.imageData) > 0 {
if err := i.ReaderWriter.UpdateImage(id, i.imageData); err != nil {
return fmt.Errorf("error setting performer image: %s", err.Error())
return fmt.Errorf("error setting performer image: %v", err)
}
}
@ -148,7 +148,7 @@ func (i *Importer) FindExistingID() (*int, error) {
func (i *Importer) Create() (*int, error) {
created, err := i.ReaderWriter.Create(i.performer)
if err != nil {
return nil, fmt.Errorf("error creating performer: %s", err.Error())
return nil, fmt.Errorf("error creating performer: %v", err)
}
id := created.ID
@ -160,7 +160,7 @@ func (i *Importer) Update(id int) error {
performer.ID = id
_, err := i.ReaderWriter.UpdateFull(performer)
if err != nil {
return fmt.Errorf("error updating existing performer: %s", err.Error())
return fmt.Errorf("error updating existing performer: %v", err)
}
return nil

View file

@ -190,7 +190,7 @@ func AddTag(client *graphql.Client) error {
log.Infof("Adding tag to scene %v", scene.ID)
err = client.Mutate(context.Background(), &m, vars)
if err != nil {
return fmt.Errorf("Error mutating scene: %s", err.Error())
return fmt.Errorf("Error mutating scene: %v", err)
}
return nil
@ -225,7 +225,7 @@ func RemoveTag(client *graphql.Client) error {
err = client.Mutate(context.Background(), &m, vars)
if err != nil {
return fmt.Errorf("Error destroying tag: %s", err.Error())
return fmt.Errorf("Error destroying tag: %v", err)
}
return nil

View file

@ -97,7 +97,7 @@ func (t *jsPluginTask) Start() error {
t.waitGroup.Done()
if caught := recover(); caught != nil {
if caught == errStop {
if err, ok := caught.(error); ok && errors.Is(err, errStop) {
// TODO - log this
return
}

View file

@ -43,7 +43,7 @@ func (t *rawPluginTask) Start() error {
stdin, err := cmd.StdinPipe()
if err != nil {
return fmt.Errorf("error getting plugin process stdin: %s", err.Error())
return fmt.Errorf("error getting plugin process stdin: %v", err)
}
go func() {
@ -68,7 +68,7 @@ func (t *rawPluginTask) Start() error {
t.waitGroup.Add(1)
t.done = make(chan bool, 1)
if err = cmd.Start(); err != nil {
return fmt.Errorf("error running plugin: %s", err.Error())
return fmt.Errorf("error running plugin: %v", err)
}
go t.handlePluginStderr(t.plugin.Name, stderr)

View file

@ -58,7 +58,7 @@ func ToBasicJSON(reader models.SceneReader, scene *models.Scene) (*jsonschema.Sc
cover, err := reader.GetCover(scene.ID)
if err != nil {
return nil, fmt.Errorf("error getting scene cover: %s", err.Error())
return nil, fmt.Errorf("error getting scene cover: %v", err)
}
if len(cover) > 0 {
@ -136,7 +136,7 @@ func GetStudioName(reader models.StudioReader, scene *models.Scene) (string, err
func GetTagNames(reader models.TagReader, scene *models.Scene) ([]string, error) {
tags, err := reader.FindBySceneID(scene.ID)
if err != nil {
return nil, fmt.Errorf("error getting scene tags: %s", err.Error())
return nil, fmt.Errorf("error getting scene tags: %v", err)
}
return getTagNames(tags), nil
@ -175,7 +175,7 @@ func GetDependentTagIDs(tags models.TagReader, markerReader models.SceneMarkerRe
ret = utils.IntAppendUnique(ret, smm.PrimaryTagID)
smmt, err := tags.FindBySceneMarkerID(smm.ID)
if err != nil {
return nil, fmt.Errorf("invalid tags for scene marker: %s", err.Error())
return nil, fmt.Errorf("invalid tags for scene marker: %v", err)
}
for _, smmtt := range smmt {
@ -191,14 +191,14 @@ func GetDependentTagIDs(tags models.TagReader, markerReader models.SceneMarkerRe
func GetSceneMoviesJSON(movieReader models.MovieReader, sceneReader models.SceneReader, scene *models.Scene) ([]jsonschema.SceneMovie, error) {
sceneMovies, err := sceneReader.GetMovies(scene.ID)
if err != nil {
return nil, fmt.Errorf("error getting scene movies: %s", err.Error())
return nil, fmt.Errorf("error getting scene movies: %v", err)
}
var results []jsonschema.SceneMovie
for _, sceneMovie := range sceneMovies {
movie, err := movieReader.Find(sceneMovie.MovieID)
if err != nil {
return nil, fmt.Errorf("error getting movie: %s", err.Error())
return nil, fmt.Errorf("error getting movie: %v", err)
}
if movie.Name.Valid {
@ -234,7 +234,7 @@ func GetDependentMovieIDs(sceneReader models.SceneReader, scene *models.Scene) (
func GetSceneMarkersJSON(markerReader models.SceneMarkerReader, tagReader models.TagReader, scene *models.Scene) ([]jsonschema.SceneMarker, error) {
sceneMarkers, err := markerReader.FindBySceneID(scene.ID)
if err != nil {
return nil, fmt.Errorf("error getting scene markers: %s", err.Error())
return nil, fmt.Errorf("error getting scene markers: %v", err)
}
var results []jsonschema.SceneMarker
@ -242,12 +242,12 @@ func GetSceneMarkersJSON(markerReader models.SceneMarkerReader, tagReader models
for _, sceneMarker := range sceneMarkers {
primaryTag, err := tagReader.Find(sceneMarker.PrimaryTagID)
if err != nil {
return nil, fmt.Errorf("invalid primary tag for scene marker: %s", err.Error())
return nil, fmt.Errorf("invalid primary tag for scene marker: %v", err)
}
sceneMarkerTags, err := tagReader.FindBySceneMarkerID(sceneMarker.ID)
if err != nil {
return nil, fmt.Errorf("invalid tags for scene marker: %s", err.Error())
return nil, fmt.Errorf("invalid tags for scene marker: %v", err)
}
sceneMarkerJSON := jsonschema.SceneMarker{

View file

@ -59,7 +59,7 @@ func (i *Importer) PreImport() error {
if len(i.Input.Cover) > 0 {
_, i.coverImageData, err = utils.ProcessBase64Image(i.Input.Cover)
if err != nil {
return fmt.Errorf("invalid cover image: %s", err.Error())
return fmt.Errorf("invalid cover image: %v", err)
}
}
@ -138,7 +138,7 @@ func (i *Importer) populateStudio() error {
if i.Input.Studio != "" {
studio, err := i.StudioWriter.FindByName(i.Input.Studio, false)
if err != nil {
return fmt.Errorf("error finding studio by name: %s", err.Error())
return fmt.Errorf("error finding studio by name: %v", err)
}
if studio == nil {
@ -238,7 +238,7 @@ func (i *Importer) populatePerformers() error {
if i.MissingRefBehaviour == models.ImportMissingRefEnumCreate {
createdPerformers, err := i.createPerformers(missingPerformers)
if err != nil {
return fmt.Errorf("error creating scene performers: %s", err.Error())
return fmt.Errorf("error creating scene performers: %v", err)
}
performers = append(performers, createdPerformers...)
@ -274,7 +274,7 @@ func (i *Importer) populateMovies() error {
for _, inputMovie := range i.Input.Movies {
movie, err := i.MovieWriter.FindByName(inputMovie.MovieName, false)
if err != nil {
return fmt.Errorf("error finding scene movie: %s", err.Error())
return fmt.Errorf("error finding scene movie: %v", err)
}
if movie == nil {
@ -285,7 +285,7 @@ func (i *Importer) populateMovies() error {
if i.MissingRefBehaviour == models.ImportMissingRefEnumCreate {
movie, err = i.createMovie(inputMovie.MovieName)
if err != nil {
return fmt.Errorf("error creating scene movie: %s", err.Error())
return fmt.Errorf("error creating scene movie: %v", err)
}
}
@ -341,7 +341,7 @@ func (i *Importer) populateTags() error {
func (i *Importer) PostImport(id int) error {
if len(i.coverImageData) > 0 {
if err := i.ReaderWriter.UpdateCover(id, i.coverImageData); err != nil {
return fmt.Errorf("error setting scene images: %s", err.Error())
return fmt.Errorf("error setting scene images: %v", err)
}
}
@ -352,7 +352,7 @@ func (i *Importer) PostImport(id int) error {
}
if err := i.ReaderWriter.UpdateGalleries(id, galleryIDs); err != nil {
return fmt.Errorf("failed to associate galleries: %s", err.Error())
return fmt.Errorf("failed to associate galleries: %v", err)
}
}
@ -363,7 +363,7 @@ func (i *Importer) PostImport(id int) error {
}
if err := i.ReaderWriter.UpdatePerformers(id, performerIDs); err != nil {
return fmt.Errorf("failed to associate performers: %s", err.Error())
return fmt.Errorf("failed to associate performers: %v", err)
}
}
@ -372,7 +372,7 @@ func (i *Importer) PostImport(id int) error {
i.movies[index].SceneID = id
}
if err := i.ReaderWriter.UpdateMovies(id, i.movies); err != nil {
return fmt.Errorf("failed to associate movies: %s", err.Error())
return fmt.Errorf("failed to associate movies: %v", err)
}
}
@ -382,7 +382,7 @@ func (i *Importer) PostImport(id int) error {
tagIDs = append(tagIDs, t.ID)
}
if err := i.ReaderWriter.UpdateTags(id, tagIDs); err != nil {
return fmt.Errorf("failed to associate tags: %s", err.Error())
return fmt.Errorf("failed to associate tags: %v", err)
}
}
@ -419,7 +419,7 @@ func (i *Importer) FindExistingID() (*int, error) {
func (i *Importer) Create() (*int, error) {
created, err := i.ReaderWriter.Create(i.scene)
if err != nil {
return nil, fmt.Errorf("error creating scene: %s", err.Error())
return nil, fmt.Errorf("error creating scene: %v", err)
}
id := created.ID
@ -433,7 +433,7 @@ func (i *Importer) Update(id int) error {
i.ID = id
_, err := i.ReaderWriter.UpdateFull(scene)
if err != nil {
return fmt.Errorf("error updating existing scene: %s", err.Error())
return fmt.Errorf("error updating existing scene: %v", err)
}
return nil
@ -462,7 +462,7 @@ func importTags(tagWriter models.TagReaderWriter, names []string, missingRefBeha
if missingRefBehaviour == models.ImportMissingRefEnumCreate {
createdTags, err := createTags(tagWriter, missingTags)
if err != nil {
return nil, fmt.Errorf("error creating tags: %s", err.Error())
return nil, fmt.Errorf("error creating tags: %v", err)
}
tags = append(tags, createdTags...)

View file

@ -70,7 +70,7 @@ func (i *MarkerImporter) PostImport(id int) error {
tagIDs = append(tagIDs, t.ID)
}
if err := i.ReaderWriter.UpdateTags(id, tagIDs); err != nil {
return fmt.Errorf("failed to associate tags: %s", err.Error())
return fmt.Errorf("failed to associate tags: %v", err)
}
}
@ -101,7 +101,7 @@ func (i *MarkerImporter) FindExistingID() (*int, error) {
func (i *MarkerImporter) Create() (*int, error) {
created, err := i.ReaderWriter.Create(i.marker)
if err != nil {
return nil, fmt.Errorf("error creating marker: %s", err.Error())
return nil, fmt.Errorf("error creating marker: %v", err)
}
id := created.ID
@ -113,7 +113,7 @@ func (i *MarkerImporter) Update(id int) error {
marker.ID = id
_, err := i.ReaderWriter.Update(marker)
if err != nil {
return fmt.Errorf("error updating existing marker: %s", err.Error())
return fmt.Errorf("error updating existing marker: %v", err)
}
return nil

View file

@ -588,7 +588,8 @@ func (c *mappedScraperAttrConfig) UnmarshalYAML(unmarshal func(interface{}) erro
// try unmarshalling into a string first
if err := unmarshal(&c.Selector); err != nil {
// if it's a type error then we try to unmarshall to the full object
if _, ok := err.(*yaml.TypeError); !ok {
var typeErr *yaml.TypeError
if !errors.As(err, &typeErr) {
return err
}

View file

@ -2,6 +2,7 @@ package sqlite
import (
"database/sql"
"errors"
"fmt"
"github.com/stashapp/stash/pkg/models"
@ -75,7 +76,7 @@ func (qb *galleryQueryBuilder) Destroy(id int) error {
func (qb *galleryQueryBuilder) Find(id int) (*models.Gallery, error) {
var ret models.Gallery
if err := qb.get(id, &ret); err != nil {
if err == sql.ErrNoRows {
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
return nil, err

View file

@ -2,6 +2,7 @@ package sqlite
import (
"database/sql"
"errors"
"fmt"
"github.com/stashapp/stash/pkg/models"
@ -145,7 +146,7 @@ func (qb *imageQueryBuilder) FindMany(ids []int) ([]*models.Image, error) {
func (qb *imageQueryBuilder) find(id int) (*models.Image, error) {
var ret models.Image
if err := qb.get(id, &ret); err != nil {
if err == sql.ErrNoRows {
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
return nil, err

View file

@ -2,6 +2,7 @@ package sqlite
import (
"database/sql"
"errors"
"fmt"
"github.com/stashapp/stash/pkg/models"
@ -58,7 +59,7 @@ func (qb *movieQueryBuilder) Destroy(id int) error {
func (qb *movieQueryBuilder) Find(id int) (*models.Movie, error) {
var ret models.Movie
if err := qb.get(id, &ret); err != nil {
if err == sql.ErrNoRows {
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
return nil, err

View file

@ -2,6 +2,7 @@ package sqlite
import (
"database/sql"
"errors"
"fmt"
"strings"
@ -84,7 +85,7 @@ func (qb *performerQueryBuilder) Destroy(id int) error {
func (qb *performerQueryBuilder) Find(id int) (*models.Performer, error) {
var ret models.Performer
if err := qb.get(id, &ret); err != nil {
if err == sql.ErrNoRows {
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
return nil, err

View file

@ -2,6 +2,7 @@ package sqlite
import (
"database/sql"
"errors"
"fmt"
"reflect"
"strings"
@ -132,7 +133,7 @@ func (r *repository) runCountQuery(query string, args []interface{}) (int, error
}{0}
// Perform query and fetch result
if err := r.tx.Get(&result, query, args...); err != nil && err != sql.ErrNoRows {
if err := r.tx.Get(&result, query, args...); err != nil && !errors.Is(err, sql.ErrNoRows) {
return 0, err
}
@ -144,7 +145,7 @@ func (r *repository) runIdsQuery(query string, args []interface{}) ([]int, error
Int int `db:"id"`
}
if err := r.tx.Select(&result, query, args...); err != nil && err != sql.ErrNoRows {
if err := r.tx.Select(&result, query, args...); err != nil && !errors.Is(err, sql.ErrNoRows) {
return []int{}, err
}
@ -162,7 +163,7 @@ func (r *repository) runSumQuery(query string, args []interface{}) (float64, err
}{0}
// Perform query and fetch result
if err := r.tx.Get(&result, query, args...); err != nil && err != sql.ErrNoRows {
if err := r.tx.Get(&result, query, args...); err != nil && !errors.Is(err, sql.ErrNoRows) {
return 0, err
}
@ -172,7 +173,7 @@ func (r *repository) runSumQuery(query string, args []interface{}) (float64, err
func (r *repository) queryFunc(query string, args []interface{}, f func(rows *sqlx.Rows) error) error {
rows, err := r.tx.Queryx(query, args...)
if err != nil && err != sql.ErrNoRows {
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return err
}
defer rows.Close()
@ -193,7 +194,7 @@ func (r *repository) queryFunc(query string, args []interface{}, f func(rows *sq
func (r *repository) query(query string, args []interface{}, out objectList) error {
rows, err := r.tx.Queryx(query, args...)
if err != nil && err != sql.ErrNoRows {
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return err
}
defer rows.Close()
@ -216,7 +217,7 @@ func (r *repository) query(query string, args []interface{}, out objectList) err
func (r *repository) querySimple(query string, args []interface{}, out interface{}) error {
rows, err := r.tx.Queryx(query, args...)
if err != nil && err != sql.ErrNoRows {
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return err
}
defer rows.Close()

View file

@ -2,6 +2,7 @@ package sqlite
import (
"database/sql"
"errors"
"fmt"
"github.com/stashapp/stash/pkg/models"
@ -72,7 +73,7 @@ func (qb *savedFilterQueryBuilder) Destroy(id int) error {
func (qb *savedFilterQueryBuilder) Find(id int) (*models.SavedFilter, error) {
var ret models.SavedFilter
if err := qb.get(id, &ret); err != nil {
if err == sql.ErrNoRows {
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
return nil, err

View file

@ -2,6 +2,7 @@ package sqlite
import (
"database/sql"
"errors"
"fmt"
"strconv"
"strings"
@ -215,7 +216,7 @@ func (qb *sceneQueryBuilder) FindMany(ids []int) ([]*models.Scene, error) {
func (qb *sceneQueryBuilder) find(id int) (*models.Scene, error) {
var ret models.Scene
if err := qb.get(id, &ret); err != nil {
if err == sql.ErrNoRows {
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
return nil, err

View file

@ -2,6 +2,7 @@ package sqlite
import (
"database/sql"
"errors"
"fmt"
"github.com/stashapp/stash/pkg/database"
@ -271,7 +272,7 @@ func (qb *sceneMarkerQueryBuilder) querySceneMarkers(query string, args []interf
func (qb *sceneMarkerQueryBuilder) queryMarkerStringsResultType(query string, args []interface{}) ([]*models.MarkerStringsResultType, error) {
rows, err := database.DB.Queryx(query, args...)
if err != nil && err != sql.ErrNoRows {
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return nil, err
}
defer rows.Close()

View file

@ -2,6 +2,7 @@ package sqlite
import (
"database/sql"
"errors"
"github.com/stashapp/stash/pkg/models"
)
@ -47,7 +48,7 @@ func (qb *scrapedItemQueryBuilder) Find(id int) (*models.ScrapedItem, error) {
func (qb *scrapedItemQueryBuilder) find(id int) (*models.ScrapedItem, error) {
var ret models.ScrapedItem
if err := qb.get(id, &ret); err != nil {
if err == sql.ErrNoRows {
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
return nil, err

View file

@ -2,6 +2,7 @@ package sqlite
import (
"database/sql"
"errors"
"fmt"
"math/rand"
"regexp"
@ -228,7 +229,7 @@ func getCountCriterionClause(primaryTable, joinTable, primaryFK string, criterio
func getImage(tx dbi, query string, args ...interface{}) ([]byte, error) {
rows, err := tx.Queryx(query, args...)
if err != nil && err != sql.ErrNoRows {
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return nil, err
}
defer rows.Close()

View file

@ -2,6 +2,7 @@ package sqlite
import (
"database/sql"
"errors"
"fmt"
"strings"
@ -68,7 +69,7 @@ func (qb *studioQueryBuilder) Destroy(id int) error {
func (qb *studioQueryBuilder) Find(id int) (*models.Studio, error) {
var ret models.Studio
if err := qb.get(id, &ret); err != nil {
if err == sql.ErrNoRows {
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
return nil, err

View file

@ -87,7 +87,7 @@ func (qb *tagQueryBuilder) Destroy(id int) error {
func (qb *tagQueryBuilder) Find(id int) (*models.Tag, error) {
var ret models.Tag
if err := qb.get(id, &ret); err != nil {
if err == sql.ErrNoRows {
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
return nil, err

View file

@ -36,7 +36,7 @@ func (t *transaction) Begin() error {
var err error
t.tx, err = database.DB.BeginTxx(t.Ctx, nil)
if err != nil {
return fmt.Errorf("error starting transaction: %s", err.Error())
return fmt.Errorf("error starting transaction: %v", err)
}
return nil
@ -49,7 +49,7 @@ func (t *transaction) Rollback() error {
err := t.tx.Rollback()
if err != nil {
return fmt.Errorf("error rolling back transaction: %s", err.Error())
return fmt.Errorf("error rolling back transaction: %v", err)
}
t.tx = nil
@ -63,7 +63,7 @@ func (t *transaction) Commit() error {
err := t.tx.Commit()
if err != nil {
return fmt.Errorf("error committing transaction: %s", err.Error())
return fmt.Errorf("error committing transaction: %v", err)
}
t.tx = nil

View file

@ -30,7 +30,7 @@ func ToJSON(reader models.StudioReader, studio *models.Studio) (*jsonschema.Stud
if studio.ParentID.Valid {
parent, err := reader.Find(int(studio.ParentID.Int64))
if err != nil {
return nil, fmt.Errorf("error getting parent studio: %s", err.Error())
return nil, fmt.Errorf("error getting parent studio: %v", err)
}
if parent != nil {
@ -44,14 +44,14 @@ func ToJSON(reader models.StudioReader, studio *models.Studio) (*jsonschema.Stud
aliases, err := reader.GetAliases(studio.ID)
if err != nil {
return nil, fmt.Errorf("error getting studio aliases: %s", err.Error())
return nil, fmt.Errorf("error getting studio aliases: %v", err)
}
newStudioJSON.Aliases = aliases
image, err := reader.GetImage(studio.ID)
if err != nil {
return nil, fmt.Errorf("error getting studio image: %s", err.Error())
return nil, fmt.Errorf("error getting studio image: %v", err)
}
if len(image) > 0 {

View file

@ -42,7 +42,7 @@ func (i *Importer) PreImport() error {
if len(i.Input.Image) > 0 {
_, i.imageData, err = utils.ProcessBase64Image(i.Input.Image)
if err != nil {
return fmt.Errorf("invalid image: %s", err.Error())
return fmt.Errorf("invalid image: %v", err)
}
}
@ -53,7 +53,7 @@ func (i *Importer) populateParentStudio() error {
if i.Input.ParentStudio != "" {
studio, err := i.ReaderWriter.FindByName(i.Input.ParentStudio, false)
if err != nil {
return fmt.Errorf("error finding studio by name: %s", err.Error())
return fmt.Errorf("error finding studio by name: %v", err)
}
if studio == nil {
@ -97,12 +97,12 @@ func (i *Importer) createParentStudio(name string) (int, error) {
func (i *Importer) PostImport(id int) error {
if len(i.imageData) > 0 {
if err := i.ReaderWriter.UpdateImage(id, i.imageData); err != nil {
return fmt.Errorf("error setting studio image: %s", err.Error())
return fmt.Errorf("error setting studio image: %v", err)
}
}
if err := i.ReaderWriter.UpdateAliases(id, i.Input.Aliases); err != nil {
return fmt.Errorf("error setting tag aliases: %s", err.Error())
return fmt.Errorf("error setting tag aliases: %v", err)
}
return nil
@ -130,7 +130,7 @@ func (i *Importer) FindExistingID() (*int, error) {
func (i *Importer) Create() (*int, error) {
created, err := i.ReaderWriter.Create(i.studio)
if err != nil {
return nil, fmt.Errorf("error creating studio: %s", err.Error())
return nil, fmt.Errorf("error creating studio: %v", err)
}
id := created.ID
@ -142,7 +142,7 @@ func (i *Importer) Update(id int) error {
studio.ID = id
_, err := i.ReaderWriter.UpdateFull(studio)
if err != nil {
return fmt.Errorf("error updating existing studio: %s", err.Error())
return fmt.Errorf("error updating existing studio: %v", err)
}
return nil

View file

@ -18,14 +18,14 @@ func ToJSON(reader models.TagReader, tag *models.Tag) (*jsonschema.Tag, error) {
aliases, err := reader.GetAliases(tag.ID)
if err != nil {
return nil, fmt.Errorf("error getting tag aliases: %s", err.Error())
return nil, fmt.Errorf("error getting tag aliases: %v", err)
}
newTagJSON.Aliases = aliases
image, err := reader.GetImage(tag.ID)
if err != nil {
return nil, fmt.Errorf("error getting tag image: %s", err.Error())
return nil, fmt.Errorf("error getting tag image: %v", err)
}
if len(image) > 0 {
@ -34,7 +34,7 @@ func ToJSON(reader models.TagReader, tag *models.Tag) (*jsonschema.Tag, error) {
parents, err := reader.FindByChildTagID(tag.ID)
if err != nil {
return nil, fmt.Errorf("error getting parents: %s", err.Error())
return nil, fmt.Errorf("error getting parents: %v", err)
}
newTagJSON.Parents = GetNames(parents)

View file

@ -40,7 +40,7 @@ func (i *Importer) PreImport() error {
if len(i.Input.Image) > 0 {
_, i.imageData, err = utils.ProcessBase64Image(i.Input.Image)
if err != nil {
return fmt.Errorf("invalid image: %s", err.Error())
return fmt.Errorf("invalid image: %v", err)
}
}
@ -50,12 +50,12 @@ func (i *Importer) PreImport() error {
func (i *Importer) PostImport(id int) error {
if len(i.imageData) > 0 {
if err := i.ReaderWriter.UpdateImage(id, i.imageData); err != nil {
return fmt.Errorf("error setting tag image: %s", err.Error())
return fmt.Errorf("error setting tag image: %v", err)
}
}
if err := i.ReaderWriter.UpdateAliases(id, i.Input.Aliases); err != nil {
return fmt.Errorf("error setting tag aliases: %s", err.Error())
return fmt.Errorf("error setting tag aliases: %v", err)
}
parents, err := i.getParents()
@ -64,7 +64,7 @@ func (i *Importer) PostImport(id int) error {
}
if err := i.ReaderWriter.UpdateParentTags(id, parents); err != nil {
return fmt.Errorf("error setting parents: %s", err.Error())
return fmt.Errorf("error setting parents: %v", err)
}
return nil
@ -92,7 +92,7 @@ func (i *Importer) FindExistingID() (*int, error) {
func (i *Importer) Create() (*int, error) {
created, err := i.ReaderWriter.Create(i.tag)
if err != nil {
return nil, fmt.Errorf("error creating tag: %s", err.Error())
return nil, fmt.Errorf("error creating tag: %v", err)
}
id := created.ID
@ -104,7 +104,7 @@ func (i *Importer) Update(id int) error {
tag.ID = id
_, err := i.ReaderWriter.UpdateFull(tag)
if err != nil {
return fmt.Errorf("error updating existing tag: %s", err.Error())
return fmt.Errorf("error updating existing tag: %v", err)
}
return nil
@ -115,7 +115,7 @@ func (i *Importer) getParents() ([]int, error) {
for _, parent := range i.Input.Parents {
tag, err := i.ReaderWriter.FindByName(parent, false)
if err != nil {
return nil, fmt.Errorf("error finding parent by name: %s", err.Error())
return nil, fmt.Errorf("error finding parent by name: %v", err)
}
if tag == nil {