Skip to content
This repository was archived by the owner on Sep 9, 2020. It is now read-only.

Commit e70cafa

Browse files
committed
status: log errors and failure feedback
1 parent 60e5c84 commit e70cafa

File tree

2 files changed

+55
-9
lines changed

2 files changed

+55
-9
lines changed

cmd/dep/status.go

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ print an extended status output for each dependency of the project.
4343
Status returns exit code zero if all dependencies are in a "good state".
4444
`
4545

46+
var errFailedUpdate = errors.New("failed to fetch updates")
47+
4648
func (cmd *statusCommand) Name() string { return "status" }
4749
func (cmd *statusCommand) Args() string { return "[package...]" }
4850
func (cmd *statusCommand) ShortHelp() string { return statusShortHelp }
@@ -98,7 +100,7 @@ func (out *tableOutput) BasicLine(bs *BasicStatus) {
98100
bs.getConsolidatedConstraint(),
99101
formatVersion(bs.Version),
100102
formatVersion(bs.Revision),
101-
formatVersion(bs.Latest),
103+
bs.getConsolidatedLatest(),
102104
bs.PackageCount,
103105
)
104106
}
@@ -222,6 +224,15 @@ func (cmd *statusCommand) Run(ctx *dep.Ctx, args []string) error {
222224

223225
digestMismatch, hasMissingPkgs, err := runStatusAll(ctx, out, p, sm)
224226
if err != nil {
227+
// Print the outdated results
228+
if err == errFailedUpdate {
229+
ctx.Out.Println(buf.String())
230+
231+
// Print the help when in non-verbose mode
232+
if !ctx.Verbose {
233+
ctx.Out.Println("Failed to get status of some projects. Run `dep status -v` to see the error messages.")
234+
}
235+
}
225236
return err
226237
}
227238

@@ -245,8 +256,8 @@ type rawStatus struct {
245256
ProjectRoot string
246257
Constraint string
247258
Version string
248-
Revision gps.Revision
249-
Latest gps.Version
259+
Revision string
260+
Latest string
250261
PackageCount int
251262
}
252263

@@ -261,6 +272,7 @@ type BasicStatus struct {
261272
Latest gps.Version
262273
PackageCount int
263274
hasOverride bool
275+
hasError bool
264276
}
265277

266278
func (bs *BasicStatus) getConsolidatedConstraint() string {
@@ -288,13 +300,26 @@ func (bs *BasicStatus) getConsolidatedVersion() string {
288300
return version
289301
}
290302

303+
func (bs *BasicStatus) getConsolidatedLatest() string {
304+
latest := ""
305+
if bs.Latest != nil {
306+
latest = formatVersion(bs.Latest)
307+
}
308+
309+
if bs.hasError {
310+
latest += "unknown"
311+
}
312+
313+
return latest
314+
}
315+
291316
func (bs *BasicStatus) marshalJSON() *rawStatus {
292317
return &rawStatus{
293318
ProjectRoot: bs.ProjectRoot,
294319
Constraint: bs.getConsolidatedConstraint(),
295320
Version: formatVersion(bs.Version),
296-
Revision: bs.Revision,
297-
Latest: bs.Latest,
321+
Revision: formatVersion(bs.Revision),
322+
Latest: bs.getConsolidatedLatest(),
298323
PackageCount: bs.PackageCount,
299324
}
300325
}
@@ -390,6 +415,7 @@ func runStatusAll(ctx *dep.Ctx, out outputter, p *dep.Project, sm gps.SourceMana
390415
ptr, err := sm.ListPackages(proj.Ident(), proj.Version())
391416

392417
if err != nil {
418+
bs.hasError = true
393419
errorCh <- err
394420
}
395421

@@ -445,6 +471,11 @@ func runStatusAll(ctx *dep.Ctx, out outputter, p *dep.Project, sm gps.SourceMana
445471
break
446472
}
447473
}
474+
} else {
475+
// Failed to fetch version list (could happen due to
476+
// network issue)
477+
bs.hasError = true
478+
errorCh <- err
448479
}
449480
}
450481

@@ -458,11 +489,16 @@ func runStatusAll(ctx *dep.Ctx, out outputter, p *dep.Project, sm gps.SourceMana
458489
close(errorCh)
459490
logger.Println()
460491

492+
var updateError error
493+
461494
if len(errorCh) > 0 {
462-
for err := range errorCh {
463-
ctx.Err.Println(err.Error())
495+
updateError = errFailedUpdate
496+
if ctx.Verbose {
497+
for err := range errorCh {
498+
ctx.Err.Println(err.Error())
499+
}
500+
ctx.Err.Println()
464501
}
465-
ctx.Err.Println()
466502
}
467503

468504
// A map of ProjectRoot and *BasicStatus. This is used in maintain the
@@ -480,7 +516,7 @@ func runStatusAll(ctx *dep.Ctx, out outputter, p *dep.Project, sm gps.SourceMana
480516

481517
out.BasicFooter()
482518

483-
return digestMismatch, hasMissingPkgs, nil
519+
return digestMismatch, hasMissingPkgs, updateError
484520
}
485521

486522
// Hash digest mismatch may indicate that some deps are no longer

cmd/dep/status_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,16 @@ func TestBasicLine(t *testing.T) {
8585
wantJSONStatus: []string{`"Revision":"revxyz"`, `"Constraint":"1.2.3"`, `"Version":"1.0.0"`},
8686
wantTableStatus: []string{`github.com/foo/bar 1.2.3 1.0.0 revxyz 0`},
8787
},
88+
{
89+
name: "BasicStatus with update error",
90+
status: BasicStatus{
91+
ProjectRoot: "github.com/foo/bar",
92+
hasError: true,
93+
},
94+
wantDotStatus: []string{`[label="github.com/foo/bar"];`},
95+
wantJSONStatus: []string{`"Version":""`, `"Revision":""`, `"Latest":"unknown"`},
96+
wantTableStatus: []string{`github.com/foo/bar unknown 0`},
97+
},
8898
}
8999

90100
for _, test := range tests {

0 commit comments

Comments
 (0)