diff --git a/gps/verify/lockdiff.go b/gps/verify/lockdiff.go index 525a46db0e..6618e336c7 100644 --- a/gps/verify/lockdiff.go +++ b/gps/verify/lockdiff.go @@ -95,6 +95,13 @@ func DiffLocks(l1, l2 gps.Lock) LockDelta { Name: pr1, } + // Edge case: If there are no lockedProjects on the RHS, they have most probably been removed from the lock file. + if len(p2) == 0 { + lpd.ProjectRemoved = true + diff.ProjectDeltas[pr1] = lpd + continue + } + for i2 := i2next; i2 < len(p2); i2++ { lp2 := p2[i2] pr2 := lp2.Ident().ProjectRoot diff --git a/gps/verify/lockdiff_test.go b/gps/verify/lockdiff_test.go index 52955a392d..a368f8c76c 100644 --- a/gps/verify/lockdiff_test.go +++ b/gps/verify/lockdiff_test.go @@ -118,6 +118,10 @@ func TestLockDelta(t *testing.T) { lt: dup.addII("other.org").rmII("baz.com/qux").addDumbProject("zebrafun.org").rmProject("foo.com/bar"), delta: InputImportsChanged | ProjectRemoved | ProjectAdded, }, + "remove all projects and imports": { + lt: dup.rmII("baz.com/qux").rmII("foo.com/bar").rmProject("baz.com/qux").rmProject("foo.com/bar").rmProject("transitive.com/dependency"), + delta: InputImportsChanged | ProjectRemoved, + }, } for name, fix := range tt {