From ae20fe110a281a9f586ed0701aebe00c8d0b8166 Mon Sep 17 00:00:00 2001 From: Will Norris Date: Tue, 8 Nov 2022 12:30:53 -0800 Subject: [PATCH] all: add flag for specifying snapshot file We still support directly setting LastSnapshot to support embedding the snapshot in the binary (like we do internally). But this allows an alternate way have restoring backups which doesn't require recompiling binaries. --- cmd/golink/link-snapshot.json | 1 - cmd/golink/main.go | 4 ---- golink.go | 13 +++++++++++++ 3 files changed, 13 insertions(+), 5 deletions(-) delete mode 100644 cmd/golink/link-snapshot.json diff --git a/cmd/golink/link-snapshot.json b/cmd/golink/link-snapshot.json deleted file mode 100644 index 8b13789..0000000 --- a/cmd/golink/link-snapshot.json +++ /dev/null @@ -1 +0,0 @@ - diff --git a/cmd/golink/main.go b/cmd/golink/main.go index d766a48..56c6d52 100644 --- a/cmd/golink/main.go +++ b/cmd/golink/main.go @@ -8,11 +8,7 @@ import ( "github.com/tailscale/golink" ) -//go:embed link-snapshot.json -var lastSnapshot []byte - func main() { - golink.LastSnapshot = lastSnapshot if err := golink.Run(); err != nil { log.Fatal(err) } diff --git a/golink.go b/golink.go index 1b26d5f..6ee7432 100644 --- a/golink.go +++ b/golink.go @@ -16,6 +16,7 @@ import ( "log" "net/http" "net/url" + "os" "path/filepath" "regexp" "sort" @@ -33,6 +34,7 @@ var ( verbose = flag.Bool("verbose", false, "be verbose") sqlitefile = flag.String("sqlitedb", "", "path of SQLite database to store links") dev = flag.String("dev-listen", "", "if non-empty, listen on this addr and run in dev mode; auto-set sqlitedb if empty and don't use tsnet") + snapshot = flag.String("snapshot", "", "file path of snapshot file") ) var stats struct { @@ -76,6 +78,17 @@ func Run() error { return fmt.Errorf("NewSQLiteDB(%q): %w", *sqlitefile, err) } + if *snapshot != "" { + if LastSnapshot != nil { + log.Printf("LastSnapshot already set; ignoring --snapshot") + } else { + var err error + LastSnapshot, err = os.ReadFile(*snapshot) + if err != nil { + log.Fatalf("error reading snapshot file %q: %v", *snapshot, err) + } + } + } if err := restoreLastSnapshot(); err != nil { log.Printf("restoring snapshot: %v", err) }