michael-o commented on code in PR #159: URL: https://github.com/apache/maven-scm/pull/159#discussion_r929168403
########## maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/GitCommandLineUtils.java: ########## @@ -196,4 +209,27 @@ public static int execute( Commandline cl, CommandLineUtils.StringStreamConsumer return exitCode; } + static Map<String, String> prepareEnvVariablesForRepository( GitScmProviderRepository repository, + Map<String, String> environmentVariables ) + { + Map<String, String> effectiveEnvironmentVariables = new HashMap<>(); + if ( environmentVariables != null ) + { + effectiveEnvironmentVariables.putAll( environmentVariables ); + } + if ( StringUtils.isNotBlank( repository.getPrivateKey() ) ) + { + if ( effectiveEnvironmentVariables.putIfAbsent( VARIABLE_GIT_SSH_COMMAND, "ssh -IdentitiesOnly=yes -i " + + FilenameUtils.separatorsToUnix( repository.getPrivateKey() ) ) != null ) + { + LOGGER.warn( "Ignore GitScmProviderRepository.privateKey as environment variable {} is already set", + VARIABLE_GIT_SSH_COMMAND ); + } + } + if ( StringUtils.isNotBlank( repository.getPassphrase() ) ) + { + LOGGER.warn( "GitScmProviderRepository.passphrase currently not supported by provider 'git'" ); Review Comment: gitexe is the term, no? ########## maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/GitCommandLineUtils.java: ########## @@ -90,28 +95,36 @@ public static void addTarget( Commandline cl, List<File> files ) } /** - * + * Use this only for command not requiring environment variables (i.e. local commands). * @param workingDirectory * @param command * @return TODO */ public static Commandline getBaseGitCommandLine( File workingDirectory, String command ) { - return getBaseGitCommandLine( workingDirectory, command, Collections.emptyMap() ); + return getBaseGitCommandLine( workingDirectory, command, null, null ); } /** - * + * Use this for commands requiring environment variables (i.e. remote commands). * @param workingDirectory * @param command * @param environment * @return TODO */ public static Commandline getBaseGitCommandLine( File workingDirectory, String command, + GitScmProviderRepository repository, Map<String, String> environment ) { Commandline cl = getAnonymousBaseGitCommandLine( workingDirectory, command ); - environment.forEach( cl::addEnvironment ); + if ( repository != null ) + { + prepareEnvVariablesForRepository( repository, environment ).forEach( cl::addEnvironment ); + } + else if ( environment != null ) + { + environment.forEach( cl::addEnvironment ); + } Review Comment: I don't understand this double cascade. Everything from `environment` is ready in the map if repo is not null, thus the `forEach` is redundant, no? ########## maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/GitCommandLineUtils.java: ########## @@ -196,4 +209,27 @@ public static int execute( Commandline cl, CommandLineUtils.StringStreamConsumer return exitCode; } + static Map<String, String> prepareEnvVariablesForRepository( GitScmProviderRepository repository, + Map<String, String> environmentVariables ) + { + Map<String, String> effectiveEnvironmentVariables = new HashMap<>(); + if ( environmentVariables != null ) + { + effectiveEnvironmentVariables.putAll( environmentVariables ); + } + if ( StringUtils.isNotBlank( repository.getPrivateKey() ) ) + { + if ( effectiveEnvironmentVariables.putIfAbsent( VARIABLE_GIT_SSH_COMMAND, "ssh -IdentitiesOnly=yes -i " Review Comment: `-o Identities...`? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org