aboutsummaryrefslogtreecommitdiffstats
path: root/main/augeas/0016-Shellvars-allow-in-commands.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/augeas/0016-Shellvars-allow-in-commands.patch')
-rw-r--r--main/augeas/0016-Shellvars-allow-in-commands.patch177
1 files changed, 177 insertions, 0 deletions
diff --git a/main/augeas/0016-Shellvars-allow-in-commands.patch b/main/augeas/0016-Shellvars-allow-in-commands.patch
new file mode 100644
index 0000000000..e29c4710d3
--- /dev/null
+++ b/main/augeas/0016-Shellvars-allow-in-commands.patch
@@ -0,0 +1,177 @@
+From 7b01ce17d4caafdfa1f83a1d43b926c8ef2dd9c8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rapha=C3=ABl=20Pinson?= <raphael.pinson@camptocamp.com>
+Date: Tue, 25 Aug 2015 11:28:41 +0200
+Subject: [PATCH 16/19] Shellvars: allow &&/|| in commands
+
+---
+ lenses/shellvars.aug | 80 ++++++++++++++++++++++++-----------------
+ lenses/tests/test_shellvars.aug | 42 ++++++++++++++++++++--
+ 2 files changed, 87 insertions(+), 35 deletions(-)
+
+diff --git a/lenses/shellvars.aug b/lenses/shellvars.aug
+index f68f5bb..f7f4c47 100644
+--- a/lenses/shellvars.aug
++++ b/lenses/shellvars.aug
+@@ -106,28 +106,66 @@ module Shellvars =
+ . Util.del_str "return"
+ . ( Util.del_ws_spc . store Rx.integer )?
+
++ let action (operator:string) (lbl:string) (sto:lens) =
++ [ del (Rx.opt_space . operator . Rx.opt_space) (" " . operator . " ")
++ . label ("@".lbl) . sto ]
++
++ let action_pipe = action "|" "pipe"
++ let action_and = action "&&" "and"
++ let action_or = action "||" "or"
++
+ let condition =
+- let action (operator:string) (lbl:string) =
+- [ Sep.opt_space . Util.del_str operator . Sep.opt_space
+- . label lbl . sto_to_semicol ]
+- in let cond (start:string) (end:string) = [ label "type" . store start ]
+- . Util.del_ws_spc . sto_to_semicol
+- . Util.del_ws_spc . Util.del_str end
+- . ( action "&&" "@and" | action "||" "@or" )*
++ let cond (start:string) (end:string) = [ label "type" . store start ]
++ . Util.del_ws_spc . sto_to_semicol
++ . Util.del_ws_spc . Util.del_str end
++ . ( action_and sto_to_semicol | action_or sto_to_semicol )*
+ in Util.indent . label "@condition" . (cond "[" "]" | cond "[[" "]]")
+
+ (* Entry types *)
+ let entry_eol_item (item:lens) = [ item . comment_or_eol ]
+ let entry_item (item:lens) = [ item ]
+
++ let entry_eol_nocommand =
++ entry_eol_item source
++ | entry_eol_item kv
++ | entry_eol_item unset
++ | entry_eol_item bare_export
++ | entry_eol_item builtin
++ | entry_eol_item return
++ | entry_eol_item condition
++ | entry_eol_item eval
++ | entry_eol_item alias
++
++ let entry_noeol_nocommand =
++ entry_item source
++ | entry_item kv
++ | entry_item unset
++ | entry_item bare_export
++ | entry_item builtin
++ | entry_item return
++ | entry_item condition
++ | entry_item eval
++ | entry_item alias
++
+ (* Command *)
+ let rec command =
+ let reserved_key = /exit|shift|return|ulimit|unset|export|source|\.|if|for|select|while|until|then|else|fi|done|case|eval|alias/
+ in let word = /[A-Za-z0-9_.-\/]+/
+- in let pipe = del /[ \t]*\|[ \t]*/ " | "
++ in let entry_eol = entry_eol_nocommand | entry_eol_item command
++ in let entry_noeol = entry_noeol_nocommand | entry_item command
++ in let entry = entry_eol | entry_noeol
++ in let pipe = action_pipe (entry_eol_item command | entry_item command)
++ in let and = action_and entry
++ in let or = action_or entry
+ in Util.indent . label "@command" . store (word - reserved_key)
+ . [ Sep.space . label "@arg" . sto_to_semicol]?
+- . (pipe . (entry_eol_item command | entry_item command) )*
++ . ( pipe | and | or )?
++
++ let entry_eol = entry_eol_nocommand
++ | entry_eol_item command
++
++ let entry_noeol = entry_noeol_nocommand
++ | entry_item command
+
+ (************************************************************************
+ * Group: CONDITIONALS AND LOOPS
+@@ -185,30 +223,6 @@ module Shellvars =
+ . entry+
+ . Util.indent . Util.del_str "}" . eol ]
+
+- let entry_eol =
+- entry_eol_item source
+- | entry_eol_item kv
+- | entry_eol_item unset
+- | entry_eol_item bare_export
+- | entry_eol_item builtin
+- | entry_eol_item return
+- | entry_eol_item condition
+- | entry_eol_item eval
+- | entry_eol_item alias
+- | entry_eol_item command
+-
+- let entry_noeol =
+- entry_item source
+- | entry_item kv
+- | entry_item unset
+- | entry_item bare_export
+- | entry_item builtin
+- | entry_item return
+- | entry_item condition
+- | entry_item eval
+- | entry_item alias
+- | entry_item command
+-
+ let rec rec_entry =
+ let entry = comment | entry_eol | rec_entry in
+ cond_if entry
+diff --git a/lenses/tests/test_shellvars.aug b/lenses/tests/test_shellvars.aug
+index e0bf7fb..2c810cb 100644
+--- a/lenses/tests/test_shellvars.aug
++++ b/lenses/tests/test_shellvars.aug
+@@ -627,8 +627,46 @@ test Shellvars.lns get "echo foobar 'and this is baz'
+ test Shellvars.lns get "echo \"$STRING\" | grep foo\n" =
+ { "@command" = "echo"
+ { "@arg" = "\"$STRING\"" }
+- { "@command" = "grep"
+- { "@arg" = "foo" } } }
++ { "@pipe"
++ { "@command" = "grep"
++ { "@arg" = "foo" } } } }
++
++(* Test: Shellvars.lns
++ Support && and || after command
++ GH #215 *)
++test Shellvars.lns get "grep -q \"Debian\" /etc/issue && echo moo\n" =
++ { "@command" = "grep"
++ { "@arg" = "-q \"Debian\" /etc/issue" }
++ { "@and"
++ { "@command" = "echo"
++ { "@arg" = "moo" } } } }
++
++test Shellvars.lns get "grep -q \"Debian\" /etc/issue || echo baa\n" =
++ { "@command" = "grep"
++ { "@arg" = "-q \"Debian\" /etc/issue" }
++ { "@or"
++ { "@command" = "echo"
++ { "@arg" = "baa" } } } }
++
++test Shellvars.lns get "grep -q \"Debian\" /etc/issue && DEBIAN=1\n" =
++ { "@command" = "grep"
++ { "@arg" = "-q \"Debian\" /etc/issue" }
++ { "@and"
++ { "DEBIAN" = "1" } } }
++
++test Shellvars.lns get "cat /etc/issue | grep -q \"Debian\" && echo moo || echo baa\n" =
++ { "@command" = "cat"
++ { "@arg" = "/etc/issue" }
++ { "@pipe"
++ { "@command" = "grep"
++ { "@arg" = "-q \"Debian\"" }
++ { "@and"
++ { "@command" = "echo"
++ { "@arg" = "moo" }
++ { "@or"
++ { "@command" = "echo"
++ { "@arg" = "baa" } } } } } } } }
++
+
+ (* Local Variables: *)
+ (* mode: caml *)
+--
+2.5.0
+