lazy: Reset error in Reset
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 2 Dec 2021 15:49:44 +0000 (16:49 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 2 Dec 2021 17:06:19 +0000 (18:06 +0100)
To prevent sticky errors on server rebuilds.

Fixes #7043
Closes #9194

lazy/init.go
lazy/init_test.go

index e2e70072ea471297001910d622c269f39f337f70..6dff0c98c298bdcf6f60f6fa1ff5524034e8ba3b 100644 (file)
@@ -136,6 +136,7 @@ func (ini *Init) shouldInitialize() bool {
 // Reset resets the current and all its dependencies.
 func (ini *Init) Reset() {
        mu := ini.init.ResetWithLock()
+       ini.err = nil
        defer mu.Unlock()
        for _, d := range ini.children {
                d.Reset()
index 2051f6b1a5f7a81dfb4bef6320776620749905d1..541b34b669adc9c4eba411236c2b6e010968cfe6 100644 (file)
@@ -220,3 +220,22 @@ func TestInitBranchOrder(t *testing.T) {
 
        c.Assert(state.V2, qt.Equals, "ABAB")
 }
+
+// See issue 7043
+func TestResetError(t *testing.T) {
+       c := qt.New(t)
+       r := false
+       i := New().Add(func() (interface{}, error) {
+               if r {
+                       return nil, nil
+               }
+               return nil, errors.New("r is false")
+       })
+       _, err := i.Do()
+       c.Assert(err, qt.IsNotNil)
+       i.Reset()
+       r = true
+       _, err = i.Do()
+       c.Assert(err, qt.IsNil)
+
+}