mirror of https://github.com/perkeep/perkeep.git
website: regularlyk rsync git files from gerrit server to web server
Change-Id: Ia4ac06c9240d0364e0452550138bbbd5661be607
This commit is contained in:
parent
4658a2a3fb
commit
e789e022e8
|
@ -18,6 +18,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"exec"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"http"
|
"http"
|
||||||
|
@ -26,10 +27,11 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"template"
|
"template"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const defaultAddr = ":31798" // default webserver address
|
const defaultAddr = ":31798" // default webserver address
|
||||||
|
@ -46,6 +48,8 @@ var (
|
||||||
logStdout = flag.Bool("logstdout", true, "Write to stdout?")
|
logStdout = flag.Bool("logstdout", true, "Write to stdout?")
|
||||||
tlsCertFile = flag.String("tlscert", "", "TLS cert file")
|
tlsCertFile = flag.String("tlscert", "", "TLS cert file")
|
||||||
tlsKeyFile = flag.String("tlskey", "", "TLS private key file")
|
tlsKeyFile = flag.String("tlskey", "", "TLS private key file")
|
||||||
|
gerritUser = flag.String("gerrituser", "ubuntu", "Gerrit host's username")
|
||||||
|
gerritHost = flag.String("gerrithost", "gerrit-proxy", "Gerrit host, or empty.")
|
||||||
pageHtml, errorHtml *template.Template
|
pageHtml, errorHtml *template.Template
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -126,7 +130,7 @@ func servePage(w http.ResponseWriter, title, subtitle string, content []byte) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func readTemplate(name string) *template.Template {
|
func readTemplate(name string) *template.Template {
|
||||||
fileName := path.Join(*root, "tmpl", name)
|
fileName := filepath.Join(*root, "tmpl", name)
|
||||||
data, err := ioutil.ReadFile(fileName)
|
data, err := ioutil.ReadFile(fileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("ReadFile %s: %v", fileName, err)
|
log.Fatalf("ReadFile %s: %v", fileName, err)
|
||||||
|
@ -161,7 +165,7 @@ func mainHandler(rw http.ResponseWriter, req *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
absPath := path.Join(*root, "content", relPath)
|
absPath := filepath.Join(*root, "content", relPath)
|
||||||
fi, err := os.Lstat(absPath)
|
fi, err := os.Lstat(absPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
log.Print(err)
|
||||||
|
@ -170,7 +174,7 @@ func mainHandler(rw http.ResponseWriter, req *http.Request) {
|
||||||
}
|
}
|
||||||
if fi.IsDirectory() {
|
if fi.IsDirectory() {
|
||||||
relPath += "/index.html"
|
relPath += "/index.html"
|
||||||
absPath = path.Join(*root, "content", relPath)
|
absPath = filepath.Join(*root, "content", relPath)
|
||||||
fi, err = os.Lstat(absPath)
|
fi, err = os.Lstat(absPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
log.Print(err)
|
||||||
|
@ -227,6 +231,16 @@ func (h *noWwwHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
|
||||||
h.Handler.ServeHTTP(rw, r)
|
h.Handler.ServeHTTP(rw, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func fixupGitwebFiles() {
|
||||||
|
fi, err := os.Stat(*gitwebFiles)
|
||||||
|
if err != nil || !fi.IsDirectory() {
|
||||||
|
if *gitwebFiles == "/usr/share/gitweb/static" {
|
||||||
|
// Old Debian/Ubuntu location
|
||||||
|
*gitwebFiles = "/usr/share/gitweb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
readTemplates()
|
readTemplates()
|
||||||
|
@ -239,11 +253,19 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fixupGitwebFiles()
|
||||||
|
|
||||||
|
latestGits := filepath.Join(*root, "latestgits")
|
||||||
|
os.Mkdir(latestGits, 0700)
|
||||||
|
if *gerritHost != "" {
|
||||||
|
go rsyncFromGerrit(latestGits)
|
||||||
|
}
|
||||||
|
|
||||||
mux := http.DefaultServeMux
|
mux := http.DefaultServeMux
|
||||||
mux.Handle("/favicon.ico", http.FileServer(path.Join(*root, "static"), "/"))
|
mux.Handle("/favicon.ico", http.FileServer(filepath.Join(*root, "static"), "/"))
|
||||||
mux.Handle("/robots.txt", http.FileServer(path.Join(*root, "static"), "/"))
|
mux.Handle("/robots.txt", http.FileServer(filepath.Join(*root, "static"), "/"))
|
||||||
mux.Handle("/static/", http.FileServer(path.Join(*root, "static"), "/static/"))
|
mux.Handle("/static/", http.FileServer(filepath.Join(*root, "static"), "/static/"))
|
||||||
mux.Handle("/talks/", http.FileServer(path.Join(*root, "talks"), "/talks/"))
|
mux.Handle("/talks/", http.FileServer(filepath.Join(*root, "talks"), "/talks/"))
|
||||||
|
|
||||||
gerritUrl, _ := http.ParseURL("http://gerrit-proxy:8000/")
|
gerritUrl, _ := http.ParseURL("http://gerrit-proxy:8000/")
|
||||||
var gerritHandler http.Handler = http.NewSingleHostReverseProxy(gerritUrl)
|
var gerritHandler http.Handler = http.NewSingleHostReverseProxy(gerritUrl)
|
||||||
|
@ -259,7 +281,7 @@ func main() {
|
||||||
}
|
}
|
||||||
mux.Handle("/r/", gerritHandler)
|
mux.Handle("/r/", gerritHandler)
|
||||||
|
|
||||||
testCgi := &cgi.Handler{Path: path.Join(*root, "test.cgi"),
|
testCgi := &cgi.Handler{Path: filepath.Join(*root, "test.cgi"),
|
||||||
Root: "/test.cgi",
|
Root: "/test.cgi",
|
||||||
}
|
}
|
||||||
mux.Handle("/test.cgi", testCgi)
|
mux.Handle("/test.cgi", testCgi)
|
||||||
|
@ -268,8 +290,9 @@ func main() {
|
||||||
mux.Handle("/code", http.RedirectHandler("/code/", http.StatusFound))
|
mux.Handle("/code", http.RedirectHandler("/code/", http.StatusFound))
|
||||||
if *gitwebScript != "" {
|
if *gitwebScript != "" {
|
||||||
env := os.Environ()
|
env := os.Environ()
|
||||||
env = append(env, "GITWEB_CONFIG="+path.Join(*root, "gitweb-camli.conf"))
|
env = append(env, "GITWEB_CONFIG="+filepath.Join(*root, "gitweb-camli.conf"))
|
||||||
env = append(env, "CAMWEB_ROOT="+path.Join(*root))
|
env = append(env, "CAMWEB_ROOT="+filepath.Join(*root))
|
||||||
|
env = append(env, "CAMWEB_GITDIR="+latestGits)
|
||||||
mux.Handle("/code/", &fixUpGitwebUrls{&gitwebHandler{
|
mux.Handle("/code/", &fixUpGitwebUrls{&gitwebHandler{
|
||||||
Cgi: &cgi.Handler{
|
Cgi: &cgi.Handler{
|
||||||
Path: *gitwebScript,
|
Path: *gitwebScript,
|
||||||
|
@ -332,3 +355,13 @@ func (fu *fixUpGitwebUrls) ServeHTTP(rw http.ResponseWriter, req *http.Request)
|
||||||
}
|
}
|
||||||
http.Redirect(rw, req, newUrl, http.StatusFound)
|
http.Redirect(rw, req, newUrl, http.StatusFound)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func rsyncFromGerrit(dest string) {
|
||||||
|
for {
|
||||||
|
err := exec.Command("rsync", "-avPW", *gerritUser+"@"+*gerritHost+":gerrit/git", dest+"/").Run()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("rsync from gerrit = %v", err)
|
||||||
|
}
|
||||||
|
time.Sleep(10e9)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# path to git projects (<project>.git)
|
# path to git projects (<project>.git)
|
||||||
$projectroot = "/home/camli/gerrit/git";
|
$projectroot = "$ENV{CAMWEB_GITDIR}";
|
||||||
|
|
||||||
# directory to use for temp files
|
# directory to use for temp files
|
||||||
$git_temp = "/tmp";
|
$git_temp = "/tmp";
|
||||||
|
|
Loading…
Reference in New Issue