You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2022/01/03 17:12:36 UTC

[maven-shared-utils] branch MSHARED-1014 created (now 7a21fbd)

This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a change to branch MSHARED-1014
in repository https://gitbox.apache.org/repos/asf/maven-shared-utils.git.


      at 7a21fbd  [MSHARED-1014] Optionally inherit system environment variables by Commandline

This branch includes the following new commits:

     new 7a21fbd  [MSHARED-1014] Optionally inherit system environment variables by Commandline

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[maven-shared-utils] 01/01: [MSHARED-1014] Optionally inherit system environment variables by Commandline

Posted by sj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch MSHARED-1014
in repository https://gitbox.apache.org/repos/asf/maven-shared-utils.git

commit 7a21fbd1c845dad51cff0cf41523cd4ef117044f
Author: Slawomir Jaranowski <s....@gmail.com>
AuthorDate: Mon Jan 3 18:12:15 2022 +0100

    [MSHARED-1014] Optionally inherit system environment variables by Commandline
---
 .../apache/maven/shared/utils/cli/Commandline.java | 39 +++++++++++++++++++---
 .../shared/utils/cli/CommandLineUtilsTest.java     | 35 +++++++++++--------
 2 files changed, 56 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/apache/maven/shared/utils/cli/Commandline.java b/src/main/java/org/apache/maven/shared/utils/cli/Commandline.java
