Skip to content

Commit

Permalink
Handle empty <localRepository/> in settings.xml
Browse files Browse the repository at this point in the history
Fixes #1811
  • Loading branch information
bigdaz authored and jjohannes committed Jun 16, 2017
1 parent ebeb3bf commit d4c3bb4
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 13 deletions.
Expand Up @@ -15,6 +15,7 @@
*/
package org.gradle.api.internal.artifacts.mvnsettings;

import org.apache.commons.lang.StringUtils;
import org.apache.maven.settings.Settings;
import org.apache.maven.settings.building.DefaultSettingsBuilder;
import org.apache.maven.settings.building.DefaultSettingsBuilderFactory;
Expand Down Expand Up @@ -56,6 +57,8 @@ public Settings buildSettings() throws SettingsBuildingException {

/**
* Read the local repository location from local Maven settings files.
*
* @return The path to the local repository, or <code>null</code> if not specified in Maven settings.
*/
@Override
public String getLocalRepository() {
Expand All @@ -73,7 +76,8 @@ private String readLocalRepository(File settingsFile) {
Map<String, ?> options = Collections.singletonMap(SettingsReader.IS_STRICT, Boolean.FALSE);
SettingsReader settingsReader = new DefaultSettingsReader();
try {
return settingsReader.read(settingsFile, options).getLocalRepository();
String localRepository = settingsReader.read(settingsFile, options).getLocalRepository();
return StringUtils.isEmpty(localRepository) ? null : localRepository;
} catch (Exception parseException) {
throw new CannotLocateLocalMavenRepositoryException("Unable to parse local Maven settings: " + settingsFile.getAbsolutePath(), parseException);
}
Expand Down
Expand Up @@ -33,7 +33,7 @@ class DefaultLocalMavenRepositoryLocatorTest extends Specification {
File repo1 = tmpDir.file("repo1")
File repo2 = tmpDir.file("repo2")
File userHome1 = tmpDir.file("user_home_1")
File userHome2 = tmpDir.file("user_home_2")
File defaultM2Repo = new File(userHome1, ".m2/repository")

def setup() {
locations = new SimpleMavenFileLocations()
Expand All @@ -44,10 +44,11 @@ class DefaultLocalMavenRepositoryLocatorTest extends Specification {
when:
1 * system.getProperty("user.home") >> userHome1.absolutePath
then:
locator.localMavenRepository == new File(userHome1, ".m2/repository")
locator.localMavenRepository == defaultM2Repo

// Ensure that modified user.home is honoured (see http://forums.gradle.org/gradle/topics/override_location_of_the_local_maven_repo)
when:
File userHome2 = tmpDir.file("user_home_2")
1 * system.getProperty("user.home") >> userHome2.absolutePath
then:
locator.localMavenRepository == new File(userHome2, ".m2/repository")
Expand Down Expand Up @@ -97,25 +98,38 @@ class DefaultLocalMavenRepositoryLocatorTest extends Specification {
locator.localMavenRepository == repo1
}

def "ignores changes to maven settings file after initial load"() {
def "honors location specified in global settings file"() {
writeSettingsFile(locations.globalSettingsFile, repo1)

expect:
locator.localMavenRepository == repo1
}

def "returns default location if user settings file specifies empty local repository"() {
when:
writeSettingsFile(locations.userSettingsFile, repo1)
writeSettingsFile(locations.userSettingsFile, "")
1 * system.getProperty("user.home") >> userHome1.absolutePath

then:
locator.localMavenRepository == repo1
locator.localMavenRepository == defaultM2Repo
}

def "returns default location if global settings file specifies empty local repository"() {
when:
writeSettingsFile(locations.userSettingsFile, repo2)
writeSettingsFile(locations.globalSettingsFile, "")
1 * system.getProperty("user.home") >> userHome1.absolutePath

then:
locator.localMavenRepository == repo1
locator.localMavenRepository == defaultM2Repo
}

def "honors location specified in global settings file"() {
writeSettingsFile(locations.globalSettingsFile, repo1)
def "returns global location if user settings file specifies empty local repository"() {
when:
writeSettingsFile(locations.userSettingsFile, "")
writeSettingsFile(locations.globalSettingsFile, repo2)

expect:
locator.localMavenRepository == repo1
then:
locator.localMavenRepository == repo2
}

def "prefers location specified in user settings file over that in global settings file"() {
Expand All @@ -126,14 +140,28 @@ class DefaultLocalMavenRepositoryLocatorTest extends Specification {
locator.localMavenRepository == repo1
}

def "ignores changes to maven settings file after initial load"() {
when:
writeSettingsFile(locations.userSettingsFile, repo1)

then:
locator.localMavenRepository == repo1

when:
writeSettingsFile(locations.userSettingsFile, repo2)

then:
locator.localMavenRepository == repo1
}

def "handles the case where (potential) location of global settings file cannot be determined"() {
locations.globalSettingsFile = null
when:
system.getProperty("user.home") >> userHome1.absolutePath
then:
locator.localMavenRepository == new File(userHome1, ".m2/repository")
locator.localMavenRepository == defaultM2Repo
when:
writeSettingsFile(locations.userSettingsFile, repo1)
Expand Down

0 comments on commit d4c3bb4

Please sign in to comment.