upgrade sqlite3

This commit is contained in:
sentriz
2020-04-24 23:14:59 +01:00
parent 13427e77d2
commit f52ce807af
40 changed files with 48 additions and 129 deletions

View File

@@ -11,7 +11,7 @@ COPY go.mod .
COPY go.sum . COPY go.sum .
RUN go mod download RUN go mod download
COPY . . COPY . .
RUN ./_do_build_server && ./_do_build_scanner RUN ./_do_build_server
FROM alpine:3.9 FROM alpine:3.9
RUN apk add -U --no-cache \ RUN apk add -U --no-cache \
@@ -24,7 +24,6 @@ COPY --from=builder \
/usr/lib/ /usr/lib/
COPY --from=builder \ COPY --from=builder \
/src/gonic \ /src/gonic \
/src/gonicscan \
/bin/ /bin/
VOLUME ["/data", "/music", "/cache"] VOLUME ["/data", "/music", "/cache"]
EXPOSE 80 EXPOSE 80

View File

@@ -12,7 +12,7 @@ WORKDIR /src
COPY . . COPY . .
RUN --mount=type=cache,target=/go/pkg/mod \ RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/root/.cache/go-build \
./_do_build_server && ./_do_build_scanner ./_do_build_server
FROM alpine:3.9 FROM alpine:3.9
RUN apk add -U --no-cache \ RUN apk add -U --no-cache \
@@ -25,7 +25,6 @@ COPY --from=builder \
/usr/lib/ /usr/lib/
COPY --from=builder \ COPY --from=builder \
/src/gonic \ /src/gonic \
/src/gonicscan \
/bin/ /bin/
VOLUME ["/data", "/music", "/cache"] VOLUME ["/data", "/music", "/cache"]
EXPOSE 80 EXPOSE 80

View File

@@ -1,2 +0,0 @@
sqlite_foreign_keys
sqlite_vacuum_incr

View File

@@ -1 +0,0 @@
export GO111MODULE=on

View File

@@ -1,8 +0,0 @@
#!/bin/sh
# using sh, is run from alpine
. ./_build_vars
go build \
-o gonicscan \
-tags "$(tr '\n' ' ' < _build_tags)" \
cmd/gonicscan/main.go

View File

@@ -1,9 +1,5 @@
#!/bin/sh #!/bin/sh
# using sh, is run from alpine # using sh, is run from alpine
. ./_build_vars
./_do_gen_assets ./_do_gen_assets
go build \ go build -o gonic cmd/gonic/main.go
-o gonic \
-tags "$(tr '\n' ' ' < _build_tags)" \
cmd/gonic/main.go

View File

@@ -52,7 +52,6 @@ package version
const NAME = "gonic" const NAME = "gonic"
const NAME_UPPER = "GONIC" const NAME_UPPER = "GONIC"
const NAME_EMBED = "gonicembed" const NAME_EMBED = "gonicembed"
const NAME_SCAN = "gonicscan"
const VERSION = "$new_version" const VERSION = "$new_version"
EOL EOL

View File

@@ -1,7 +0,0 @@
#!/usr/bin/env bash
. ./_build_vars
go run \
-tags "$(tr '\n' ' ' < _build_tags)" \
cmd/gonicscan/main.go \
$@

View File

@@ -1,8 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env bash
. ./_build_vars
./_do_gen_assets ./_do_gen_assets
go run \ go run cmd/gonic/main.go $@
-tags "$(tr '\n' ' ' < _build_tags)" \
cmd/gonic/main.go \
$@

View File

@@ -12,7 +12,7 @@ import (
"github.com/oklog/run" "github.com/oklog/run"
"github.com/peterbourgon/ff" "github.com/peterbourgon/ff"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/server" "go.senan.xyz/gonic/server"
"go.senan.xyz/gonic/version" "go.senan.xyz/gonic/version"
) )

View File

