11package main
22
33import (
4+ "context"
45 "flag"
6+ "fmt"
7+ "io"
8+ "net/http"
59 "os"
10+ "time"
11+
12+ "github.com/pkg/errors"
13+ "go.uber.org/zap"
14+ "gopkg.d7z.net/gitea-pages/pkg"
15+ "gopkg.d7z.net/gitea-pages/pkg/providers"
16+ "gopkg.d7z.net/middleware/cache"
17+ "gopkg.d7z.net/middleware/kv"
618)
719
820var (
@@ -11,19 +23,68 @@ var (
1123 repo = org + "." + domain
1224 path = ""
1325
14- port = 8080
26+ port = ": 8080"
1527)
1628
1729func init () {
30+ atom := zap .NewAtomicLevel ()
31+ atom .SetLevel (zap .DebugLevel )
32+ cfg := zap .NewProductionConfig ()
33+ cfg .Level = atom
34+ logger , _ := cfg .Build ()
35+ zap .ReplaceGlobals (logger )
1836 dir , _ := os .Getwd ()
1937 path = dir
38+ zap .L ().Info ("exec workdir" , zap .String ("path" , path ))
2039 flag .StringVar (& org , "org" , org , "org" )
2140 flag .StringVar (& repo , "repo" , repo , "repo" )
2241 flag .StringVar (& domain , "domain" , domain , "domain" )
2342 flag .StringVar (& path , "path" , path , "path" )
24- flag .IntVar (& port , "port" , port , "port" )
43+ flag .StringVar (& port , "port" , port , "port" )
2544 flag .Parse ()
2645}
2746
2847func main () {
48+ fmt .Printf ("请访问 http://%s%s/" , repo , port )
49+ if stat , err := os .Stat (path ); err != nil || ! stat .IsDir () {
50+ zap .L ().Fatal ("path is not a directory" , zap .String ("path" , path ))
51+ }
52+ provider := providers .NewLocalProvider (map [string ][]string {
53+ org : {repo },
54+ }, path )
55+ memory , err := kv .NewMemory ("" )
56+ if err != nil {
57+ zap .L ().Fatal ("failed to init memory provider" , zap .Error (err ))
58+ }
59+ server := pkg .NewPageServer (http .DefaultClient ,
60+ provider , domain , "gh-pages" , memory , memory , 0 , & nopCache {},
61+ func (w http.ResponseWriter , r * http.Request , err error ) {
62+ if errors .Is (err , os .ErrNotExist ) {
63+ http .Error (w , "page not found." , http .StatusNotFound )
64+ } else if err != nil {
65+ http .Error (w , err .Error (), http .StatusInternalServerError )
66+ }
67+ })
68+ err = http .ListenAndServe (port , server )
69+ if err != nil && ! errors .Is (err , http .ErrServerClosed ) {
70+ zap .L ().Fatal ("failed to start server" , zap .Error (err ))
71+ }
72+ }
73+
74+ type nopCache struct {}
75+
76+ func (n * nopCache ) Child (_ string ) cache.Cache {
77+ return n
78+ }
79+
80+ func (n * nopCache ) Put (_ context.Context , _ string , _ map [string ]string , _ io.Reader , _ time.Duration ) error {
81+ return nil
82+ }
83+
84+ func (n * nopCache ) Get (_ context.Context , _ string ) (* cache.Content , error ) {
85+ return nil , os .ErrNotExist
86+ }
87+
88+ func (n * nopCache ) Delete (_ context.Context , _ string ) error {
89+ return nil
2990}
0 commit comments