This repository has been archived by the owner on Aug 6, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathutils.go
125 lines (105 loc) · 2.45 KB
/
utils.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package cmd
import (
"io"
"io/ioutil"
"log"
"net/http"
"net/url"
"os"
"strings"
"github.com/spf13/cobra"
"gitlab.com/qm64/backpack/pkg"
)
func isValidUrl(toTest string) bool {
_, err := url.ParseRequestURI(toTest)
if err != nil {
return false
}
u, err := url.Parse(toTest)
if err != nil || u.Scheme == "" || u.Host == "" {
return false
}
return true
}
func downloadIntoTempFile(url string) (newPath string, err error) {
file, err := ioutil.TempFile(os.TempDir(), "backpack-")
if err != nil {
log.Fatal("Cannot create temporary file", err)
}
response, err := http.Get(url)
if err != nil {
}
defer response.Body.Close()
defer file.Close()
_, err = io.Copy(file, response.Body)
if err != nil {
return "", err
}
return file.Name(), nil
}
func whatIsInput(v string) string {
if isValidUrl(v) {
return "url"
}
if _, err := os.Stat(v); err == nil {
return "file"
}
return "unknown"
}
// getAUsablePathOfFile will try to understand what is v, and if it is a URL
// it will try to obtain it in one way or another. if it is a file, it will
// leave the path as is. This will help to support multiple path formats in CLI
func getAUsablePathOfFile(v string) string {
switch whatIsInput(v) {
case "url":
np, err := downloadIntoTempFile(v)
if err != nil {
log.Fatalf("Error downloading the url %s: %s", v, err)
}
return np
case "file":
return v
default:
return v
}
}
func getPackFromCLIInput(cmd *cobra.Command, args []string) pkg.Pack {
b := pkg.Pack{}
readFromDir, err := cmd.Flags().GetBool("unpacked")
if err != nil {
log.Fatalf("Error parsing CLI flags: %s", err)
}
if !readFromDir {
// get a file from URL or Path
p := getAUsablePathOfFile(args[0])
b, err = pkg.GetPackFromFile(p)
if err != nil {
log.Fatalf("Error parsing the pack: %s", err)
}
} else {
// If we have to read from directory instead args[0] is a path
d, err := pkg.GetPackFromDirectory(args[0])
if err != nil {
log.Fatalf("Error parsing the unpacked pack: %s", err)
}
b = *d
}
return b
}
func getValuesFromCLIInput(cmd *cobra.Command) pkg.ValuesType {
vfPath, err := cmd.Flags().GetString("values")
if err != nil {
log.Fatalf("Error parsing CLI flags: %s", err)
}
values := pkg.ValuesType{}
if vfPath != "" {
values, err = pkg.ValuesFromFile(vfPath)
if err != nil {
log.Fatalf("Error reading the value file: %s", err)
}
}
return values
}
func sanitizeUUIDPrefix(s string) string {
return strings.Split(s, "-")[0]
}