--- a/hgweb/hgweb.go Mon Mar 07 01:38:28 2022 -0600
+++ b/hgweb/hgweb.go Mon Mar 07 01:52:42 2022 -0600
@@ -3,16 +3,28 @@
"keep.imfreedom.org/grim/hgkeeper/access"
-func (s *Server) createConfig() error {
+func (hgw *HGWeb) createConfig() error { configPath, err := ioutil.TempFile("", "hgkeeper-hgweb-*.config")
@@ -35,12 +47,12 @@
- s.configPath = configPath.Name()
+ hgw.configPath = configPath.Name() -func (s *Server) createCGI() error {
+func (hgw *HGWeb) createCGI() error { cgiPath, err := ioutil.TempFile("", "hgkeeper-hgweb-*.cgi")
@@ -62,14 +74,34 @@
data := map[string]string{
- "HGWEB_CONFIG": s.configPath,
+ "HGWEB_CONFIG": hgw.configPath, if err := t.Execute(cgiPath, data); err != nil {
- s.cgiPath = cgiPath.Name()
+ hgw.cgiPath = cgiPath.Name() +func (hgw *HGWeb) Handler() (http.Handler, error) { + if err := hgw.createConfig(); err != nil { + if err := hgw.createCGI(); err != nil { + return &cgi.Handler{Path: hgw.cgiPath}, nil +func (hgw *HGWeb) Close() error { + if err := os.Remove(hgw.cgiPath); err != nil { --- a/hgweb/server.go Mon Mar 07 01:38:28 2022 -0600
+++ b/hgweb/server.go Mon Mar 07 01:52:42 2022 -0600
@@ -2,8 +2,6 @@
log "github.com/sirupsen/logrus"
@@ -15,8 +13,7 @@
@@ -28,20 +25,13 @@
externalHostname: externalHostname,
externalPort: externalPort,
func (s *Server) Listen() error {
- if err := s.createConfig(); err != nil {
- if err := s.createCGI(); err != nil {
templatesDir, err := hg.TemplatesDir()
@@ -60,7 +50,12 @@
mux.Handle("/static/", http.StripPrefix("/static", fileServer))
- mux.Handle("/", &cgi.Handler{Path: s.cgiPath})
+ hgwHandler, err := s.hgw.Handler() + mux.Handle("/", hgwHandler) s.server.Handler = Logger(mux)
@@ -70,8 +65,8 @@
func (s *Server) Close() {
- if err := os.Remove(s.cgiPath); err != nil {
- log.Warnf("failed to remove temporary cgi file %q: %v", s.cgiPath, err)
+ if err := s.hgw.Close(); err != nil { + log.Warnf("failed to close hgweb: %v", err) if err := s.server.Close(); err != nil {