grim/convey

Fix bad shell expansion.

2017-10-16, Eric Fritz
f7074f8947f6
Fix bad shell expansion.
--- a/environment/mapper.go Sun Oct 15 15:58:00 2017 -0500
+++ b/environment/mapper.go Mon Oct 16 09:45:11 2017 -0500
@@ -32,6 +32,14 @@
)
func (e *envMapper) Map(name string) string {
+ // We might have something like $(pwd), in which case we don't want
+ // to wrap the name in `{}`, which would cause it to be ${}(pwd) and
+ // cannot be evaluated by a run task.
+
+ if name == "" {
+ return "$"
+ }
+
for _, item := range e.env {
if parts := strings.SplitN(item, "=", 2); parts[0] == name {
if len(parts) == 2 {
--- a/environment/mapper_test.go Sun Oct 15 15:58:00 2017 -0500
+++ b/environment/mapper_test.go Mon Oct 16 09:45:11 2017 -0500
@@ -84,3 +84,9 @@
_, err := Mapper("${FOO}", []string{"FOO=FOO${FOO}"})
Expect(err).To(MatchError("infinite environment mapping loop while expanding '${FOO}'"))
}
+
+func (e *environmentSuite) TestMapNestedCommandNotAltered(t sweet.T) {
+ result, err := Mapper("${FOO} $(./${BAR} $BAZ)", []string{"FOO=a", "BAR=b", "BAZ=c"})
+ Expect(err).To(BeNil())
+ Expect(result).To(Equal("a $(./b c)"))
+}