MCPcopy
hub / github.com/tailscale/golink / Run

Function Run

golink.go:90–241  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

88var localClient *tailscale.LocalClient
89
90func Run() error {
91 flag.Parse()
92
93 hostinfo.SetApp("golink")
94
95 // if resolving from backup, set sqlitefile and snapshot flags to
96 // restore links into an in-memory sqlite database.
97 if *resolveFromBackup != "" {
98 *sqlitefile = ":memory:"
99 snapshot = resolveFromBackup
100 if flag.NArg() != 1 {
101 log.Fatal("--resolve-from-backup also requires a link to be resolved")
102 }
103 }
104
105 if *sqlitefile == "" {
106 if devMode() {
107 tmpdir, err := os.MkdirTemp("", "golink_dev_*")
108 if err != nil {
109 return err
110 }
111 *sqlitefile = filepath.Join(tmpdir, "golink.db")
112 log.Printf("Dev mode temp db: %s", *sqlitefile)
113 } else {
114 return errors.New("--sqlitedb is required")
115 }
116 }
117
118 var err error
119 if db, err = NewSQLiteDB(*sqlitefile); err != nil {
120 return fmt.Errorf("NewSQLiteDB(%q): %w", *sqlitefile, err)
121 }
122
123 if *snapshot != "" {
124 if LastSnapshot != nil {
125 log.Printf("LastSnapshot already set; ignoring --snapshot")
126 } else {
127 var err error
128 LastSnapshot, err = os.ReadFile(*snapshot)
129 if err != nil {
130 log.Fatalf("error reading snapshot file %q: %v", *snapshot, err)
131 }
132 }
133 }
134 if err := restoreLastSnapshot(); err != nil {
135 log.Printf("restoring snapshot: %v", err)
136 }
137 if err := initStats(); err != nil {
138 log.Printf("initializing stats: %v", err)
139 }
140
141 // if link specified on command line, resolve and exit
142 if flag.NArg() > 0 {
143 u, err := url.Parse(flag.Arg(0))
144 if err != nil {
145 log.Fatal(err)
146 }
147 dst, err := resolveLink(u)

Callers 1

mainFunction · 0.92

Calls 9

devModeFunction · 0.85
NewSQLiteDBFunction · 0.85
restoreLastSnapshotFunction · 0.85
initStatsFunction · 0.85
resolveLinkFunction · 0.85
flushStatsLoopFunction · 0.85
serveHandlerFunction · 0.85
HSTSFunction · 0.85
redirectHandlerFunction · 0.85

Tested by

no test coverage detected