From ec5bfadcabaf816dbc733ee45c217da4141de282 Mon Sep 17 00:00:00 2001 From: Jannik Clausen <12862103+masseelch@users.noreply.github.com> Date: Wed, 22 Jan 2025 12:04:28 +0100 Subject: [PATCH] entc/gen: compute default target on LoadGraph (#4311) --- entc/entc.go | 27 +++++++++++++++++++-------- entc/gen/globalid_test.go | 8 ++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/entc/entc.go b/entc/entc.go index 6a6aa1fe1..2fda63ef6 100644 --- a/entc/entc.go +++ b/entc/entc.go @@ -37,6 +37,9 @@ func LoadGraph(schemaPath string, cfg *gen.Config) (*gen.Graph, error) { // before the schema package (`/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 +} diff --git a/entc/gen/globalid_test.go b/entc/gen/globalid_test.go index 1b8d07967..4aae753c6 100644 --- a/entc/gen/globalid_test.go +++ b/entc/gen/globalid_test.go @@ -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()]) }