entc/gen: compute default target on LoadGraph (#4311)

This commit is contained in:
Jannik Clausen
2025-01-22 12:04:28 +01:00
committed by GitHub
parent 4478d3ccb3
commit ec5bfadcab
2 changed files with 27 additions and 8 deletions

View File

@@ -37,6 +37,9 @@ func LoadGraph(schemaPath string, cfg *gen.Config) (*gen.Graph, error) {
// before the schema package (`<project>/ent/schema`).
cfg.Package = path.Dir(spec.PkgPath)
}
if err := defaultTarget(schemaPath, cfg); err != nil {
return nil, err
}
return gen.NewGraph(cfg, spec.Schemas...)
}
@@ -52,14 +55,8 @@ func LoadGraph(schemaPath string, cfg *gen.Config) (*gen.Graph, error) {
// IDType: &field.TypeInfo{Type: field.TypeInt},
// })
func Generate(schemaPath string, cfg *gen.Config, options ...Option) error {
if cfg.Target == "" {
abs, err := filepath.Abs(schemaPath)
if err != nil {
return err
}
// default target-path for codegen is one dir above
// the schema.
cfg.Target = filepath.Dir(abs)
if err := defaultTarget(schemaPath, cfg); err != nil {
return err
}
for _, opt := range options {
if err := opt(cfg); err != nil {
@@ -407,3 +404,17 @@ func indirect(t reflect.Type) reflect.Type {
}
return t
}
// defaultTarget computes and sets the default target-path for codegen (one level above schema-path).
func defaultTarget(schemaPath string, cfg *gen.Config) error {
if cfg.Target != "" {
return nil
}
abs, err := filepath.Abs(schemaPath)
if err != nil {
return err
}
// Default target-path for codegen is one dir above the schema.
cfg.Target = filepath.Dir(abs)
return nil
}

View File

@@ -51,4 +51,12 @@ func TestIncrementStartAnnotation(t *testing.T) {
g, err = gen.NewGraph(c, s...)
require.ErrorContains(t, err, "duplicated increment start value 4294967296 for types")
require.Nil(t, g)
// Respects existing increment starting values loaded from file.
c.Target = t.TempDir()
is := gen.IncrementStarts{"bs": 0, "as": 1 << 32, "cs": 2 << 32}
require.NoError(t, is.WriteToDisk(c.Target))
g, err = gen.NewGraph(c, &load.Schema{Name: "A"}, &load.Schema{Name: "B"}, &load.Schema{Name: "C"})
require.NoError(t, err)
require.Equal(t, is, g.Annotations[is.Name()])
}