/
in.go
81 lines (68 loc) · 1.68 KB
/
in.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
package main
import (
"fmt"
"github.com/concourse/hg-resource/hg"
"io"
)
const cmdInName string = "in"
var cmdIn = &Command{
Name: cmdInName,
Run: runIn,
NumArgs: 1,
Usage: inUsage,
}
func runIn(args []string, params *JsonInput, outWriter io.Writer, errWriter io.Writer) int {
destination := args[0]
repo := &hg.Repository{
Path: destination,
Branch: params.Source.Branch,
OmitBranch: params.Source.OmitBranch,
IncludePaths: params.Source.IncludePaths,
ExcludePaths: params.Source.ExcludePaths,
TagFilter: params.Source.TagFilter,
RevSetFilter: params.Source.RevSetFilter,
SkipSslVerification: params.Source.SkipSslVerification,
}
if len(repo.Branch) == 0 {
repo.Branch = defaultBranch
}
if len(params.Source.Uri) == 0 {
fmt.Fprintln(errWriter, "Repository URI must be provided")
return 1
}
var commitId string
if len(params.Version.Ref) == 0 {
commitId = "tip"
} else {
commitId = params.Version.Ref
}
output, err := repo.CloneOrPull(params.Source.Uri)
errWriter.Write(output)
if err != nil {
fmt.Fprintln(errWriter, err)
return 1
}
output, err = repo.Checkout(commitId)
errWriter.Write(output)
if err != nil {
fmt.Fprintln(errWriter, err)
return 1
}
output, err = repo.Purge()
errWriter.Write(output)
if err != nil {
fmt.Fprintln(errWriter, err)
return 1
}
jsonOutput, err := getJsonOutputForCurrentCommit(repo)
if err != nil {
fmt.Fprintln(errWriter, err)
return 1
}
WriteJson(outWriter, jsonOutput)
return 0
}
func inUsage(appName string, err io.Writer) {
errMsg := fmt.Sprintf("Usage: %s <path/to/destination>", appName)
err.Write([]byte(errMsg))
}