Allow absolute paths in schema files. (#192)
* Allow absolute paths in schema files. Thsi is useful for some out-of-tree testing I want to do. It's unfortunate (imo) that filepath.join doesn't have this behavior by default. Test plan: go test ./... * run gofmt * one more change to use pathJoin
This commit is contained in:
committed by
GitHub
parent
c8cbe805eb
commit
482a59b802
@@ -30,6 +30,7 @@ When releasing a new version:
|
||||
- genqlient can now run as a portable binary (i.e. without a local checkout of the repository or `go run`).
|
||||
- You can now enable `use_extensions` in the configuration file, to receive extensions returned by the GraphQL API server. Generated functions will return extensions as `map[string]interface{}`, if enabled.
|
||||
- You can now use `graphql.NewClientUsingGet` to create a client that uses query parameters to pass the query to the GraphQL API server.
|
||||
- In config files, `schema`, `operations`, and `generated` can now be absolute paths.
|
||||
|
||||
### Bug fixes:
|
||||
|
||||
|
||||
+15
-5
@@ -51,6 +51,16 @@ type TypeBinding struct {
|
||||
Unmarshaler string `yaml:"unmarshaler"`
|
||||
}
|
||||
|
||||
// pathJoin is like filepath.Join but 1) it only takes two argsuments,
|
||||
// and b) if the second argument is an absolute path the first argument
|
||||
// is ignored (similar to how python's os.path.join() works).
|
||||
func pathJoin(a, b string) string {
|
||||
if filepath.IsAbs(b) {
|
||||
return b
|
||||
}
|
||||
return filepath.Join(a, b)
|
||||
}
|
||||
|
||||
// ValidateAndFillDefaults ensures that the configuration is valid, and fills
|
||||
// in any options that were unspecified.
|
||||
//
|
||||
@@ -59,14 +69,14 @@ type TypeBinding struct {
|
||||
func (c *Config) ValidateAndFillDefaults(baseDir string) error {
|
||||
c.baseDir = baseDir
|
||||
for i := range c.Schema {
|
||||
c.Schema[i] = filepath.Join(baseDir, c.Schema[i])
|
||||
c.Schema[i] = pathJoin(baseDir, c.Schema[i])
|
||||
}
|
||||
for i := range c.Operations {
|
||||
c.Operations[i] = filepath.Join(baseDir, c.Operations[i])
|
||||
c.Operations[i] = pathJoin(baseDir, c.Operations[i])
|
||||
}
|
||||
c.Generated = filepath.Join(baseDir, c.Generated)
|
||||
c.Generated = pathJoin(baseDir, c.Generated)
|
||||
if c.ExportOperations != "" {
|
||||
c.ExportOperations = filepath.Join(baseDir, c.ExportOperations)
|
||||
c.ExportOperations = pathJoin(baseDir, c.ExportOperations)
|
||||
}
|
||||
|
||||
if c.ContextType == "" {
|
||||
@@ -154,7 +164,7 @@ func findCfg() (string, error) {
|
||||
|
||||
func findCfgInDir(dir string) string {
|
||||
for _, cfgName := range cfgFilenames {
|
||||
path := filepath.Join(dir, cfgName)
|
||||
path := pathJoin(dir, cfgName)
|
||||
if _, err := os.Stat(path); err == nil {
|
||||
return path
|
||||
}
|
||||
|
||||
@@ -88,3 +88,21 @@ func TestFindCfgInDir(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAbsoluteAndRelativePathsInConfigFiles(t *testing.T) {
|
||||
cwd, err := os.Getwd()
|
||||
require.NoError(t, err)
|
||||
|
||||
config, err := ReadAndValidateConfig(
|
||||
cwd + "/testdata/find-config/current/genqlient.yaml")
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 1, len(config.Schema))
|
||||
require.Equal(
|
||||
t,
|
||||
cwd+"/testdata/find-config/current/schema.graphql",
|
||||
config.Schema[0],
|
||||
)
|
||||
require.Equal(t, 1, len(config.Operations))
|
||||
require.Equal(t, "/tmp/genqlient.graphql", config.Operations[0])
|
||||
}
|
||||
|
||||
+2
-1
@@ -2,5 +2,6 @@
|
||||
# https://github.com/Khan/genqlient/blob/main/docs/genqlient.yaml
|
||||
schema: schema.graphql
|
||||
operations:
|
||||
- genqlient.graphql
|
||||
# Also use this config to test absolute paths in config files.
|
||||
- /tmp/genqlient.graphql
|
||||
generated: generated.go
|
||||
|
||||
Reference in New Issue
Block a user