summaryrefslogtreecommitdiff
path: root/control.write.go
blob: b2c31ba104d40feea90861751871a498a38d185c (plain)
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
99
100
101
102
103
104
105
106
package main

import (
	"fmt"
	"os"
	"strconv"
	"strings"
	"time"

	"github.com/go-cmd/cmd"
	"go.wit.com/lib/protobuf/gitpb"
	"go.wit.com/log"
)

func writeDebianControlFile(repo *gitpb.Repo) bool {
	filename := "files/DEBIAN/control"
	cf, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
	if err != nil {
		log.Info("open control file failed", err)
		return false
	}
	fmt.Fprintln(cf, "Package:", repo.Control["Package"]) // c.Package.String())
	fmt.Fprintln(cf, "Source:", repo.Control["Source"])   // c.Source.String())
	fmt.Fprintln(cf, "Version:", repo.Control["Version"])
	if repo.Control["Architecture"] == "" {
		repo.Control["Architecture"] = "amd64"
	}
	fmt.Fprintln(cf, "Architecture:", repo.Control["Architecture"]) // c.Architecture.String())

	writeControlVar(cf, repo, "Depends")
	writeControlVar(cf, repo, "Build-Depends")
	writeControlVar(cf, repo, "Maintainer")
	writeControlVar(cf, repo, "Packager")
	writeControlVar(cf, repo, "GoPath")
	writeControlVar(cf, repo, "URL")
	writeControlVar(cf, repo, "Conflicts")

	stamp := time.Now().UTC().Format("2006/01/02 15:04:05 UTC")
	// update to now now despite what the GUI is showing
	fmt.Fprintln(cf, "Package-Build-Date:", stamp)
	fmt.Fprintln(cf, "Git-Tag-Date:", "todo: get from repo")

	desc, _ := repo.Control["Description"] // c.Description.String()
	parts := strings.Split(desc, "\n")
	fmt.Fprintln(cf, "Description:", strings.Join(parts, "\n "))

	log.Info("file written as:", filename)
	return true
}

func writeControlVar(f *os.File, repo *gitpb.Repo, varname string) {
	val, _ := repo.Control[varname]
	if val == "" {
		return
	}
	fmt.Fprintln(f, varname+":", val)
}

// try to guess or figure out the config file values
// if there is not a control file
func computeControlValues(repo *gitpb.Repo) bool {
	if repo.Control["Package"] == "" {
		// get the package name from the repo name
		path := repo.Control["pathL"] // c.pathL.String()
		parts := strings.Split(path, "/")
		name := parts[len(parts)-1]
		repo.Control["Package"] = name
	}
	if repo.Control["Source"] == "" {
		repo.Control["Source"] = repo.Control["Package"]
	}
	if repo.Control["Build-Depends"] == "" {
		repo.Control["Build-Depends"] = repo.Control["golang"]
	}
	if repo.Control["Recommends"] == "" {
		repo.Control["Recommends"] = repo.Control["go-gui-toolkits"]
	}
	if repo.Control["Maintainer"] == "" {
		repo.Control["Maintainer"] = "todo: get from ENV"
	}
	if repo.Control["Description"] == "" {
		repo.Control["Description"] = "todo: put URL here"
	}
	return true
}

// stamp := time.Now().UTC().Format("2006/01/02 15:04:05 UTC")

func getDateStamp(tag string) string {
	var r cmd.Status
	r = me.repo.Run([]string{"git", "log", "-1", "--format=%at", tag})

	out := strings.Join(r.Stdout, "\n")
	out = strings.TrimSpace(out)

	// Convert the string to an integer
	gitTagTimestampInt, err := strconv.ParseInt(out, 10, 64)
	if err != nil {
		fmt.Println("Error converting timestamp:", err)
		return "git tag " + tag + " unknown"
	}

	// Parse the Unix timestamp into a time.Time object
	gitTagDate := time.Unix(gitTagTimestampInt, 0)
	return gitTagDate.UTC().Format("2006-01-02_15:04:05_UTC") // close to RFC3339
}