silence cmd commands when used in batch file
[p5sagit/local-lib.git] / lib / local / lib.pm
index 9a8e93f..ee36e1a 100644 (file)
@@ -321,13 +321,20 @@ sub environment_vars_string_for {
         && ${$value->[0]} eq $name) {
       next;
     }
-    if (!ref $value
-        && defined $value ? $value eq $ENV{$name} : !defined $ENV{$name}
+    if (
+        !ref $value
+        and defined $value
+          ? (defined $ENV{$name} && $value eq $ENV{$name})
+          : !defined $ENV{$name}
     ) {
       next;
     }
     $out .= $self->$build_method($name, $value);
   }
+  my $wrap_method = 'wrap_' . $self->shelltype . '_output';
+  if ($self->can($wrap_method)) {
+    return $self->$wrap_method($out);
+  }
   return $out;
 }
 
@@ -350,15 +357,19 @@ sub build_cmd_env_declaration {
   my ($class, $name, $args) = @_;
   my $value = $class->_interpolate($args, '%', '%', qr([()!^"<>&|]), '^');
   defined $value
-    ? qq{set $name=$value\n}
-    : qq{set $name=\n};
+    ? qq{\@set $name=$value\n}
+    : qq{\@set $name=\n};
 }
 sub build_powershell_env_declaration {
   my ($class, $name, $args) = @_;
   my $value = $class->_interpolate($args, '$env:', '', '"', '`');
   defined $value
-    ? qq{\$env:$name = "$value"\n}
-    : "Remove-Item Env:\\$name\n";
+    ? qq{\$env:$name = "$value";\n}
+    : "Remove-Item Env:\\$name;\n";
+}
+sub wrap_powershell_output {
+  my ($class, $out) = @_;
+  return $out || " \n";
 }