@@ -118,21 +118,11 @@ func processAssets(c *config, files []string) error {
func main() { func main() {
set := flag.NewFlagSet(version.NAME_EMBED, flag.ExitOnError) set := flag.NewFlagSet(version.NAME_EMBED, flag.ExitOnError)
outPath := set.String( outPath := set.String("out-path", "", "generated file's path (required)")
"out-path", "", pkgName := set.String("package-name", "assets", "generated file's package name")
"generated file's path (required)") tagList := set.String("tag-list", "", "generated file's build tag list")
pkgName := set.String( assetsVarName := set.String("assets-var-name", "Assets", "generated assets var name")
"package-name", "assets", assetPathPrefix := set.String("asset-path-prefix", "", "generated assets map key prefix")
"generated file's package name")
tagList := set.String(
"tag-list", "",
"generated file's build tag list")
assetsVarName := set.String(
"assets-var-name", "Assets",
"generated file's assets var name")
assetPathPrefix := set.String(
"asset-path-prefix", "",
"generated file's assets map key prefix to be stripped")
if err := ff.Parse(set, os.Args[1:]); err != nil { if err := ff.Parse(set, os.Args[1:]); err != nil {
log.Fatalf("error parsing args: %v\n", err) log.Fatalf("error parsing args: %v\n", err)
} }

View File

@@ -1,45 +0,0 @@
package main
import (
"flag"
"log"
"os"
_ "github.com/jinzhu/gorm/dialects/sqlite"
"github.com/peterbourgon/ff"
"go.senan.xyz/gonic/db"
"go.senan.xyz/gonic/scanner"
"go.senan.xyz/gonic/version"
)
func main() {
set := flag.NewFlagSet(version.NAME_SCAN, flag.ExitOnError)
musicPath := set.String("music-path", "", "path to music")
dbPath := set.String("db-path", "gonic.db", "path to database (optional)")
fullScan := set.Bool("full-scan", false, "ignore file modtimes while scanning (optional)")
if err := ff.Parse(set, os.Args[1:],
ff.WithEnvVarPrefix(version.NAME_UPPER),
); err != nil {
log.Fatalf("error parsing args: %v\n", err)
}
if _, err := os.Stat(*musicPath); os.IsNotExist(err) {
log.Fatal("please provide a valid music directory")
}
db, err := db.New(*dbPath)
if err != nil {
log.Fatalf("error opening database: %v\n", err)
}
defer db.Close()
s := scanner.New(*musicPath, db)
var scan func() error
switch {
case *fullScan:
scan = s.StartFull
default:
scan = s.StartInc
}
if err := scan(); err != nil {
log.Fatalf("error during scan: %v\n", err)
}
}

1
go.mod
View File

@@ -18,6 +18,7 @@ require (
github.com/josephburnett/jd v0.0.0-20190531151850-1f9071c800e7 github.com/josephburnett/jd v0.0.0-20190531151850-1f9071c800e7
github.com/karrick/godirwalk v1.15.2 github.com/karrick/godirwalk v1.15.2
github.com/kr/pretty v0.1.0 // indirect github.com/kr/pretty v0.1.0 // indirect
github.com/mattn/go-sqlite3 v2.0.3+incompatible
github.com/nicksellen/audiotags v0.0.0-20160226222119-94015fa599bd github.com/nicksellen/audiotags v0.0.0-20160226222119-94015fa599bd
github.com/oklog/run v1.1.0 github.com/oklog/run v1.1.0
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c

3
go.sum
View File

@@ -130,8 +130,9 @@ github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lucasb-eyer/go-colorful v0.0.0-20181028223441-12d3b2882a08/go.mod h1:NXg0ArsFk0Y01623LgUqoqcouGDB+PwCCQlrwrG6xJ4= github.com/lucasb-eyer/go-colorful v0.0.0-20181028223441-12d3b2882a08/go.mod h1:NXg0ArsFk0Y01623LgUqoqcouGDB+PwCCQlrwrG6xJ4=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o=
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mewkiz/flac v1.0.5 h1:dHGW/2kf+/KZ2GGqSVayNEhL9pluKn/rr/h/QqD9Ogc= github.com/mewkiz/flac v1.0.5 h1:dHGW/2kf+/KZ2GGqSVayNEhL9pluKn/rr/h/QqD9Ogc=
github.com/mewkiz/flac v1.0.5/go.mod h1:EHZNU32dMF6alpurYyKHDLYpW1lYpBZ5WrXi/VuNIGs= github.com/mewkiz/flac v1.0.5/go.mod h1:EHZNU32dMF6alpurYyKHDLYpW1lYpBZ5WrXi/VuNIGs=

View File

@@ -18,7 +18,7 @@ import (
"github.com/oxtoacart/bpool" "github.com/oxtoacart/bpool"
"github.com/wader/gormstore" "github.com/wader/gormstore"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/server/assets" "go.senan.xyz/gonic/server/assets"
"go.senan.xyz/gonic/server/ctrlbase" "go.senan.xyz/gonic/server/ctrlbase"
"go.senan.xyz/gonic/version" "go.senan.xyz/gonic/version"

View File

@@ -7,8 +7,8 @@ import (
"strconv" "strconv"
"time" "time"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/scanner" "go.senan.xyz/gonic/server/scanner"
"go.senan.xyz/gonic/server/encode" "go.senan.xyz/gonic/server/encode"
"go.senan.xyz/gonic/server/lastfm" "go.senan.xyz/gonic/server/lastfm"
) )

View File

@@ -10,7 +10,7 @@ import (
"github.com/jinzhu/gorm" "github.com/jinzhu/gorm"
"github.com/pkg/errors" "github.com/pkg/errors"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
) )
func playlistParseLine(c *Controller, path string) (int, error) { func playlistParseLine(c *Controller, path string) (int, error) {

View File

@@ -6,7 +6,7 @@ import (
"github.com/gorilla/sessions" "github.com/gorilla/sessions"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
) )
func (c *Controller) WithSession(next http.Handler) http.Handler { func (c *Controller) WithSession(next http.Handler) http.Handler {

View File

@@ -6,8 +6,8 @@ import (
"net/http" "net/http"
"path" "path"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/scanner" "go.senan.xyz/gonic/server/scanner"
) )
type statusWriter struct { type statusWriter struct {

View File

@@ -13,7 +13,7 @@ import (
jd "github.com/josephburnett/jd/lib" jd "github.com/josephburnett/jd/lib"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/server/ctrlbase" "go.senan.xyz/gonic/server/ctrlbase"
"go.senan.xyz/gonic/server/ctrlsubsonic/params" "go.senan.xyz/gonic/server/ctrlsubsonic/params"
) )

View File

@@ -8,7 +8,7 @@ import (
"github.com/jinzhu/gorm" "github.com/jinzhu/gorm"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/server/ctrlsubsonic/params" "go.senan.xyz/gonic/server/ctrlsubsonic/params"
"go.senan.xyz/gonic/server/ctrlsubsonic/spec" "go.senan.xyz/gonic/server/ctrlsubsonic/spec"
) )

View File

@@ -8,7 +8,7 @@ import (
"github.com/jinzhu/gorm" "github.com/jinzhu/gorm"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/server/ctrlsubsonic/params" "go.senan.xyz/gonic/server/ctrlsubsonic/params"
"go.senan.xyz/gonic/server/ctrlsubsonic/spec" "go.senan.xyz/gonic/server/ctrlsubsonic/spec"
"go.senan.xyz/gonic/server/lastfm" "go.senan.xyz/gonic/server/lastfm"

View File

@@ -10,8 +10,8 @@ import (
"github.com/jinzhu/gorm" "github.com/jinzhu/gorm"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/scanner" "go.senan.xyz/gonic/server/scanner"
"go.senan.xyz/gonic/server/ctrlsubsonic/params" "go.senan.xyz/gonic/server/ctrlsubsonic/params"
"go.senan.xyz/gonic/server/ctrlsubsonic/spec" "go.senan.xyz/gonic/server/ctrlsubsonic/spec"
"go.senan.xyz/gonic/server/lastfm" "go.senan.xyz/gonic/server/lastfm"

View File

@@ -9,7 +9,7 @@ import (
"github.com/jinzhu/gorm" "github.com/jinzhu/gorm"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/server/ctrlsubsonic/params" "go.senan.xyz/gonic/server/ctrlsubsonic/params"
"go.senan.xyz/gonic/server/ctrlsubsonic/spec" "go.senan.xyz/gonic/server/ctrlsubsonic/spec"
"go.senan.xyz/gonic/server/encode" "go.senan.xyz/gonic/server/encode"

View File

@@ -1,6 +1,6 @@
package spec package spec
import "go.senan.xyz/gonic/db" import "go.senan.xyz/gonic/server/db"
func NewPlaylist(p *db.Playlist) *Playlist { func NewPlaylist(p *db.Playlist) *Playlist {
return &Playlist{ return &Playlist{

View File

@@ -3,7 +3,7 @@ package spec
import ( import (
"path" "path"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
) )
func NewAlbumByFolder(f *db.Album) *Album { func NewAlbumByFolder(f *db.Album) *Album {

View File

@@ -3,7 +3,7 @@ package spec
import ( import (
"path" "path"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
) )
func NewAlbumByTags(a *db.Album, artist *db.Artist) *Album { func NewAlbumByTags(a *db.Album, artist *db.Artist) *Album {

View File

@@ -1,7 +1,6 @@
package db package db
import ( import (
"fmt"
"log" "log"
"net/url" "net/url"
"os" "os"
@@ -16,11 +15,12 @@ var (
dbOptions = url.Values{ dbOptions = url.Values{
// with this, multiple connections share a single data and schema cache. // with this, multiple connections share a single data and schema cache.
// see https://www.sqlite.org/sharedcache.html // see https://www.sqlite.org/sharedcache.html
"cache": []string{"shared"}, "cache": {"shared"},
// with this, the db sleeps for a little while when locked. can prevent // with this, the db sleeps for a little while when locked. can prevent
// a SQLITE_BUSY. see https://www.sqlite.org/c3ref/busy_timeout.html // a SQLITE_BUSY. see https://www.sqlite.org/c3ref/busy_timeout.html
"_busy_timeout": []string{"30000"}, "_busy_timeout": {"30000"},
"_journal_mode": []string{"WAL"}, "_journal_mode": {"WAL"},
"_foreign_keys": {"true"},
} }
) )
@@ -29,8 +29,9 @@ type DB struct {
} }
func New(path string) (*DB, error) { func New(path string) (*DB, error) {
pathAndArgs := fmt.Sprintf("%s?%s", path, dbOptions.Encode()) url := url.URL{Path: path}
db, err := gorm.Open("sqlite3", pathAndArgs) url.RawQuery = dbOptions.Encode()
db, err := gorm.Open("sqlite3", url.String())
if err != nil { if err != nil {
return nil, errors.Wrap(err, "with gorm") return nil, errors.Wrap(err, "with gorm")
} }

View File

@@ -7,7 +7,7 @@ import (
"strings" "strings"
"time" "time"
"go.senan.xyz/gonic/mime" "go.senan.xyz/gonic/server/mime"
) )
func splitInt(in, sep string) []int { func splitInt(in, sep string) []int {

View File

@@ -14,7 +14,7 @@ import (
"github.com/faiface/beep/mp3" "github.com/faiface/beep/mp3"
"github.com/faiface/beep/speaker" "github.com/faiface/beep/speaker"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/server/ctrlsubsonic/spec" "go.senan.xyz/gonic/server/ctrlsubsonic/spec"
) )

View File

@@ -13,7 +13,7 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
) )
var ( var (

View File

@@ -15,10 +15,10 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/rainycape/unidecode" "github.com/rainycape/unidecode"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/mime" "go.senan.xyz/gonic/server/mime"
"go.senan.xyz/gonic/scanner/stack" "go.senan.xyz/gonic/server/scanner/stack"
"go.senan.xyz/gonic/scanner/tags" "go.senan.xyz/gonic/server/scanner/tags"
) )
// isScanning acts as an atomic boolean semaphore. we don't // isScanning acts as an atomic boolean semaphore. we don't

View File

@@ -7,7 +7,7 @@ import (
_ "github.com/jinzhu/gorm/dialects/sqlite" _ "github.com/jinzhu/gorm/dialects/sqlite"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
) )
var testScanner *Scanner var testScanner *Scanner

View File

@@ -4,7 +4,7 @@ import (
"fmt" "fmt"
"strings" "strings"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
) )
type item struct { type item struct {

View File

@@ -3,7 +3,7 @@ package stack
import ( import (
"testing" "testing"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
) )
func TestFolderStack(t *testing.T) { func TestFolderStack(t *testing.T) {

View File

@@ -10,8 +10,8 @@ import (
"github.com/gorilla/mux" "github.com/gorilla/mux"
"go.senan.xyz/gonic/db" "go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/scanner" "go.senan.xyz/gonic/server/scanner"
"go.senan.xyz/gonic/server/assets" "go.senan.xyz/gonic/server/assets"
"go.senan.xyz/gonic/server/ctrladmin" "go.senan.xyz/gonic/server/ctrladmin"
"go.senan.xyz/gonic/server/ctrlbase" "go.senan.xyz/gonic/server/ctrlbase"