internal/pkg: destroy unreachable status entries
All checks were successful
Test / Create distribution (push) Successful in 1m28s
Test / Sandbox (push) Successful in 2m39s
Test / ShareFS (push) Successful in 3m39s
Test / Hakurei (push) Successful in 3m52s
Test / Sandbox (race detector) (push) Successful in 8m30s
Test / Hakurei (race detector) (push) Successful in 11m35s
Test / Flake checks (push) Successful in 8m54s
All checks were successful
Test / Create distribution (push) Successful in 1m28s
Test / Sandbox (push) Successful in 2m39s
Test / ShareFS (push) Successful in 3m39s
Test / Hakurei (push) Successful in 3m52s
Test / Sandbox (race detector) (push) Successful in 8m30s
Test / Hakurei (race detector) (push) Successful in 11m35s
Test / Flake checks (push) Successful in 8m54s
These must be destroyed alongside their corresponding identifier or substitute entries to avoid inconsistent state. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -80,6 +80,13 @@ func (c *Cache) Clean(dry, inputs bool, keep ...Artifact) (
|
||||
destroyedIdents := make([]unique.Handle[ID], 0, len(idents))
|
||||
for _, pair := range idents {
|
||||
if !dry {
|
||||
if err = os.Remove(c.base.Append(
|
||||
dirStatus,
|
||||
pair.name,
|
||||
).String()); err != nil && !errors.Is(err, os.ErrNotExist) {
|
||||
return destroyedIdents, nil, err
|
||||
}
|
||||
|
||||
if err = os.Remove(c.base.Append(
|
||||
dirIdentifier,
|
||||
pair.name,
|
||||
@@ -125,6 +132,13 @@ func (c *Cache) Clean(dry, inputs bool, keep ...Artifact) (
|
||||
|
||||
c.msg.Verbosef("destroying substitute %s...", name)
|
||||
if !dry {
|
||||
if err = os.Remove(c.base.Append(
|
||||
dirStatus,
|
||||
name,
|
||||
).String()); err != nil && !errors.Is(err, os.ErrNotExist) {
|
||||
return destroyedIdents, nil, err
|
||||
}
|
||||
|
||||
if err = os.Remove(c.base.Append(
|
||||
dirSubstitute,
|
||||
name,
|
||||
|
||||
@@ -143,13 +143,6 @@ func TestClean(t *testing.T) {
|
||||
deps: []pkg.Artifact{
|
||||
pkg.NewFile("destroyed-input", []byte("destroyed")),
|
||||
},
|
||||
cure: func(f *pkg.FContext) error {
|
||||
p := f.GetWorkDir()
|
||||
if err := os.MkdirAll(p.String(), 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
return os.WriteFile(p.Append("result").String(), nil, 0444)
|
||||
},
|
||||
}),
|
||||
}, []unique.Handle[pkg.Checksum]{
|
||||
unique.Make(sha512.Sum384([]byte("destroyed"))),
|
||||
@@ -163,6 +156,12 @@ func TestClean(t *testing.T) {
|
||||
pkg.NewFile("destroyed-input", []byte("destroyed")),
|
||||
},
|
||||
cure: func(f *pkg.FContext) error {
|
||||
if w, err := f.GetStatusWriter(); err != nil {
|
||||
return err
|
||||
} else if _, err = w.Write([]byte("destroyed")); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
p := f.GetWorkDir()
|
||||
if err := os.MkdirAll(p.String(), 0755); err != nil {
|
||||
return err
|
||||
@@ -178,6 +177,12 @@ func TestClean(t *testing.T) {
|
||||
pkg.NewFile("kept-input", []byte("kept")),
|
||||
},
|
||||
cure: func(f *pkg.FContext) error {
|
||||
if w, err := f.GetStatusWriter(); err != nil {
|
||||
return err
|
||||
} else if _, err = w.Write([]byte("kept")); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
p := f.GetWorkDir()
|
||||
if err := os.MkdirAll(p.String(), 0755); err != nil {
|
||||
return err
|
||||
@@ -199,7 +204,10 @@ func TestClean(t *testing.T) {
|
||||
|
||||
"lock": {Mode: 0644},
|
||||
"variant": {Mode: 0400},
|
||||
"status": {Mode: fs.ModeDir | 0700},
|
||||
|
||||
"status": {Mode: fs.ModeDir | 0700},
|
||||
"status/4bjS-QjGcSV4nth-W6Vg3-wolKmKgiq4Ld2oRIWcOfy6Wi41XXLAWPoo8FcDx6BH": {Mode: 0400, Data: []byte(statusHeader + "kept")},
|
||||
"status/xoIGLemzLF227e-w_AJcf_1Sgqh2gs3KFgqvOIWUQE-9P_y2vHBMBytL4GRGQqTb": {Mode: 0400, Data: []byte(statusHeader + "kept")},
|
||||
|
||||
"substitute": {Mode: fs.ModeDir | 0700},
|
||||
"substitute/4bjS-QjGcSV4nth-W6Vg3-wolKmKgiq4Ld2oRIWcOfy6Wi41XXLAWPoo8FcDx6BH": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/CyDnDvF-LaeGPcSW70tPosNCoclByWkTjznUUF1DcgzlIwkN9yzz1ZFME1TlPj6W")},
|
||||
@@ -214,13 +222,6 @@ func TestClean(t *testing.T) {
|
||||
deps: []pkg.Artifact{
|
||||
pkg.NewFile("destroyed-input", []byte("destroyed")),
|
||||
},
|
||||
cure: func(f *pkg.FContext) error {
|
||||
p := f.GetWorkDir()
|
||||
if err := os.MkdirAll(p.String(), 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
return os.WriteFile(p.Append("result").String(), nil, 0444)
|
||||
},
|
||||
}),
|
||||
}, []unique.Handle[pkg.Checksum]{
|
||||
unique.Make(expectsFS{
|
||||
|
||||
Reference in New Issue
Block a user