lang: funcs: Differentiate between empty and nil values
It would be good to differentiate between receiving an empty value or not having received a value yet. This is similar to the previous commit.
This commit is contained in:
@@ -43,7 +43,7 @@ type AbsPathFunc struct {
|
||||
data *interfaces.FuncData
|
||||
last types.Value // last value received to use for diff
|
||||
|
||||
path string // the active path
|
||||
path *string // the active path
|
||||
result *string // last calculated output
|
||||
|
||||
closeChan chan struct{}
|
||||
@@ -110,10 +110,10 @@ func (obj *AbsPathFunc) Stream() error {
|
||||
|
||||
path := input.Struct()[pathArg].Str()
|
||||
// TODO: add validation for absolute path?
|
||||
if path == obj.path {
|
||||
if obj.path != nil && *obj.path == path {
|
||||
continue // nothing changed
|
||||
}
|
||||
obj.path = path
|
||||
obj.path = &path
|
||||
|
||||
p := strings.TrimSuffix(obj.data.Base, "/")
|
||||
if p == obj.data.Base { // didn't trim, so we fail
|
||||
@@ -122,13 +122,13 @@ func (obj *AbsPathFunc) Stream() error {
|
||||
}
|
||||
result := p
|
||||
|
||||
if obj.path == "" {
|
||||
if *obj.path == "" {
|
||||
result += "/" // add the above trailing slash back
|
||||
} else if !strings.HasPrefix(obj.path, "/") {
|
||||
return fmt.Errorf("path was not absolute, got: `%s`", obj.path)
|
||||
} else if !strings.HasPrefix(*obj.path, "/") {
|
||||
return fmt.Errorf("path was not absolute, got: `%s`", *obj.path)
|
||||
//result += "/" // be forgiving ?
|
||||
}
|
||||
result += obj.path
|
||||
result += *obj.path
|
||||
|
||||
if obj.result != nil && *obj.result == result {
|
||||
continue // result didn't change
|
||||
|
||||
@@ -40,7 +40,7 @@ type ReadFileFunc struct {
|
||||
data *interfaces.FuncData
|
||||
last types.Value // last value received to use for diff
|
||||
|
||||
filename string // the active filename
|
||||
filename *string // the active filename
|
||||
result *string // last calculated output
|
||||
|
||||
closeChan chan struct{}
|
||||
@@ -107,10 +107,11 @@ func (obj *ReadFileFunc) Stream() error {
|
||||
|
||||
filename := input.Struct()["filename"].Str()
|
||||
// TODO: add validation for absolute path?
|
||||
if filename == obj.filename {
|
||||
// TODO: add check for empty string
|
||||
if obj.filename != nil && *obj.filename == filename {
|
||||
continue // nothing changed
|
||||
}
|
||||
obj.filename = filename
|
||||
obj.filename = &filename
|
||||
|
||||
p := strings.TrimSuffix(obj.data.Base, "/")
|
||||
if p == obj.data.Base { // didn't trim, so we fail
|
||||
@@ -119,11 +120,11 @@ func (obj *ReadFileFunc) Stream() error {
|
||||
}
|
||||
path := p
|
||||
|
||||
if !strings.HasPrefix(obj.filename, "/") {
|
||||
return fmt.Errorf("filename was not absolute, got: `%s`", obj.filename)
|
||||
if !strings.HasPrefix(*obj.filename, "/") {
|
||||
return fmt.Errorf("filename was not absolute, got: `%s`", *obj.filename)
|
||||
//path += "/" // be forgiving ?
|
||||
}
|
||||
path += obj.filename
|
||||
path += *obj.filename
|
||||
|
||||
fs, err := obj.init.World.Fs(obj.data.FsURI) // open the remote file system
|
||||
if err != nil {
|
||||
|
||||
@@ -40,7 +40,7 @@ type ReadFileAbsFunc struct {
|
||||
data *interfaces.FuncData
|
||||
last types.Value // last value received to use for diff
|
||||
|
||||
filename string // the active filename
|
||||
filename *string // the active filename
|
||||
result *string // last calculated output
|
||||
|
||||
closeChan chan struct{}
|
||||
@@ -107,20 +107,21 @@ func (obj *ReadFileAbsFunc) Stream() error {
|
||||
|
||||
filename := input.Struct()["filename"].Str()
|
||||
// TODO: add validation for absolute path?
|
||||
if filename == obj.filename {
|
||||
// TODO: add check for empty string
|
||||
if obj.filename != nil && *obj.filename == filename {
|
||||
continue // nothing changed
|
||||
}
|
||||
obj.filename = filename
|
||||
obj.filename = &filename
|
||||
|
||||
fs, err := obj.init.World.Fs(obj.data.FsURI) // open the remote file system
|
||||
if err != nil {
|
||||
return errwrap.Wrapf(err, "can't load code from file system `%s`", obj.data.FsURI)
|
||||
}
|
||||
content, err := fs.ReadFile(obj.filename) // open the remote file system
|
||||
content, err := fs.ReadFile(*obj.filename) // open the remote file system
|
||||
// We could use it directly, but it feels like less correct.
|
||||
//content, err := obj.data.Fs.ReadFile(obj.filename) // open the remote file system
|
||||
//content, err := obj.data.Fs.ReadFile(*obj.filename) // open the remote file system
|
||||
if err != nil {
|
||||
return errwrap.Wrapf(err, "can't read file `%s`", obj.filename)
|
||||
return errwrap.Wrapf(err, "can't read file `%s`", *obj.filename)
|
||||
}
|
||||
|
||||
result := string(content) // convert to string
|
||||
|
||||
@@ -41,7 +41,7 @@ type ReadFileFunc struct {
|
||||
init *interfaces.Init
|
||||
last types.Value // last value received to use for diff
|
||||
|
||||
filename string // the active filename
|
||||
filename *string // the active filename
|
||||
recWatcher *recwatch.RecWatcher
|
||||
events chan error // internal events
|
||||
wg *sync.WaitGroup
|
||||
@@ -112,10 +112,11 @@ func (obj *ReadFileFunc) Stream() error {
|
||||
|
||||
filename := input.Struct()["filename"].Str()
|
||||
// TODO: add validation for absolute path?
|
||||
if filename == obj.filename {
|
||||
// TODO: add check for empty string
|
||||
if obj.filename != nil && *obj.filename == filename {
|
||||
continue // nothing changed
|
||||
}
|
||||
obj.filename = filename
|
||||
obj.filename = &filename
|
||||
|
||||
if obj.recWatcher != nil {
|
||||
obj.recWatcher.Close() // close previous watcher
|
||||
@@ -123,7 +124,7 @@ func (obj *ReadFileFunc) Stream() error {
|
||||
}
|
||||
// create new watcher
|
||||
obj.recWatcher = &recwatch.RecWatcher{
|
||||
Path: obj.filename,
|
||||
Path: *obj.filename,
|
||||
Recurse: false,
|
||||
Flags: recwatch.Flags{
|
||||
// TODO: add Logf
|
||||
@@ -189,7 +190,7 @@ func (obj *ReadFileFunc) Stream() error {
|
||||
}
|
||||
|
||||
// read file...
|
||||
content, err := ioutil.ReadFile(obj.filename)
|
||||
content, err := ioutil.ReadFile(*obj.filename)
|
||||
if err != nil {
|
||||
return errwrap.Wrapf(err, "error reading file")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user