upgrade sqlite3
This commit is contained in:
@@ -11,7 +11,7 @@ COPY go.mod .
|
||||
COPY go.sum .
|
||||
RUN go mod download
|
||||
COPY . .
|
||||
RUN ./_do_build_server && ./_do_build_scanner
|
||||
RUN ./_do_build_server
|
||||
|
||||
FROM alpine:3.9
|
||||
RUN apk add -U --no-cache \
|
||||
@@ -24,7 +24,6 @@ COPY --from=builder \
|
||||
/usr/lib/
|
||||
COPY --from=builder \
|
||||
/src/gonic \
|
||||
/src/gonicscan \
|
||||
/bin/
|
||||
VOLUME ["/data", "/music", "/cache"]
|
||||
EXPOSE 80
|
||||
|
||||
@@ -12,7 +12,7 @@ WORKDIR /src
|
||||
COPY . .
|
||||
RUN --mount=type=cache,target=/go/pkg/mod \
|
||||
--mount=type=cache,target=/root/.cache/go-build \
|
||||
./_do_build_server && ./_do_build_scanner
|
||||
./_do_build_server
|
||||
|
||||
FROM alpine:3.9
|
||||
RUN apk add -U --no-cache \
|
||||
@@ -25,7 +25,6 @@ COPY --from=builder \
|
||||
/usr/lib/
|
||||
COPY --from=builder \
|
||||
/src/gonic \
|
||||
/src/gonicscan \
|
||||
/bin/
|
||||
VOLUME ["/data", "/music", "/cache"]
|
||||
EXPOSE 80
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
sqlite_foreign_keys
|
||||
sqlite_vacuum_incr
|
||||
@@ -1 +0,0 @@
|
||||
export GO111MODULE=on
|
||||
@@ -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
|
||||
@@ -1,9 +1,5 @@
|
||||
#!/bin/sh
|
||||
# using sh, is run from alpine
|
||||
|
||||
. ./_build_vars
|
||||
./_do_gen_assets
|
||||
go build \
|
||||
-o gonic \
|
||||
-tags "$(tr '\n' ' ' < _build_tags)" \
|
||||
cmd/gonic/main.go
|
||||
go build -o gonic cmd/gonic/main.go
|
||||
|
||||
@@ -52,7 +52,6 @@ package version
|
||||
const NAME = "gonic"
|
||||
const NAME_UPPER = "GONIC"
|
||||
const NAME_EMBED = "gonicembed"
|
||||
const NAME_SCAN = "gonicscan"
|
||||
const VERSION = "$new_version"
|
||||
EOL
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
. ./_build_vars
|
||||
go run \
|
||||
-tags "$(tr '\n' ' ' < _build_tags)" \
|
||||
cmd/gonicscan/main.go \
|
||||
$@
|
||||
@@ -1,8 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
. ./_build_vars
|
||||
./_do_gen_assets
|
||||
go run \
|
||||
-tags "$(tr '\n' ' ' < _build_tags)" \
|
||||
cmd/gonic/main.go \
|
||||
$@
|
||||
go run cmd/gonic/main.go $@
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
"github.com/oklog/run"
|
||||
"github.com/peterbourgon/ff"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
"go.senan.xyz/gonic/server"
|
||||
"go.senan.xyz/gonic/version"
|
||||
)
|
||||
|
||||
@@ -118,21 +118,11 @@ func processAssets(c *config, files []string) error {
|
||||
|
||||
func main() {
|
||||
set := flag.NewFlagSet(version.NAME_EMBED, flag.ExitOnError)
|
||||
outPath := set.String(
|
||||
"out-path", "",
|
||||
"generated file's path (required)")
|
||||
pkgName := set.String(
|
||||
"package-name", "assets",
|
||||
"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")
|
||||
outPath := set.String("out-path", "", "generated file's path (required)")
|
||||
pkgName := set.String("package-name", "assets", "generated file's package name")
|
||||
tagList := set.String("tag-list", "", "generated file's build tag list")
|
||||
assetsVarName := set.String("assets-var-name", "Assets", "generated assets var name")
|
||||
assetPathPrefix := set.String("asset-path-prefix", "", "generated assets map key prefix")
|
||||
if err := ff.Parse(set, os.Args[1:]); err != nil {
|
||||
log.Fatalf("error parsing args: %v\n", err)
|
||||
}
|
||||
|
||||
@@ -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
1
go.mod
@@ -18,6 +18,7 @@ require (
|
||||
github.com/josephburnett/jd v0.0.0-20190531151850-1f9071c800e7
|
||||
github.com/karrick/godirwalk v1.15.2
|
||||
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/oklog/run v1.1.0
|
||||
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c
|
||||
|
||||
3
go.sum
3
go.sum
@@ -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/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-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o=
|
||||
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/mewkiz/flac v1.0.5 h1:dHGW/2kf+/KZ2GGqSVayNEhL9pluKn/rr/h/QqD9Ogc=
|
||||
github.com/mewkiz/flac v1.0.5/go.mod h1:EHZNU32dMF6alpurYyKHDLYpW1lYpBZ5WrXi/VuNIGs=
|
||||
|
||||
@@ -18,7 +18,7 @@ import (
|
||||
"github.com/oxtoacart/bpool"
|
||||
"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/ctrlbase"
|
||||
"go.senan.xyz/gonic/version"
|
||||
|
||||
@@ -7,8 +7,8 @@ import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/scanner"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
"go.senan.xyz/gonic/server/scanner"
|
||||
"go.senan.xyz/gonic/server/encode"
|
||||
"go.senan.xyz/gonic/server/lastfm"
|
||||
)
|
||||
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
)
|
||||
|
||||
func playlistParseLine(c *Controller, path string) (int, error) {
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
|
||||
"github.com/gorilla/sessions"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
)
|
||||
|
||||
func (c *Controller) WithSession(next http.Handler) http.Handler {
|
||||
|
||||
@@ -6,8 +6,8 @@ import (
|
||||
"net/http"
|
||||
"path"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/scanner"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
"go.senan.xyz/gonic/server/scanner"
|
||||
)
|
||||
|
||||
type statusWriter struct {
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
|
||||
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/ctrlsubsonic/params"
|
||||
)
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
|
||||
"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/spec"
|
||||
)
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
|
||||
"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/spec"
|
||||
"go.senan.xyz/gonic/server/lastfm"
|
||||
|
||||
@@ -10,8 +10,8 @@ import (
|
||||
|
||||
"github.com/jinzhu/gorm"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/scanner"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
"go.senan.xyz/gonic/server/scanner"
|
||||
"go.senan.xyz/gonic/server/ctrlsubsonic/params"
|
||||
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
||||
"go.senan.xyz/gonic/server/lastfm"
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
|
||||
"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/spec"
|
||||
"go.senan.xyz/gonic/server/encode"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package spec
|
||||
|
||||
import "go.senan.xyz/gonic/db"
|
||||
import "go.senan.xyz/gonic/server/db"
|
||||
|
||||
func NewPlaylist(p *db.Playlist) *Playlist {
|
||||
return &Playlist{
|
||||
|
||||
@@ -3,7 +3,7 @@ package spec
|
||||
import (
|
||||
"path"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
)
|
||||
|
||||
func NewAlbumByFolder(f *db.Album) *Album {
|
||||
|
||||
@@ -3,7 +3,7 @@ package spec
|
||||
import (
|
||||
"path"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
)
|
||||
|
||||
func NewAlbumByTags(a *db.Album, artist *db.Artist) *Album {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/url"
|
||||
"os"
|
||||
@@ -16,11 +15,12 @@ var (
|
||||
dbOptions = url.Values{
|
||||
// with this, multiple connections share a single data and schema cache.
|
||||
// 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
|
||||
// a SQLITE_BUSY. see https://www.sqlite.org/c3ref/busy_timeout.html
|
||||
"_busy_timeout": []string{"30000"},
|
||||
"_journal_mode": []string{"WAL"},
|
||||
"_busy_timeout": {"30000"},
|
||||
"_journal_mode": {"WAL"},
|
||||
"_foreign_keys": {"true"},
|
||||
}
|
||||
)
|
||||
|
||||
@@ -29,8 +29,9 @@ type DB struct {
|
||||
}
|
||||
|
||||
func New(path string) (*DB, error) {
|
||||
pathAndArgs := fmt.Sprintf("%s?%s", path, dbOptions.Encode())
|
||||
db, err := gorm.Open("sqlite3", pathAndArgs)
|
||||
url := url.URL{Path: path}
|
||||
url.RawQuery = dbOptions.Encode()
|
||||
db, err := gorm.Open("sqlite3", url.String())
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "with gorm")
|
||||
}
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"go.senan.xyz/gonic/mime"
|
||||
"go.senan.xyz/gonic/server/mime"
|
||||
)
|
||||
|
||||
func splitInt(in, sep string) []int {
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
"github.com/faiface/beep/mp3"
|
||||
"github.com/faiface/beep/speaker"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
"go.senan.xyz/gonic/server/ctrlsubsonic/spec"
|
||||
)
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -15,10 +15,10 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
"github.com/rainycape/unidecode"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/mime"
|
||||
"go.senan.xyz/gonic/scanner/stack"
|
||||
"go.senan.xyz/gonic/scanner/tags"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
"go.senan.xyz/gonic/server/mime"
|
||||
"go.senan.xyz/gonic/server/scanner/stack"
|
||||
"go.senan.xyz/gonic/server/scanner/tags"
|
||||
)
|
||||
|
||||
// isScanning acts as an atomic boolean semaphore. we don't
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
|
||||
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
)
|
||||
|
||||
var testScanner *Scanner
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
)
|
||||
|
||||
type item struct {
|
||||
@@ -3,7 +3,7 @@ package stack
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
)
|
||||
|
||||
func TestFolderStack(t *testing.T) {
|
||||
@@ -10,8 +10,8 @@ import (
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/scanner"
|
||||
"go.senan.xyz/gonic/server/db"
|
||||
"go.senan.xyz/gonic/server/scanner"
|
||||
"go.senan.xyz/gonic/server/assets"
|
||||
"go.senan.xyz/gonic/server/ctrladmin"
|
||||
"go.senan.xyz/gonic/server/ctrlbase"
|
||||
|
||||
Reference in New Issue
Block a user