grim/hgkeeper
Clone
Summary
Browse
Changes
Graph
Start of hgweb support
feature/hgweb
2019-09-17, Gary Kramlich
45b57bfc4382
Start of hgweb support
package
hgweb
import
(
"io/ioutil"
"net/http"
"net/http/cgi"
"os"
log
"github.com/sirupsen/logrus"
)
type
Server
struct
{
server
*
http
.
Server
cgiPath
string
}
func
NewServer
(
listenAddr
string
)
(
*
Server
,
error
)
{
return
&
Server
{
server
:
&
http
.
Server
{
Addr
:
listenAddr
,
},
},
nil
}
func
(
s
*
Server
)
Startup
()
error
{
cgiPath
,
err
:=
ioutil
.
TempFile
(
""
,
"hgkeeper-hgweb-*.cgi"
)
if
err
!=
nil
{
return
err
}
log
.
Warnf
(
"path: %q"
,
cgiPath
.
Name
())
s
.
cgiPath
=
cgiPath
.
Name
()
s
.
server
.
Handler
=
&
cgi
.
Handler
{
Path
:
s
.
cgiPath
}
return
s
.
server
.
ListenAndServe
()
}
func
(
s
*
Server
)
Shutdown
()
{
if
err
:=
os
.
Remove
(
s
.
cgiPath
);
err
!=
nil
{
log
.
Warnf
(
"failed to remove temporary cgi file %q: %v"
,
s
.
cgiPath
,
err
)
}
if
err
:=
s
.
server
.
Close
();
err
!=
nil
{
log
.
Warnf
(
"failed to shutdown http server: %v"
,
err
)
}
}