cp result to outd
parent
e543b119e8
commit
28b80f0b6b
86
main.go
86
main.go
|
|
@ -10,7 +10,6 @@ import (
|
||||||
"path"
|
"path"
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
|
|
||||||
//_ "github.com/glebarez/sqlite"
|
//_ "github.com/glebarez/sqlite"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
|
@ -26,6 +25,7 @@ func main() {
|
||||||
data := os.Args[1]
|
data := os.Args[1]
|
||||||
fromU := os.Args[2]
|
fromU := os.Args[2]
|
||||||
toU := os.Args[3]
|
toU := os.Args[3]
|
||||||
|
outd := os.Args[4]
|
||||||
|
|
||||||
workd, err := ioutil.TempDir(os.TempDir(), "jellyfin-user-clone.*")
|
workd, err := ioutil.TempDir(os.TempDir(), "jellyfin-user-clone.*")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -131,22 +131,20 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break // TODO
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
entries, err := os.ReadDir(workd)
|
||||||
originalJelly, _ := sql.Open("sqlite", path.Join(data, jellyDB))
|
if err != nil {
|
||||||
defer originalJelly.Close()
|
|
||||||
originalLibrary, _ := sql.Open("sqlite", path.Join(data, libDB))
|
|
||||||
defer originalLibrary.Close()
|
|
||||||
|
|
||||||
if err := Diff(originalJelly, jellyfinDB); err != nil {
|
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
if err := Diff(originalLibrary, libraryDB); err != nil {
|
for _, entry := range entries {
|
||||||
|
os.MkdirAll(path.Dir(path.Join(path.Join(outd, entry.Name()))), os.ModePerm)
|
||||||
|
if err := cp(path.Join(workd, entry.Name()), path.Join(outd, entry.Name())); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
} else if err := os.Remove(path.Join(workd, entry.Name())); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
*/
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func CloneForColumn[T any](db *sql.DB, table, column string, from, to T, fixed map[string]any) error {
|
func CloneForColumn[T any](db *sql.DB, table, column string, from, to T, fixed map[string]any) error {
|
||||||
|
|
@ -400,69 +398,3 @@ func Select[T any](db *sql.DB, q string, args ...any) ([]T, error) {
|
||||||
|
|
||||||
return results, rows.Err()
|
return results, rows.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
func Diff(a, b *sql.DB) error {
|
|
||||||
tables, err := Tables(a)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, table := range tables {
|
|
||||||
if err := DiffTable(a, b, table); err != nil {
|
|
||||||
log.Printf("DIFF ERR | (%s) %v", table, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func DiffTable(a, b *sql.DB, table string) error {
|
|
||||||
orderBys, err := Select[string](a, `SELECT name FROM PRAGMA_TABLE_INFO($1) WHERE "pk" LIMIT 1`, table)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
} else if len(orderBys) == 0 {
|
|
||||||
orderBys, err = Select[string](a, `SELECT name FROM PRAGMA_TABLE_INFO($1) LIMIT 1`, table)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
} else if len(orderBys) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
orderBy := orderBys[0]
|
|
||||||
|
|
||||||
columns, err := Columns(a, table)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
q := fmt.Sprintf(`SELECT %s FROM %q ORDER BY %q`, func() string {
|
|
||||||
quoted := []string{}
|
|
||||||
for _, col := range columns {
|
|
||||||
quoted = append(quoted, fmt.Sprintf("%q", col))
|
|
||||||
}
|
|
||||||
return strings.Join(quoted, ", ")
|
|
||||||
}(), table, orderBy)
|
|
||||||
//log.Printf("DIFF | %s", q)
|
|
||||||
|
|
||||||
wg := &sync.WaitGroup{}
|
|
||||||
defer wg.Wait()
|
|
||||||
var rowa []any
|
|
||||||
var rowb []any
|
|
||||||
wg.Add(1)
|
|
||||||
go func() {
|
|
||||||
defer wg.Done()
|
|
||||||
if err := ForEach(a, func(row []any) error { rowa = row; return nil }, q); err != nil {
|
|
||||||
log.Fatalf("failed foreach a: %v", err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
wg.Add(1)
|
|
||||||
go func() {
|
|
||||||
defer wg.Done()
|
|
||||||
if err := ForEach(b, func(row []any) error { rowb = row; return nil }, q); err != nil {
|
|
||||||
log.Fatalf("failed foreach b: %v", err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
_, _ = rowa, rowb
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue