/
template.go
98 lines (86 loc) · 2.39 KB
/
template.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*
Copyright 2013 Am Laher
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package debgen
import (
"bytes"
"github.com/debber/debber-v0.3/deb"
"io/ioutil"
"os"
"text/template"
"time"
)
// initialize "template data" object
func NewTemplateData(pkg *deb.Control) *TemplateData {
//Entry date format day-of-week, dd month yyyy hh:mm:ss +zzzz
t := time.Now()
entryDate := t.Format(ChangelogDateLayout)
templateVars := TemplateData{Package: pkg, EntryDate: entryDate, Checksums: nil,
ExtraData: extraData()}
return &templateVars
}
func extraData() map[string]interface{} {
gpe := []string{}
extraData := map[string]interface{}{}
/*
ext, ok := extraData["GoPathExtra"]
if !ok {
switch t := ext.(type) {
case []string:
gpe = t
}
}
*/
extraData["GoPathExtra"] = append(gpe, GoPathExtraDefault)
return extraData
}
//Data for templates
type TemplateData struct {
Package *deb.Control
Deb *deb.Writer
EntryDate string
ChangelogEntry string
Checksums *deb.Checksums
ExtraData map[string]interface{}
}
func TemplateFileOrString(templateFile string, templateDefault string, vars interface{}) ([]byte, error) {
_, err := os.Stat(templateFile)
var tplText string
if os.IsNotExist(err) {
tplText = templateDefault
return TemplateString(tplText, vars)
} else if err != nil {
return nil, err
} else {
return TemplateFile(tplText, vars)
}
}
func TemplateFile(templateFile string, vars interface{}) ([]byte, error) {
tplBytes, err := ioutil.ReadFile(templateFile)
if err != nil {
return nil, err
}
tplText := string(tplBytes)
return TemplateString(tplText, vars)
}
func TemplateString(tplText string, vars interface{}) ([]byte, error) {
tpl, err := template.New("template").Parse(tplText)
if err != nil {
return nil, err
}
var dest bytes.Buffer
err = tpl.Execute(&dest, vars)
if err != nil {
return nil, err
}
return dest.Bytes(), nil
}