Skip to content

Commit 55e3ad7

Browse files
committed
Add usage message functionality
1 parent 0770f5c commit 55e3ad7

File tree

2 files changed

+43
-14
lines changed

2 files changed

+43
-14
lines changed

integration/integration.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,16 @@ var _ = Describe("Integration", func() {
129129
Expect(session.ExitCode()).NotTo(Equal(0))
130130
})
131131
})
132+
133+
Describe("help", func() {
134+
It("returns an error", func() {
135+
command := exec.Command(binaryPath, "--help")
136+
session, err := gexec.Start(command, GinkgoWriter, GinkgoWriter)
137+
Expect(err).NotTo(HaveOccurred())
138+
139+
<-session.Exited
140+
Expect(session.ExitCode()).NotTo(Equal(0))
141+
Expect(session).To(gbytes.Say(`USAGE`))
142+
})
143+
})
132144
})

main.go

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"path/filepath"
1414
"fmt"
1515
"github.com/aemengo/snb/parser"
16+
"strings"
1617
)
1718

1819
var (
@@ -28,38 +29,45 @@ var (
2829
func main() {
2930
startTime := time.Now()
3031

31-
if len(os.Args) == 2 {
32+
switch len(os.Args) {
33+
case 1:
34+
workingDir, _ = filepath.Abs(workingDir)
35+
case 2:
36+
if strings.HasPrefix(os.Args[1], "-") {
37+
showUsage()
38+
}
39+
3240
var err error
3341
workingDir, err = filepath.Abs(os.Args[1])
3442
if err != nil {
35-
logFatal(err)
43+
fatal(err)
3644
}
37-
} else {
38-
workingDir, _ = filepath.Abs(workingDir)
45+
default:
46+
showUsage()
3947
}
4048

4149
fsClient, err := fs.New(workingDir)
4250
if err != nil {
43-
logFatal(err)
51+
fatal(err)
4452
}
4553

4654
if !fsClient.Exists("ShakeAndBakeFile") {
47-
logFatal("ShakeAndBakeFile not found. please execute in directory containing spec, or pass the working directory in as the only argument")
55+
fatal("ShakeAndBakeFile not found. please execute in directory containing spec, or pass the working directory in as the only argument")
4856
}
4957

5058
contents, err := fsClient.Get("ShakeAndBakeFile")
5159
if err != nil {
52-
logFatal(err)
60+
fatal(err)
5361
}
5462

5563
spec, err := parser.Parse(contents)
5664
if err != nil {
57-
logFatal(err)
65+
fatal(err)
5866
}
5967

6068
dbClient, err := db.New(filepath.Join(workingDir, ".snb"))
6169
if err != nil {
62-
logFatal(err)
70+
fatal(err)
6371
}
6472
defer dbClient.Close()
6573

@@ -68,12 +76,12 @@ func main() {
6876

6977
srcFiles, err := fsClient.GetSrcFiles(step)
7078
if err != nil {
71-
logFatal(err)
79+
fatal(err)
7280
}
7381

7482
ok, err := dbClient.IsCached(step, index, srcFiles)
7583
if err != nil {
76-
logFatal(err)
84+
fatal(err)
7785
}
7886

7987
if ok {
@@ -94,12 +102,12 @@ func main() {
94102

95103
srcFiles, err = fsClient.GetSrcFiles(step)
96104
if err != nil {
97-
logFatal(err)
105+
fatal(err)
98106
}
99107

100108
err = dbClient.Save(step, index, srcFiles)
101109
if err != nil {
102-
logFatal(err)
110+
fatal(err)
103111
}
104112
}
105113

@@ -149,7 +157,16 @@ func exitCode(err error) (int, bool) {
149157
return status.ExitStatus(), true
150158
}
151159

152-
func logFatal(message interface{}) {
160+
func fatal(message interface{}) {
153161
fmt.Printf(color.RedString("Error") + ": %s.\n", message)
154162
os.Exit(1)
163+
}
164+
165+
func showUsage() {
166+
fmt.Println(`
167+
USAGE: snb [PATH]
168+
169+
Build an image from a ShakeAndBakeFile
170+
`)
171+
os.Exit(1)
155172
}

0 commit comments

Comments
 (0)