mirror of https://github.com/aptly-dev/aptly
110 lines
2.1 KiB
Go
110 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
"text/template"
|
|
|
|
"github.com/aptly-dev/aptly/cmd"
|
|
"github.com/smira/commander"
|
|
"github.com/smira/flag"
|
|
)
|
|
|
|
func allFlags(flags *flag.FlagSet) []*flag.Flag {
|
|
result := []*flag.Flag{}
|
|
flags.VisitAll(func(f *flag.Flag) {
|
|
result = append(result, f)
|
|
})
|
|
return result
|
|
}
|
|
|
|
func findCommand(cmd *commander.Command, name string) (*commander.Command, error) {
|
|
for _, c := range cmd.Subcommands {
|
|
if c.Name() == name {
|
|
return c, nil
|
|
}
|
|
}
|
|
|
|
return nil, fmt.Errorf("command %s not found", name)
|
|
}
|
|
|
|
func capitalize(s string) string {
|
|
parts := strings.Split(s, " ")
|
|
for i, part := range parts {
|
|
if part[0] != '<' && part[0] != '[' && part[len(part)-1] != '>' && part[len(part)-1] != ']' {
|
|
parts[i] = "`" + part + "`"
|
|
}
|
|
}
|
|
|
|
return strings.Join(parts, " ")
|
|
}
|
|
|
|
var authorsS string
|
|
|
|
func authors() string {
|
|
return authorsS
|
|
}
|
|
|
|
func main() {
|
|
command := cmd.RootCommand()
|
|
command.UsageLine = "aptly"
|
|
command.Dispatch(nil)
|
|
|
|
_File, _ := filepath.Abs("./man")
|
|
|
|
templ := template.New("man").Funcs(template.FuncMap{
|
|
"allFlags": allFlags,
|
|
"findCommand": findCommand,
|
|
"toUpper": strings.ToUpper,
|
|
"capitalize": capitalize,
|
|
"authors": authors,
|
|
})
|
|
template.Must(templ.ParseFiles(filepath.Join(filepath.Dir(_File), "aptly.1.ronn.tmpl")))
|
|
|
|
authorsF, err := os.Open(filepath.Join(filepath.Dir(_File), "..", "AUTHORS"))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
authorsB, err := ioutil.ReadAll(authorsF)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
authorsF.Close()
|
|
|
|
authorsS = string(authorsB)
|
|
|
|
output, err := os.Create(filepath.Join(filepath.Dir(_File), "aptly.1.ronn"))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
err = templ.ExecuteTemplate(output, "main", command)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
output.Close()
|
|
|
|
out, err := exec.Command("ronn", filepath.Join(filepath.Dir(_File), "aptly.1.ronn")).CombinedOutput()
|
|
if err != nil {
|
|
os.Stdout.Write(out)
|
|
log.Fatal(err)
|
|
}
|
|
|
|
cmd := exec.Command("man", filepath.Join(filepath.Dir(_File), "aptly.1"))
|
|
cmd.Stdin = os.Stdin
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
err = cmd.Run()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|