guireleaser/http.go

197 lines
5.2 KiB
Go

package main
import (
"fmt"
"net/http"
"os"
"strings"
"go.wit.com/log"
)
// remove '?' part and trailing '/'
func cleanURL(url string) string {
url = "/" + strings.Trim(url, "/")
return url
}
// send stuff to the socket and stdout
func msg(w http.ResponseWriter, s string) {
log.Info(s)
fmt.Fprintln(w, s)
}
func okHandler(w http.ResponseWriter, r *http.Request) {
var route string
route = cleanURL(r.URL.Path)
switch route {
case "/help":
msg(w, "list/ list modified repos")
msg(w, "list?readonly=true shows every repo")
msg(w, "")
msg(w, "doRelease runs doRelease()")
msg(w, "findNext runs findNext()")
msg(w, "showNext shows the repo for doRelease()")
msg(w, "setTargetVersion set the target version for findNext()")
msg(w, "setAllTargetVersions?version=v0.12.4 set ever repo to target version")
msg(w, "setCurrentRepo?repo=go.wit.com/gui runs setCurrentRepo(repo)")
msg(w, "")
msg(w, "setAllBranchesToMaster git checkout master on every repo")
msg(w, "")
msg(w, "setVersion?repo=go.wit.com/gui?target=0.2 attempts to set the target version to 0.2")
msg(w, "")
case "/tempWin":
tempWin := makeTempView()
loop := me.repos.View.UnmergedRepos()
for loop.Scan() {
repo := loop.Repo()
tempWin.View.ShowRepo(repo)
msg(w, "UnmergedRepo: " + repo.Name())
}
case "/doRelease":
buttonDisable()
if doRelease() {
buttonEnable()
msg(w, "doRelease() worked")
} else {
msg(w, "doRelease() failed")
}
case "/findNext":
me.Disable()
defer me.Enable()
if findNext() {
msg(w, "findNext() found a repo")
} else {
msg(w, "findNext() did not find a repo. You might be finished?")
}
msg(w, "repo: "+me.release.repo.String())
msg(w, "name: "+me.release.version.String())
msg(w, "notes: "+me.release.notes.String())
msg(w, "status: "+me.release.status.String())
msg(w, me.current.StandardHeader())
msg(w, me.current.StandardReleaseHeader())
case "/setCurrentRepo":
repoName := r.URL.Query().Get("repo")
version := r.URL.Query().Get("version")
comment := r.URL.Query().Get("comment")
msg(w, "repo: "+repoName)
msg(w, "version: "+version)
msg(w, "comment: "+comment)
repo := me.repos.View.FindRepoByName(repoName)
if repo == nil {
msg(w, "FindRepoByName() returned nil")
return
}
setCurrentRepo(repo, "HTTP", "doRelease() ?")
case "/IncrementRevisonVersion":
repo := r.URL.Query().Get("repo")
version := r.URL.Query().Get("version")
comment := r.URL.Query().Get("comment")
msg(w, "repo: "+repo)
msg(w, "version: "+version)
me.current.Status.IncrementRevisionVersion(comment)
case "/IncrementMinorVersion":
repo := r.URL.Query().Get("repo")
version := r.URL.Query().Get("version")
msg(w, "repo: "+repo)
msg(w, "version: "+version)
me.current.Status.IncrementMinorVersion("trying minor")
case "/setAllBranchesToMaster":
msg(w, "set all branches to master")
me.Disable()
defer me.Enable()
if setAllBranchesToMaster() {
// if it succeeds, disable this button
me.setBranchesToMasterB.Disable()
}
return
case "/setTargetVersion":
version := r.URL.Query().Get("version")
repo := r.URL.Query().Get("repo")
msg(w, "repo: "+repo)
msg(w, "version: "+version)
if me.current == nil {
msg(w, "me.current == nil")
return
}
me.current.Status.SetTargetVersion(version)
case "/setAllTargetVersions":
version := r.URL.Query().Get("version")
msg(w, "version: "+version)
loop := me.repos.View.ReposSortByName()
for loop.Scan() {
repo := loop.Repo()
master := repo.Status.GetMasterVersion()
cur := repo.Status.GetCurrentVersion()
if master == cur {
repo.Status.SetTargetVersion(cur)
} else {
repo.Status.IncrementRevisionVersion("Nov 2024 test")
}
}
case "/showNext":
msg(w, "gui repo: "+me.release.repo.String())
msg(w, "gui name: "+me.release.version.String())
msg(w, "gui notes: "+me.release.notes.String())
msg(w, "gui status: "+me.release.status.String())
msg(w, "")
if checkValidGoSum(me.current) {
msg(w, "checkValidGoSum() == true")
} else {
msg(w, "checkValidGoSum() == false")
}
if me.current.Status.IsReleased() {
msg(w, "IsReleased() == true")
} else {
msg(w, "IsReleased() == false")
}
msg(w, "")
msg(w, me.current.StandardHeader())
msg(w, me.current.StandardReleaseHeader())
case "/list":
readonly := r.URL.Query().Get("readonly")
onlydirty := r.URL.Query().Get("onlydirty")
perfect := r.URL.Query().Get("perfect")
me.repos.View.PrintReport(w, readonly, onlydirty, perfect)
case "/releaseList":
readonly := r.URL.Query().Get("readonly")
perfect := r.URL.Query().Get("perfect")
me.repos.View.PrintReleaseReport(w, readonly, perfect)
case "/quit":
msg(w, "Got URL /quit")
os.Exit(0)
default:
msg(w, "BAD URL = "+route)
}
}
// starts and sits waiting for HTTP requests
func startHTTP() {
http.HandleFunc("/", okHandler)
p := fmt.Sprintf(":%d", myargs.Port)
log.Println("Running on port", p)
err := http.ListenAndServe(p, nil)
if err != nil {
log.Println("Error starting server:", err)
}
}