index e03e905..7281589 100644
--- a/src/main/java/org/apache/maven/shared/utils/cli/Commandline.java
+++ b/src/main/java/org/apache/maven/shared/utils/cli/Commandline.java
@@ -65,12 +65,14 @@ import org.apache.maven.shared.utils.cli.shell.Shell;
 public class Commandline
     implements Cloneable
 {
-    private final List<Arg> arguments = new Vector<Arg>();
+    private final List<Arg> arguments = new Vector<>();
 
     private final Map<String, String> envVars = Collections.synchronizedMap( new LinkedHashMap<String, String>() );
 
     private Shell shell;
 
+    private boolean shellEnvironmentInherited = true;
+
     /**
      * Create a new command line object.
      * Shell is autodetected from operating system.
@@ -198,13 +200,16 @@ public class Commandline
      */
     public void addEnvironment( String name, String value )
     {
-        //envVars.add( name + "=" + value );
         envVars.put( name, value );
     }
 
     /**
      * Add system environment variables.
+     *
+     * @deprecated by default system environment variables are inherited by executing command.
+     * In order to change default behavior pleas use {@link #setShellEnvironmentInherited(boolean)}
      */
+    @Deprecated
     public void addSystemEnvironment()
     {
         Properties systemEnvVars = CommandLineUtils.getSystemEnvVars();
@@ -226,7 +231,11 @@ public class Commandline
      */
     public String[] getEnvironmentVariables()
     {
-        addSystemEnvironment();
+        if ( isShellEnvironmentInherited() )
+        {
+            addSystemEnvironment();
+        }
+
         List<String> environmentVars = new ArrayList<>();
         for ( String name : envVars.keySet() )
         {
@@ -297,7 +306,7 @@ public class Commandline
      */
     public String[] getArguments( boolean mask )
     {
-        List<String> result = new ArrayList<String>( arguments.size() * 2 );
+        List<String> result = new ArrayList<>( arguments.size() * 2 );
         for ( Arg argument : arguments )
         {
             Argument arg = (Argument) argument;
@@ -378,6 +387,28 @@ public class Commandline
     }
 
     /**
+     * Indicates whether the environment variables of the current process should be propagated to the executing Command.
+     * By default, the current environment variables are inherited by the new Command line execution.
+     *
+     * @return <code>true</code> if the environment variables should be propagated, <code>false</code> otherwise.
+     */
+    public boolean isShellEnvironmentInherited()
+    {
+        return shellEnvironmentInherited;
+    }
+
+    /**
+     * Specifies whether the environment variables of the current process should be propagated to the executing Command.
+     *
+     * @param shellEnvironmentInherited <code>true</code> if the environment variables should be propagated,
+     *            <code>false</code> otherwise.
+     */
+    public void setShellEnvironmentInherited( boolean shellEnvironmentInherited )
+    {
+        this.shellEnvironmentInherited = shellEnvironmentInherited;
+    }
+
+    /**
      * Execute the command.
      * 
      * @return the process
diff --git a/src/test/java/org/apache/maven/shared/utils/cli/CommandLineUtilsTest.java b/src/test/java/org/apache/maven/shared/utils/cli/CommandLineUtilsTest.java
index 81b2997..2605eaa 100644
--- a/src/test/java/org/apache/maven/shared/utils/cli/CommandLineUtilsTest.java
+++ b/src/test/java/org/apache/maven/shared/utils/cli/CommandLineUtilsTest.java
@@ -22,6 +22,7 @@ package org.apache.maven.shared.utils.cli;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.hamcrest.Matchers.not;
+import static org.hamcrest.collection.IsArrayWithSize.emptyArray;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -56,9 +57,8 @@ public class CommandLineUtilsTest
 
     @Test
     public void testEnsureCaseSensitivity()
-        throws Exception
     {
-        Map<String, String> data = new HashMap<String, String>();
+        Map<String, String> data = new HashMap<>();
         data.put( "abz", "cool" );
         assertTrue( CommandLineUtils.ensureCaseSensitivity( data, false ).containsKey( "ABZ" ) );
         assertTrue( CommandLineUtils.ensureCaseSensitivity( data, true ).containsKey( "abz" ) );
@@ -69,7 +69,6 @@ public class CommandLineUtilsTest
      */
     @Test
     public void testGetSystemEnvVarsWindows()
-        throws Exception
     {
         if ( !Os.isFamily( Os.FAMILY_WINDOWS ) )
         {
@@ -103,14 +102,9 @@ public class CommandLineUtilsTest
         assertCmdLineArgs( new String[] { "foo", " ' ", "bar" }, "foo \" ' \" bar" );
     }
 
-
     @Test
-    public void givenASingleQuoteMarkInArgument_whenExecutingCode_thenNoExceptionIsThrown() throws Exception {
-        new Commandline("echo \"let's go\"").execute();
-    }
-
-    @Test
-    public void givenADoubleQuoteMarkInArgument_whenExecutingCode_thenCommandLineExceptionIsThrown() throws Exception {
+    public void givenADoubleQuoteMarkInArgument_whenExecutingCode_thenCommandLineExceptionIsThrown()
+    {
         try {
             new Commandline("echo \"let\"s go\"").execute();
         } catch (CommandLineException e) {
@@ -124,8 +118,7 @@ public class CommandLineUtilsTest
     @Test
     public void givenASingleQuoteMarkInArgument_whenExecutingCode_thenExitCode0Returned() throws Exception {
         final Process p = new Commandline("echo \"let's go\"").execute();
-        // Note, this sleep should be removed when java version reaches Java 8
-        Thread.sleep(1000);
+        p.waitFor();
         assertEquals(0, p.exitValue());
     }
 
@@ -160,7 +153,9 @@ public class CommandLineUtilsTest
     public void givenAnEscapedDoubleQuoteMarkInArgument_whenTranslatingToCmdLineArgs_thenNoExceptionIsThrown()
         throws Exception
     {
-        new Commandline( "echo \"let\\\"s go\"" ).execute();
+        Process p = new Commandline( "echo \"let\\\"s go\"" ).execute();
+        p.waitFor();
+        assertEquals(0, p.exitValue());
     }
 
     private void assertCmdLineArgs( final String[] expected, final String cmdLine )
@@ -185,7 +180,7 @@ public class CommandLineUtilsTest
     }
 
     @Test
-    public void environmentVariableFromSystemIsCopied() {
+    public void environmentVariableFromSystemIsCopiedByDefault() {
 
         Commandline commandline = new Commandline();
 
@@ -196,6 +191,18 @@ public class CommandLineUtilsTest
     }
 
     @Test
+    public void environmentVariableFromSystemIsNotCopiedIfInheritedIsFalse() {
+
+        Commandline commandline = new Commandline();
+        commandline.setShellEnvironmentInherited( false );
+
+        String[] environmentVariables = commandline.getEnvironmentVariables();
+
+        assertNotNull(environmentVariables);
+        assertThat(environmentVariables, emptyArray() );
+    }
+
+    @Test
     public void environmentVariableFromSystemIsRemoved() {
 
         Commandline commandline = new Commandline();