mirror of
https://github.com/stashapp/stash.git
synced 2025-12-06 08:26:00 +01:00
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:
parent
38384f2c60
commit
c6f6205e4f
46 changed files with 176 additions and 143 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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...)
|
||||
|
|
|
|||
|
|
@ -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, ¬FoundErr) {
|
||||
instance.isNewSystem = true
|
||||
return nil
|
||||
} else if err != nil {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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{
|
||||
|
|
|
|||
|
|
@ -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...)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in a new issue