@@ -12,6 +12,7 @@ import (
12
12
"log"
13
13
"os"
14
14
"path/filepath"
15
+ "sort"
15
16
"strings"
16
17
17
18
"github.com/golang/dep"
@@ -89,7 +90,15 @@ func (cmd *checkCommand) Run(ctx *dep.Ctx, args []string) error {
89
90
logger .Printf ("%s\n " , sprintLockUnsat (lsat ))
90
91
}
91
92
if changed {
92
- for pr , lpd := range delta .ProjectDeltas {
93
+ // Sort, for deterministic output.
94
+ var ordered []string
95
+ for pr := range delta .ProjectDeltas {
96
+ ordered = append (ordered , string (pr ))
97
+ }
98
+ sort .Strings (ordered )
99
+
100
+ for _ , pr := range ordered {
101
+ lpd := delta .ProjectDeltas [gps .ProjectRoot (pr )]
93
102
// Only two possible changes right now are prune opts
94
103
// changing or a missing hash digest (for old Gopkg.lock
95
104
// files)
@@ -122,16 +131,25 @@ func (cmd *checkCommand) Run(ctx *dep.Ctx, args []string) error {
122
131
if fail {
123
132
logger .Println ()
124
133
}
125
- // One full pass through, to see if we need to print the header.
126
- for _ , status := range statuses {
134
+
135
+ var vendorfail bool
136
+ // One full pass through, to see if we need to print the header, and to
137
+ // create an array of names to sort for deterministic output.
138
+ var ordered []string
139
+ for path , status := range statuses {
140
+ ordered = append (ordered , path )
127
141
if status != verify .NoMismatch {
128
142
fail = true
129
- logger .Println ("# vendor is out of sync:" )
130
- break
143
+ if ! vendorfail {
144
+ vendorfail = true
145
+ logger .Println ("# vendor is out of sync:" )
146
+ }
131
147
}
132
148
}
149
+ sort .Strings (ordered )
133
150
134
- for pr , status := range statuses {
151
+ for _ , pr := range ordered {
152
+ status := statuses [pr ]
135
153
switch status {
136
154
case verify .NotInTree :
137
155
logger .Printf ("%s: missing from vendor\n " , pr )
@@ -165,16 +183,33 @@ func (cmd *checkCommand) Run(ctx *dep.Ctx, args []string) error {
165
183
166
184
func sprintLockUnsat (lsat verify.LockSatisfaction ) string {
167
185
var buf bytes.Buffer
186
+ sort .Strings (lsat .MissingImports )
168
187
for _ , missing := range lsat .MissingImports {
169
188
fmt .Fprintf (& buf , "%s: missing from input-imports\n " , missing )
170
189
}
190
+
191
+ sort .Strings (lsat .ExcessImports )
171
192
for _ , excess := range lsat .ExcessImports {
172
193
fmt .Fprintf (& buf , "%s: in input-imports, but not imported\n " , excess )
173
194
}
174
- for pr , unmatched := range lsat .UnmetOverrides {
195
+
196
+ var ordered []string
197
+ for pr := range lsat .UnmetOverrides {
198
+ ordered = append (ordered , string (pr ))
199
+ }
200
+ sort .Strings (ordered )
201
+ for _ , pr := range ordered {
202
+ unmatched := lsat .UnmetOverrides [gps .ProjectRoot (pr )]
175
203
fmt .Fprintf (& buf , "%s@%s: not allowed by override %s\n " , pr , unmatched .V , unmatched .C )
176
204
}
177
- for pr , unmatched := range lsat .UnmetConstraints {
205
+
206
+ ordered = ordered [:0 ]
207
+ for pr := range lsat .UnmetConstraints {
208
+ ordered = append (ordered , string (pr ))
209
+ }
210
+ sort .Strings (ordered )
211
+ for _ , pr := range ordered {
212
+ unmatched := lsat .UnmetConstraints [gps .ProjectRoot (pr )]
178
213
fmt .Fprintf (& buf , "%s@%s: not allowed by constraint %s\n " , pr , unmatched .V , unmatched .C )
179
214
}
180
215
return strings .TrimSpace (buf .String ())
0 commit comments