about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2013-08-24 20:48:31 +0000
committerEric Wong <normalperson@yhbt.net>2013-08-24 20:48:31 +0000
commitef70b5de358a728caa105b91016433ad2e9eeece (patch)
treee49157474b345efd6f53f75a5ccaa86a520573ce
parent3e09ac0c10c95bb24a08af62393b4f761e2743d0 (diff)
downloaddtas-ef70b5de358a728caa105b91016433ad2e9eeece.tar.gz
Omitting a command: entry or an entry inside env: should delete
it from the player
-rwxr-xr-xbin/dtas-sinkedit18
-rwxr-xr-xbin/dtas-sourceedit11
2 files changed, 25 insertions, 4 deletions
diff --git a/bin/dtas-sinkedit b/bin/dtas-sinkedit
index d1e8fb4..24cd302 100755
--- a/bin/dtas-sinkedit
+++ b/bin/dtas-sinkedit
@@ -18,9 +18,9 @@ tmp.binmode
 
 buf = c.req(%W(sink cat #{name}))
 abort(buf) if buf =~ /\AERR/
-buf << DTAS_DISCLAIMER
+orig = YAML.load(buf)
 
-tmp.write(buf)
+tmp.write(buf << DTAS_DISCLAIMER)
 cmd = "#{editor} #{tmp.path}"
 system(cmd) or abort "#{cmd} failed: #$?"
 tmp.rewind
@@ -33,14 +33,26 @@ if env = sink["env"]
   end
 end
 
+# remove deleted env
+if orig_env = orig["env"]
+  env ||= {}
+  deleted_keys = orig_env.keys - env.keys
+  deleted_keys.each { |k| cmd << "env##{k}" }
+end
+
 %w(nonblock active).each do |field|
   if sink.key?(field)
     cmd << "#{field}=#{sink[field] ? 'true' : 'false'}"
   end
 end
 
-%w(prio pipe_size command).each do |field|
+%w(prio pipe_size).each do |field|
   value = sink[field] and cmd << "#{field}=#{value}"
 end
 
+%w(command).each do |field|
+  value = sink[field]
+  cmd << "#{field}=#{value}"
+end
+
 c.req_ok(cmd)
diff --git a/bin/dtas-sourceedit b/bin/dtas-sourceedit
index 9d329d7..3ce7945 100755
--- a/bin/dtas-sourceedit
+++ b/bin/dtas-sourceedit
@@ -18,6 +18,7 @@ tmp.binmode
 
 buf = c.req(%W(source cat))
 abort(buf) if buf =~ /\AERR/
+orig = YAML.load(buf)
 
 tmp.write(buf << DTAS_DISCLAIMER)
 cmd = "#{editor} #{tmp.path}"
@@ -32,8 +33,16 @@ if env = source["env"]
   end
 end
 
+# remove deleted env
+if orig_env = orig["env"]
+  env ||= {}
+  deleted_keys = orig_env.keys - env.keys
+  deleted_keys.each { |k| cmd << "env##{k}" }
+end
+
 %w(command).each do |field|
-  value = source[field] and cmd << "#{field}=#{value}"
+  value = source[field]
+  cmd << "#{field}=#{value}"
 end
 
 c.req_ok(cmd)