entc/gen: fix feature-flag cleanups (#1210)

This commit is contained in:
Ariel Mashraki
2021-01-26 22:31:32 +02:00
committed by GitHub
parent 06ae79acba
commit 8876d31317
2 changed files with 42 additions and 3 deletions

View File

@@ -5,6 +5,7 @@
package gen
import (
"io/ioutil"
"os"
"path/filepath"
)
@@ -39,7 +40,7 @@ var (
Default: false,
Description: "Schema snapshot stores a snapshot of ent/schema and auto-solve merge-conflict (issue #852)",
cleanup: func(c *Config) error {
return os.RemoveAll(filepath.Join(c.Target, "internal"))
return remove(filepath.Join(c.Target, "internal"), "schema.go")
},
}
@@ -58,7 +59,7 @@ var (
},
},
cleanup: func(c *Config) error {
return os.RemoveAll(filepath.Join(c.Target, "internal"))
return remove(filepath.Join(c.Target, "internal"), "schemaconfig.go")
},
}
@@ -115,3 +116,21 @@ type Feature struct {
// e.g. delete files from previous codegen runs.
cleanup func(*Config) error
}
// remove file (if exists) and its dir if it's empty.
func remove(dir, file string) error {
if err := os.Remove(filepath.Join(dir, file)); err != nil {
if os.IsNotExist(err) {
return nil
}
return err
}
infos, err := ioutil.ReadDir(dir)
if err != nil {
return err
}
if len(infos) == 0 {
return os.Remove(dir)
}
return nil
}

View File

@@ -291,6 +291,7 @@ func TestGraph_Gen(t *testing.T) {
Storage: drivers[0],
Templates: []*Template{external},
IDType: &field.TypeInfo{Type: field.TypeInt},
Features: AllFeatures,
}, &load.Schema{
Name: "T1",
Fields: []*load.Field{
@@ -315,8 +316,27 @@ func TestGraph_Gen(t *testing.T) {
_, err := os.Stat(fmt.Sprintf(fmt.Sprintf("%s/%s.go", target, format), "t1"))
require.NoError(err)
}
_, err = os.Stat(target + "/external.go")
_, err = os.Stat(filepath.Join(target, "external.go"))
require.NoError(err)
// Generated feature templates.
_, err = os.Stat(filepath.Join(target, "internal", "schema.go"))
require.NoError(err)
_, err = os.Stat(filepath.Join(target, "internal", "schemaconfig.go"))
require.NoError(err)
// Rerun codegen with only one feature-flag.
graph.Features = []Feature{FeatureSnapshot}
require.NoError(graph.Gen())
// Generated feature templates.
_, err = os.Stat(filepath.Join(target, "internal", "schema.go"))
require.NoError(err)
_, err = os.Stat(filepath.Join(target, "internal", "schemaconfig.go"))
require.True(os.IsNotExist(err))
// Rerun codegen without any feature-flags.
graph.Features = nil
require.NoError(graph.Gen())
_, err = os.Stat(filepath.Join(target, "internal"))
require.True(os.IsNotExist(err))
}
func ensureStructTag(name string) Hook {