mirror of
https://github.com/dutchcoders/transfer.sh.git
synced 2024-12-12 13:50:19 +01:00
cb6e5cb0c7
* use dep for vendoring * lets encrypt * moved web to transfer.sh-web repo * single command install * added first tests
124 lines
2.5 KiB
Go
124 lines
2.5 KiB
Go
// Copyright 2014 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build ignore
|
|
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"flag"
|
|
"go/format"
|
|
"io/ioutil"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
"text/template"
|
|
)
|
|
|
|
const (
|
|
goRepoPath = 1 << iota
|
|
packagePath
|
|
)
|
|
|
|
var tmpl = template.Must(template.New("").Parse(`// Created by go generate; DO NOT EDIT
|
|
// Copyright 2014 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package gosrc
|
|
|
|
const (
|
|
goRepoPath = {{.goRepoPath}}
|
|
packagePath = {{.packagePath}}
|
|
)
|
|
|
|
var pathFlags = map[string]int{
|
|
{{range $k, $v := .pathFlags}}{{printf "%q" $k}}: {{$v}},
|
|
{{end}} }
|
|
|
|
var validTLDs = map[string]bool{
|
|
{{range $v := .validTLDs}}{{printf "%q" $v}}: true,
|
|
{{end}} }
|
|
`))
|
|
|
|
var output = flag.String("output", "data.go", "file name to write")
|
|
|
|
func main() {
|
|
log.SetFlags(0)
|
|
log.SetPrefix("gen: ")
|
|
flag.Parse()
|
|
if flag.NArg() != 0 {
|
|
log.Fatal("usage: decgen [--output filename]")
|
|
}
|
|
|
|
// Build map of standard repository path flags.
|
|
|
|
cmd := exec.Command("go", "list", "std", "cmd")
|
|
p, err := cmd.Output()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
pathFlags := map[string]int{
|
|
"builtin": packagePath | goRepoPath,
|
|
"C": packagePath,
|
|
}
|
|
for _, path := range strings.Fields(string(p)) {
|
|
pathFlags[path] |= packagePath | goRepoPath
|
|
for {
|
|
i := strings.LastIndex(path, "/")
|
|
if i < 0 {
|
|
break
|
|
}
|
|
path = path[:i]
|
|
pathFlags[path] |= goRepoPath
|
|
}
|
|
}
|
|
|
|
// Get list of valid TLDs.
|
|
|
|
resp, err := http.Get("https://data.iana.org/TLD/tlds-alpha-by-domain.txt")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer resp.Body.Close()
|
|
p, err = ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
var validTLDs []string
|
|
for _, line := range strings.Split(string(p), "\n") {
|
|
line = strings.TrimSpace(line)
|
|
if len(line) == 0 || line[0] == '#' {
|
|
continue
|
|
}
|
|
validTLDs = append(validTLDs, "."+strings.ToLower(line))
|
|
}
|
|
|
|
// Generate output.
|
|
|
|
var buf bytes.Buffer
|
|
err = tmpl.Execute(&buf, map[string]interface{}{
|
|
"output": *output,
|
|
"goRepoPath": goRepoPath,
|
|
"packagePath": packagePath,
|
|
"pathFlags": pathFlags,
|
|
"validTLDs": validTLDs,
|
|
})
|
|
if err != nil {
|
|
log.Fatal("template error:", err)
|
|
}
|
|
source, err := format.Source(buf.Bytes())
|
|
if err != nil {
|
|
log.Fatal("source format error:", err)
|
|
}
|
|
fd, err := os.Create(*output)
|
|
_, err = fd.Write(source)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|