* stable-5.1:
Fix NPE in RebaseTodoFile#parseComments
Fix NPE in ObjectIdOwnerMap#get
Fix NPE in CommitOnlyTest#getHead
FileUtils#lastModifiedInstant should not log error if path doesn't exist
Cache user global and system-wide git configurations
Avoid setup and saving FileStoreAttributes compete for ~/.gitconfig lock
Add missing dependencies for running FS_POSIXTest in Eclipse
Fix javadoc for SystemReader#getInstance
Improve retry handling when saving FileStoreAttributes fails
Ensure FSTest uses MockSystemReader
Make supportsAtomicCreateNewFile return true as default
Update orbit to R20190602212107-2019-06 to enable backports from master
Handle InvalidPathException in FS_POSIX#createNewFileAtomic
Ensure root cause of lock creation failures is logged
Implement toString in MockSystemReader and MockConfig
LocalDiskRefTreeDatabaseTest shall use MockSystemReader
Ensure LocalDiskRepositoryTestCase#setup fully uses MockSystemReader
Ensure we use MockSystemReader in tests
Override FileBasedConfig's save method in MockConfig
Remove FileBasedConfig.load(boolean) introduced in d45219ba
Disable debug log for FS in org.eclipse.jgit.test
Bazel: enable logging for tests in org.eclipse.jgit.test
LockFile: log exception if creation of lock file failed
Stop using deprecated Constants.CHARACTER_ENCODING
Change-Id: I48c585f3c9287be7d6ddb6b01a1955444e13fa31
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
tags/v5.3.3.201908210735-r
@@ -30,8 +30,8 @@ maven_jar( | |||
maven_jar( | |||
name = "jsch", | |||
artifact = "com.jcraft:jsch:0.1.54", | |||
sha1 = "da3584329a263616e277e15462b387addd1b208d", | |||
artifact = "com.jcraft:jsch:0.1.55", | |||
sha1 = "bbd40e5aa7aa3cfad5db34965456cee738a42a50", | |||
) | |||
maven_jar( | |||
@@ -48,14 +48,14 @@ maven_jar( | |||
maven_jar( | |||
name = "httpclient", | |||
artifact = "org.apache.httpcomponents:httpclient:4.5.5", | |||
sha1 = "1603dfd56ebcd583ccdf337b6c3984ac55d89e58", | |||
artifact = "org.apache.httpcomponents:httpclient:4.5.6", | |||
sha1 = "1afe5621985efe90a92d0fbc9be86271efbe796f", | |||
) | |||
maven_jar( | |||
name = "httpcore", | |||
artifact = "org.apache.httpcomponents:httpcore:4.4.9", | |||
sha1 = "a86ce739e5a7175b4b234c290a00a5fdb80957a0", | |||
artifact = "org.apache.httpcomponents:httpcore:4.4.10", | |||
sha1 = "acc54d9b28bdffe4bbde89ed2e4a1e86b5285e2b", | |||
) | |||
maven_jar( | |||
@@ -138,22 +138,22 @@ maven_jar( | |||
maven_jar( | |||
name = "mockito", | |||
artifact = "org.mockito:mockito-core:2.13.0", | |||
sha1 = "8e372943974e4a121fb8617baced8ebfe46d54f0", | |||
artifact = "org.mockito:mockito-core:2.23.0", | |||
sha1 = "497ddb32fd5d01f9dbe99a2ec790aeb931dff1b1", | |||
) | |||
BYTE_BUDDY_VERSION = "1.7.9" | |||
BYTE_BUDDY_VERSION = "1.9.0" | |||
maven_jar( | |||
name = "byte_buddy", | |||
name = "bytebuddy", | |||
artifact = "net.bytebuddy:byte-buddy:" + BYTE_BUDDY_VERSION, | |||
sha1 = "51218a01a882c04d0aba8c028179cce488bbcb58", | |||
sha1 = "8cb0d5baae526c9df46ae17693bbba302640538b", | |||
) | |||
maven_jar( | |||
name = "byte_buddy_agent", | |||
name = "bytebuddy-agent", | |||
artifact = "net.bytebuddy:byte-buddy-agent:" + BYTE_BUDDY_VERSION, | |||
sha1 = "a6c65f9da7f467ee1f02ff2841ffd3155aee2fc9", | |||
sha1 = "37b5703b4a6290be3fffc63ae9c6bcaaee0ff856", | |||
) | |||
maven_jar( |
@@ -162,9 +162,13 @@ java_library( | |||
testonly = 1, | |||
visibility = ["//visibility:public"], | |||
exports = [ | |||
"@bytebuddy//jar", | |||
"@bytebuddy-agent//jar", | |||
"@hamcrest-core//jar", | |||
"@hamcrest-library//jar", | |||
"@junit//jar", | |||
"@mockito//jar", | |||
"@objenesis//jar" | |||
], | |||
) | |||
@@ -173,8 +177,8 @@ java_library( | |||
testonly = 1, | |||
visibility = ["//visibility:public"], | |||
exports = [ | |||
"@byte_buddy//jar", | |||
"@byte_buddy_agent//jar", | |||
"@bytebuddy//jar", | |||
"@bytebuddy-agent//jar", | |||
"@mockito//jar", | |||
"@objenesis//jar", | |||
], |
@@ -107,7 +107,6 @@ import org.eclipse.jgit.lib.StoredConfig; | |||
import org.eclipse.jgit.revwalk.RevBlob; | |||
import org.eclipse.jgit.revwalk.RevCommit; | |||
import org.eclipse.jgit.revwalk.RevWalk; | |||
import org.eclipse.jgit.storage.file.FileBasedConfig; | |||
import org.eclipse.jgit.transport.AbstractAdvertiseRefsHook; | |||
import org.eclipse.jgit.transport.AdvertiseRefsHook; | |||
import org.eclipse.jgit.transport.CredentialItem; | |||
@@ -127,7 +126,6 @@ import org.eclipse.jgit.transport.http.apache.HttpClientConnectionFactory; | |||
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException; | |||
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException; | |||
import org.eclipse.jgit.transport.resolver.UploadPackFactory; | |||
import org.eclipse.jgit.util.FS; | |||
import org.eclipse.jgit.util.HttpSupport; | |||
import org.eclipse.jgit.util.SystemReader; | |||
import org.hamcrest.Matchers; | |||
@@ -652,8 +650,8 @@ public class SmartClientSmartServerTest extends HttpTestCase { | |||
@Test | |||
public void testInitialClone_RedirectMax() throws Exception { | |||
FileBasedConfig userConfig = SystemReader.getInstance() | |||
.openUserConfig(null, FS.DETECTED); | |||
StoredConfig userConfig = SystemReader.getInstance() | |||
.getUserConfig(); | |||
userConfig.setInt("http", null, "maxRedirects", 4); | |||
userConfig.save(); | |||
initialClone_Redirect(4, 302); | |||
@@ -661,8 +659,8 @@ public class SmartClientSmartServerTest extends HttpTestCase { | |||
@Test | |||
public void testInitialClone_RedirectTooOften() throws Exception { | |||
FileBasedConfig userConfig = SystemReader.getInstance() | |||
.openUserConfig(null, FS.DETECTED); | |||
StoredConfig userConfig = SystemReader.getInstance() | |||
.getUserConfig(); | |||
userConfig.setInt("http", null, "maxRedirects", 3); | |||
userConfig.save(); | |||
Repository dst = createBareRepository(); | |||
@@ -701,8 +699,8 @@ public class SmartClientSmartServerTest extends HttpTestCase { | |||
@Test | |||
public void testInitialClone_RedirectOnPostAllowed() throws Exception { | |||
FileBasedConfig userConfig = SystemReader.getInstance() | |||
.openUserConfig(null, FS.DETECTED); | |||
StoredConfig userConfig = SystemReader.getInstance() | |||
.getUserConfig(); | |||
userConfig.setString("http", null, "followRedirects", "true"); | |||
userConfig.save(); | |||
Repository dst = createBareRepository(); | |||
@@ -764,8 +762,8 @@ public class SmartClientSmartServerTest extends HttpTestCase { | |||
@Test | |||
public void testInitialClone_RedirectForbidden() throws Exception { | |||
FileBasedConfig userConfig = SystemReader.getInstance() | |||
.openUserConfig(null, FS.DETECTED); | |||
StoredConfig userConfig = SystemReader.getInstance() | |||
.getUserConfig(); | |||
userConfig.setString("http", null, "followRedirects", "false"); | |||
userConfig.save(); | |||
@@ -128,21 +128,25 @@ public abstract class LocalDiskRepositoryTestCase { | |||
if (!tmp.delete() || !tmp.mkdir()) | |||
throw new IOException("Cannot create " + tmp); | |||
// measure timer resolution before the test to avoid time critical tests | |||
// are affected by time needed for measurement | |||
mockSystemReader = new MockSystemReader(); | |||
SystemReader.setInstance(mockSystemReader); | |||
// Measure timer resolution before the test to avoid time critical tests | |||
// are affected by time needed for measurement. | |||
// The MockSystemReader must be configured first since we need to use | |||
// the same one here | |||
FS.getFileStoreAttributes(tmp.toPath().getParent()); | |||
mockSystemReader = new MockSystemReader(); | |||
mockSystemReader.userGitConfig = new FileBasedConfig(new File(tmp, | |||
"usergitconfig"), FS.DETECTED); | |||
FileBasedConfig userConfig = new FileBasedConfig( | |||
new File(tmp, "usergitconfig"), FS.DETECTED); | |||
// We have to set autoDetach to false for tests, because tests expect to be able | |||
// to clean up by recursively removing the repository, and background GC might be | |||
// in the middle of writing or deleting files, which would disrupt this. | |||
mockSystemReader.userGitConfig.setBoolean(ConfigConstants.CONFIG_GC_SECTION, | |||
userConfig.setBoolean(ConfigConstants.CONFIG_GC_SECTION, | |||
null, ConfigConstants.CONFIG_KEY_AUTODETACH, false); | |||
mockSystemReader.userGitConfig.save(); | |||
userConfig.save(); | |||
mockSystemReader.setUserGitConfig(userConfig); | |||
ceilTestDirectories(getCeilings()); | |||
SystemReader.setInstance(mockSystemReader); | |||
author = new PersonIdent("J. Author", "jauthor@example.com"); | |||
committer = new PersonIdent("J. Committer", "jcommitter@example.com"); |
@@ -60,6 +60,7 @@ import java.util.concurrent.TimeUnit; | |||
import org.eclipse.jgit.errors.ConfigInvalidException; | |||
import org.eclipse.jgit.lib.Config; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.StoredConfig; | |||
import org.eclipse.jgit.storage.file.FileBasedConfig; | |||
import org.eclipse.jgit.util.FS; | |||
import org.eclipse.jgit.util.SystemReader; | |||
@@ -80,20 +81,56 @@ public class MockSystemReader extends SystemReader { | |||
// Do nothing | |||
} | |||
@Override | |||
public void save() throws IOException { | |||
// Do nothing | |||
} | |||
@Override | |||
public boolean isOutdated() { | |||
return false; | |||
} | |||
@Override | |||
public String toString() { | |||
return "MockConfig"; | |||
} | |||
} | |||
long now = 1250379778668L; // Sat Aug 15 20:12:58 GMT-03:30 2009 | |||
final Map<String, String> values = new HashMap<>(); | |||
FileBasedConfig userGitConfig; | |||
private FileBasedConfig userGitConfig; | |||
FileBasedConfig systemGitConfig; | |||
/** | |||
* Set the user-level git config | |||
* | |||
* @param userGitConfig | |||
* set another user-level git config | |||
* @return the old user-level git config | |||
*/ | |||
public FileBasedConfig setUserGitConfig(FileBasedConfig userGitConfig) { | |||
FileBasedConfig old = this.userGitConfig; | |||
this.userGitConfig = userGitConfig; | |||
return old; | |||
} | |||
/** | |||
* Set the system-level git config | |||
* | |||
* @param systemGitConfig | |||
* the new system-level git config | |||
* @return the old system-level config | |||
*/ | |||
public FileBasedConfig setSystemGitConfig(FileBasedConfig systemGitConfig) { | |||
FileBasedConfig old = this.systemGitConfig; | |||
this.systemGitConfig = systemGitConfig; | |||
return old; | |||
} | |||
/** | |||
* Constructor for <code>MockSystemReader</code> | |||
*/ | |||
@@ -156,6 +193,18 @@ public class MockSystemReader extends SystemReader { | |||
return systemGitConfig; | |||
} | |||
@Override | |||
public StoredConfig getUserConfig() | |||
throws IOException, ConfigInvalidException { | |||
return userGitConfig; | |||
} | |||
@Override | |||
public StoredConfig getSystemConfig() | |||
throws IOException, ConfigInvalidException { | |||
return systemGitConfig; | |||
} | |||
/** {@inheritDoc} */ | |||
@Override | |||
public String getHostname() { | |||
@@ -280,4 +329,10 @@ public class MockSystemReader extends SystemReader { | |||
e.printStackTrace(); | |||
} | |||
} | |||
@Override | |||
public String toString() { | |||
return "MockSystemReader"; | |||
} | |||
} |
@@ -74,6 +74,7 @@ import org.apache.http.impl.client.CloseableHttpClient; | |||
import org.apache.http.impl.client.HttpClientBuilder; | |||
import org.eclipse.jetty.servlet.ServletContextHandler; | |||
import org.eclipse.jetty.servlet.ServletHolder; | |||
import org.eclipse.jgit.junit.MockSystemReader; | |||
import org.eclipse.jgit.junit.http.AppServer; | |||
import org.eclipse.jgit.lfs.errors.LfsException; | |||
import org.eclipse.jgit.lfs.lib.AnyLongObjectId; | |||
@@ -85,6 +86,7 @@ import org.eclipse.jgit.lfs.test.LongObjectIdTestUtils; | |||
import org.eclipse.jgit.util.FS; | |||
import org.eclipse.jgit.util.FileUtils; | |||
import org.eclipse.jgit.util.IO; | |||
import org.eclipse.jgit.util.SystemReader; | |||
import org.junit.After; | |||
import org.junit.Before; | |||
@@ -119,6 +121,7 @@ public abstract class LfsServerTest { | |||
@Before | |||
public void setup() throws Exception { | |||
SystemReader.setInstance(new MockSystemReader()); | |||
tmp = Files.createTempDirectory("jgit_test_"); | |||
// measure timer resolution before the test to avoid time critical tests |
@@ -0,0 +1,11 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<component id="org.eclipse.jgit.lfs" version="2"> | |||
<resource path="META-INF/MANIFEST.MF"> | |||
<filter id="924844039"> | |||
<message_arguments> | |||
<message_argument value="5.2.3"/> | |||
<message_argument value="5.2.0"/> | |||
</message_arguments> | |||
</filter> | |||
</resource> | |||
</component> |
@@ -43,14 +43,12 @@ | |||
package org.eclipse.jgit.lfs; | |||
import java.io.IOException; | |||
import java.text.MessageFormat; | |||
import org.eclipse.jgit.api.errors.InvalidConfigurationException; | |||
import org.eclipse.jgit.errors.ConfigInvalidException; | |||
import org.eclipse.jgit.lfs.internal.LfsText; | |||
import org.eclipse.jgit.lib.ConfigConstants; | |||
import org.eclipse.jgit.lib.Repository; | |||
import org.eclipse.jgit.lib.StoredConfig; | |||
import org.eclipse.jgit.storage.file.FileBasedConfig; | |||
import org.eclipse.jgit.util.FS; | |||
import org.eclipse.jgit.util.LfsFactory.LfsInstallCommand; | |||
import org.eclipse.jgit.util.SystemReader; | |||
@@ -70,12 +68,28 @@ public class InstallBuiltinLfsCommand implements LfsInstallCommand { | |||
private Repository repository; | |||
/** {@inheritDoc} */ | |||
/** | |||
* {@inheritDoc} | |||
* | |||
* @throws IOException | |||
* if an I/O error occurs while accessing a git config or | |||
* executing {@code git lfs install} in an external process | |||
* @throws InvalidConfigurationException | |||
* if a git configuration is invalid | |||
* @throws InterruptedException | |||
* if the current thread is interrupted while waiting for the | |||
* {@code git lfs install} executed in an external process | |||
*/ | |||
@Override | |||
public Void call() throws Exception { | |||
public Void call() throws IOException, InvalidConfigurationException, | |||
InterruptedException { | |||
StoredConfig cfg = null; | |||
if (repository == null) { | |||
cfg = loadUserConfig(); | |||
try { | |||
cfg = SystemReader.getInstance().getUserConfig(); | |||
} catch (ConfigInvalidException e) { | |||
throw new InvalidConfigurationException(e.getMessage(), e); | |||
} | |||
} else { | |||
cfg = repository.getConfig(); | |||
} | |||
@@ -116,19 +130,4 @@ public class InstallBuiltinLfsCommand implements LfsInstallCommand { | |||
return this; | |||
} | |||
private StoredConfig loadUserConfig() throws IOException { | |||
FileBasedConfig c = SystemReader.getInstance().openUserConfig(null, | |||
FS.DETECTED); | |||
try { | |||
c.load(); | |||
} catch (ConfigInvalidException e1) { | |||
throw new IOException(MessageFormat | |||
.format(LfsText.get().userConfigInvalid, c.getFile() | |||
.getAbsolutePath(), e1), | |||
e1); | |||
} | |||
return c; | |||
} | |||
} |
@@ -1,7 +1,7 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<?pde?> | |||
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> | |||
<target name="jgit-4.9-staging" sequenceNumber="1544018574"> | |||
<target name="jgit-4.9-staging" sequenceNumber="1566229361"> | |||
<locations> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.eclipse.jetty.client" version="9.4.11.v20180605"/> | |||
@@ -23,18 +23,18 @@ | |||
<repository id="jetty-9.4.11" location="http://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.11.v20180605"/> | |||
</location> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.apache.ant" version="1.10.5.v20180808-0324"/> | |||
<unit id="org.apache.ant.source" version="1.10.5.v20180808-0324"/> | |||
<unit id="org.apache.ant" version="1.10.5.v20190526-1402"/> | |||
<unit id="org.apache.ant.source" version="1.10.5.v20190526-1402"/> | |||
<unit id="org.apache.commons.codec" version="1.10.0.v20180409-1845"/> | |||
<unit id="org.apache.commons.codec.source" version="1.10.0.v20180409-1845"/> | |||
<unit id="org.apache.commons.compress" version="1.18.0.v20181121-2221"/> | |||
<unit id="org.apache.commons.compress.source" version="1.18.0.v20181121-2221"/> | |||
<unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/> | |||
<unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/> | |||
<unit id="org.apache.httpcomponents.httpclient" version="4.5.5.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpclient.source" version="4.5.5.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpcore" version="4.4.9.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpcore.source" version="4.4.9.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpclient" version="4.5.6.v20190503-0009"/> | |||
<unit id="org.apache.httpcomponents.httpclient.source" version="4.5.6.v20190503-0009"/> | |||
<unit id="org.apache.httpcomponents.httpcore" version="4.4.10.v20190123-2214"/> | |||
<unit id="org.apache.httpcomponents.httpcore.source" version="4.4.10.v20190123-2214"/> | |||
<unit id="org.apache.log4j" version="1.2.15.v201012070815"/> | |||
<unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/> | |||
<unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/> | |||
@@ -48,16 +48,16 @@ | |||
<unit id="javaewah.source" version="1.1.6.v20160919-1400"/> | |||
<unit id="org.objenesis" version="2.6.0.v20180420-1519"/> | |||
<unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/> | |||
<unit id="org.mockito" version="2.13.0.v20180426-1843"/> | |||
<unit id="org.mockito.source" version="2.13.0.v20180426-1843"/> | |||
<unit id="net.bytebuddy.byte-buddy" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy.source" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.7.9.v20180420-1519"/> | |||
<unit id="org.mockito" version="2.23.0.v20190527-1420"/> | |||
<unit id="org.mockito.source" version="2.23.0.v20190527-1420"/> | |||
<unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/> | |||
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/> | |||
<unit id="com.google.gson" version="2.8.2.v20180104-1110"/> | |||
<unit id="com.google.gson.source" version="2.8.2.v20180104-1110"/> | |||
<unit id="com.jcraft.jsch" version="0.1.54.v20170116-1932"/> | |||
<unit id="com.jcraft.jsch.source" version="0.1.54.v20170116-1932"/> | |||
<unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> | |||
<unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> | |||
<unit id="org.junit" version="4.12.0.v201504281640"/> | |||
<unit id="org.junit.source" version="4.12.0.v201504281640"/> | |||
<unit id="javax.servlet" version="3.1.0.v201410161800"/> | |||
@@ -76,7 +76,7 @@ | |||
<unit id="org.apache.sshd.core.source" version="2.0.0.v20181102-1323"/> | |||
<unit id="org.apache.sshd.sftp" version="2.0.0.v20181102-1323"/> | |||
<unit id="org.apache.sshd.sftp.source" version="2.0.0.v20181102-1323"/> | |||
<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20181128170323/repository"/> | |||
<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20190602212107/repository"/> | |||
</location> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.eclipse.osgi" version="0.0.0"/> |
@@ -1,7 +1,7 @@ | |||
target "jgit-4.9-staging" with source configurePhase | |||
include "projects/jetty-9.4.11.tpd" | |||
include "orbit/R20181128170323-2018-12.tpd" | |||
include "orbit/R20190602212107-2019-06.tpd" | |||
location "http://download.eclipse.org/staging/2018-12/" { | |||
org.eclipse.osgi lazy |
@@ -1,7 +1,7 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<?pde?> | |||
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> | |||
<target name="jgit-4.5" sequenceNumber="1544018556"> | |||
<target name="jgit-4.5" sequenceNumber="1566229356"> | |||
<locations> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.eclipse.jetty.client" version="9.4.11.v20180605"/> | |||
@@ -23,18 +23,18 @@ | |||
<repository id="jetty-9.4.11" location="http://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.11.v20180605"/> | |||
</location> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.apache.ant" version="1.10.5.v20180808-0324"/> | |||
<unit id="org.apache.ant.source" version="1.10.5.v20180808-0324"/> | |||
<unit id="org.apache.ant" version="1.10.5.v20190526-1402"/> | |||
<unit id="org.apache.ant.source" version="1.10.5.v20190526-1402"/> | |||
<unit id="org.apache.commons.codec" version="1.10.0.v20180409-1845"/> | |||
<unit id="org.apache.commons.codec.source" version="1.10.0.v20180409-1845"/> | |||
<unit id="org.apache.commons.compress" version="1.18.0.v20181121-2221"/> | |||
<unit id="org.apache.commons.compress.source" version="1.18.0.v20181121-2221"/> | |||
<unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/> | |||
<unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/> | |||
<unit id="org.apache.httpcomponents.httpclient" version="4.5.5.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpclient.source" version="4.5.5.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpcore" version="4.4.9.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpcore.source" version="4.4.9.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpclient" version="4.5.6.v20190503-0009"/> | |||
<unit id="org.apache.httpcomponents.httpclient.source" version="4.5.6.v20190503-0009"/> | |||
<unit id="org.apache.httpcomponents.httpcore" version="4.4.10.v20190123-2214"/> | |||
<unit id="org.apache.httpcomponents.httpcore.source" version="4.4.10.v20190123-2214"/> | |||
<unit id="org.apache.log4j" version="1.2.15.v201012070815"/> | |||
<unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/> | |||
<unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/> | |||
@@ -48,16 +48,16 @@ | |||
<unit id="javaewah.source" version="1.1.6.v20160919-1400"/> | |||
<unit id="org.objenesis" version="2.6.0.v20180420-1519"/> | |||
<unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/> | |||
<unit id="org.mockito" version="2.13.0.v20180426-1843"/> | |||
<unit id="org.mockito.source" version="2.13.0.v20180426-1843"/> | |||
<unit id="net.bytebuddy.byte-buddy" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy.source" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.7.9.v20180420-1519"/> | |||
<unit id="org.mockito" version="2.23.0.v20190527-1420"/> | |||
<unit id="org.mockito.source" version="2.23.0.v20190527-1420"/> | |||
<unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/> | |||
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/> | |||
<unit id="com.google.gson" version="2.8.2.v20180104-1110"/> | |||
<unit id="com.google.gson.source" version="2.8.2.v20180104-1110"/> | |||
<unit id="com.jcraft.jsch" version="0.1.54.v20170116-1932"/> | |||
<unit id="com.jcraft.jsch.source" version="0.1.54.v20170116-1932"/> | |||
<unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> | |||
<unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> | |||
<unit id="org.junit" version="4.12.0.v201504281640"/> | |||
<unit id="org.junit.source" version="4.12.0.v201504281640"/> | |||
<unit id="javax.servlet" version="3.1.0.v201410161800"/> | |||
@@ -76,7 +76,7 @@ | |||
<unit id="org.apache.sshd.core.source" version="2.0.0.v20181102-1323"/> | |||
<unit id="org.apache.sshd.sftp" version="2.0.0.v20181102-1323"/> | |||
<unit id="org.apache.sshd.sftp.source" version="2.0.0.v20181102-1323"/> | |||
<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20181128170323/repository"/> | |||
<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20190602212107/repository"/> | |||
</location> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.eclipse.osgi" version="0.0.0"/> |
@@ -1,7 +1,7 @@ | |||
target "jgit-4.5" with source configurePhase | |||
include "projects/jetty-9.4.11.tpd" | |||
include "orbit/R20181128170323-2018-12.tpd" | |||
include "orbit/R20190602212107-2019-06.tpd" | |||
location "http://download.eclipse.org/releases/mars/" { | |||
org.eclipse.osgi lazy |
@@ -1,7 +1,7 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<?pde?> | |||
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> | |||
<target name="jgit-4.6" sequenceNumber="1544018561"> | |||
<target name="jgit-4.6" sequenceNumber="1566229352"> | |||
<locations> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.eclipse.jetty.client" version="9.4.11.v20180605"/> | |||
@@ -23,18 +23,18 @@ | |||
<repository id="jetty-9.4.11" location="http://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.11.v20180605"/> | |||
</location> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.apache.ant" version="1.10.5.v20180808-0324"/> | |||
<unit id="org.apache.ant.source" version="1.10.5.v20180808-0324"/> | |||
<unit id="org.apache.ant" version="1.10.5.v20190526-1402"/> | |||
<unit id="org.apache.ant.source" version="1.10.5.v20190526-1402"/> | |||
<unit id="org.apache.commons.codec" version="1.10.0.v20180409-1845"/> | |||
<unit id="org.apache.commons.codec.source" version="1.10.0.v20180409-1845"/> | |||
<unit id="org.apache.commons.compress" version="1.18.0.v20181121-2221"/> | |||
<unit id="org.apache.commons.compress.source" version="1.18.0.v20181121-2221"/> | |||
<unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/> | |||
<unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/> | |||
<unit id="org.apache.httpcomponents.httpclient" version="4.5.5.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpclient.source" version="4.5.5.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpcore" version="4.4.9.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpcore.source" version="4.4.9.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpclient" version="4.5.6.v20190503-0009"/> | |||
<unit id="org.apache.httpcomponents.httpclient.source" version="4.5.6.v20190503-0009"/> | |||
<unit id="org.apache.httpcomponents.httpcore" version="4.4.10.v20190123-2214"/> | |||
<unit id="org.apache.httpcomponents.httpcore.source" version="4.4.10.v20190123-2214"/> | |||
<unit id="org.apache.log4j" version="1.2.15.v201012070815"/> | |||
<unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/> | |||
<unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/> | |||
@@ -48,16 +48,16 @@ | |||
<unit id="javaewah.source" version="1.1.6.v20160919-1400"/> | |||
<unit id="org.objenesis" version="2.6.0.v20180420-1519"/> | |||
<unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/> | |||
<unit id="org.mockito" version="2.13.0.v20180426-1843"/> | |||
<unit id="org.mockito.source" version="2.13.0.v20180426-1843"/> | |||
<unit id="net.bytebuddy.byte-buddy" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy.source" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.7.9.v20180420-1519"/> | |||
<unit id="org.mockito" version="2.23.0.v20190527-1420"/> | |||
<unit id="org.mockito.source" version="2.23.0.v20190527-1420"/> | |||
<unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/> | |||
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/> | |||
<unit id="com.google.gson" version="2.8.2.v20180104-1110"/> | |||
<unit id="com.google.gson.source" version="2.8.2.v20180104-1110"/> | |||
<unit id="com.jcraft.jsch" version="0.1.54.v20170116-1932"/> | |||
<unit id="com.jcraft.jsch.source" version="0.1.54.v20170116-1932"/> | |||
<unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> | |||
<unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> | |||
<unit id="org.junit" version="4.12.0.v201504281640"/> | |||
<unit id="org.junit.source" version="4.12.0.v201504281640"/> | |||
<unit id="javax.servlet" version="3.1.0.v201410161800"/> | |||
@@ -76,7 +76,7 @@ | |||
<unit id="org.apache.sshd.core.source" version="2.0.0.v20181102-1323"/> | |||
<unit id="org.apache.sshd.sftp" version="2.0.0.v20181102-1323"/> | |||
<unit id="org.apache.sshd.sftp.source" version="2.0.0.v20181102-1323"/> | |||
<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20181128170323/repository"/> | |||
<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20190602212107/repository"/> | |||
</location> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.eclipse.osgi" version="0.0.0"/> |
@@ -1,7 +1,7 @@ | |||
target "jgit-4.6" with source configurePhase | |||
include "projects/jetty-9.4.11.tpd" | |||
include "orbit/R20181128170323-2018-12.tpd" | |||
include "orbit/R20190602212107-2019-06.tpd" | |||
location "http://download.eclipse.org/releases/neon/" { | |||
org.eclipse.osgi lazy |
@@ -1,7 +1,7 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<?pde?> | |||
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> | |||
<target name="jgit-4.7" sequenceNumber="1544018548"> | |||
<target name="jgit-4.7" sequenceNumber="1566229348"> | |||
<locations> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.eclipse.jetty.client" version="9.4.11.v20180605"/> | |||
@@ -23,18 +23,18 @@ | |||
<repository id="jetty-9.4.11" location="http://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.11.v20180605"/> | |||
</location> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.apache.ant" version="1.10.5.v20180808-0324"/> | |||
<unit id="org.apache.ant.source" version="1.10.5.v20180808-0324"/> | |||
<unit id="org.apache.ant" version="1.10.5.v20190526-1402"/> | |||
<unit id="org.apache.ant.source" version="1.10.5.v20190526-1402"/> | |||
<unit id="org.apache.commons.codec" version="1.10.0.v20180409-1845"/> | |||
<unit id="org.apache.commons.codec.source" version="1.10.0.v20180409-1845"/> | |||
<unit id="org.apache.commons.compress" version="1.18.0.v20181121-2221"/> | |||
<unit id="org.apache.commons.compress.source" version="1.18.0.v20181121-2221"/> | |||
<unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/> | |||
<unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/> | |||
<unit id="org.apache.httpcomponents.httpclient" version="4.5.5.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpclient.source" version="4.5.5.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpcore" version="4.4.9.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpcore.source" version="4.4.9.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpclient" version="4.5.6.v20190503-0009"/> | |||
<unit id="org.apache.httpcomponents.httpclient.source" version="4.5.6.v20190503-0009"/> | |||
<unit id="org.apache.httpcomponents.httpcore" version="4.4.10.v20190123-2214"/> | |||
<unit id="org.apache.httpcomponents.httpcore.source" version="4.4.10.v20190123-2214"/> | |||
<unit id="org.apache.log4j" version="1.2.15.v201012070815"/> | |||
<unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/> | |||
<unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/> | |||
@@ -48,16 +48,16 @@ | |||
<unit id="javaewah.source" version="1.1.6.v20160919-1400"/> | |||
<unit id="org.objenesis" version="2.6.0.v20180420-1519"/> | |||
<unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/> | |||
<unit id="org.mockito" version="2.13.0.v20180426-1843"/> | |||
<unit id="org.mockito.source" version="2.13.0.v20180426-1843"/> | |||
<unit id="net.bytebuddy.byte-buddy" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy.source" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.7.9.v20180420-1519"/> | |||
<unit id="org.mockito" version="2.23.0.v20190527-1420"/> | |||
<unit id="org.mockito.source" version="2.23.0.v20190527-1420"/> | |||
<unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/> | |||
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/> | |||
<unit id="com.google.gson" version="2.8.2.v20180104-1110"/> | |||
<unit id="com.google.gson.source" version="2.8.2.v20180104-1110"/> | |||
<unit id="com.jcraft.jsch" version="0.1.54.v20170116-1932"/> | |||
<unit id="com.jcraft.jsch.source" version="0.1.54.v20170116-1932"/> | |||
<unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> | |||
<unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> | |||
<unit id="org.junit" version="4.12.0.v201504281640"/> | |||
<unit id="org.junit.source" version="4.12.0.v201504281640"/> | |||
<unit id="javax.servlet" version="3.1.0.v201410161800"/> | |||
@@ -76,7 +76,7 @@ | |||
<unit id="org.apache.sshd.core.source" version="2.0.0.v20181102-1323"/> | |||
<unit id="org.apache.sshd.sftp" version="2.0.0.v20181102-1323"/> | |||
<unit id="org.apache.sshd.sftp.source" version="2.0.0.v20181102-1323"/> | |||
<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20181128170323/repository"/> | |||
<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20190602212107/repository"/> | |||
</location> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.eclipse.osgi" version="0.0.0"/> |
@@ -1,7 +1,7 @@ | |||
target "jgit-4.7" with source configurePhase | |||
include "projects/jetty-9.4.11.tpd" | |||
include "orbit/R20181128170323-2018-12.tpd" | |||
include "orbit/R20190602212107-2019-06.tpd" | |||
location "http://download.eclipse.org/releases/oxygen/" { | |||
org.eclipse.osgi lazy |
@@ -1,7 +1,7 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<?pde?> | |||
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> | |||
<target name="jgit-4.8" sequenceNumber="1544018536"> | |||
<target name="jgit-4.8" sequenceNumber="1566229344"> | |||
<locations> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.eclipse.jetty.client" version="9.4.11.v20180605"/> | |||
@@ -23,18 +23,18 @@ | |||
<repository id="jetty-9.4.11" location="http://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.11.v20180605"/> | |||
</location> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.apache.ant" version="1.10.5.v20180808-0324"/> | |||
<unit id="org.apache.ant.source" version="1.10.5.v20180808-0324"/> | |||
<unit id="org.apache.ant" version="1.10.5.v20190526-1402"/> | |||
<unit id="org.apache.ant.source" version="1.10.5.v20190526-1402"/> | |||
<unit id="org.apache.commons.codec" version="1.10.0.v20180409-1845"/> | |||
<unit id="org.apache.commons.codec.source" version="1.10.0.v20180409-1845"/> | |||
<unit id="org.apache.commons.compress" version="1.18.0.v20181121-2221"/> | |||
<unit id="org.apache.commons.compress.source" version="1.18.0.v20181121-2221"/> | |||
<unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/> | |||
<unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/> | |||
<unit id="org.apache.httpcomponents.httpclient" version="4.5.5.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpclient.source" version="4.5.5.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpcore" version="4.4.9.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpcore.source" version="4.4.9.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpclient" version="4.5.6.v20190503-0009"/> | |||
<unit id="org.apache.httpcomponents.httpclient.source" version="4.5.6.v20190503-0009"/> | |||
<unit id="org.apache.httpcomponents.httpcore" version="4.4.10.v20190123-2214"/> | |||
<unit id="org.apache.httpcomponents.httpcore.source" version="4.4.10.v20190123-2214"/> | |||
<unit id="org.apache.log4j" version="1.2.15.v201012070815"/> | |||
<unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/> | |||
<unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/> | |||
@@ -48,16 +48,16 @@ | |||
<unit id="javaewah.source" version="1.1.6.v20160919-1400"/> | |||
<unit id="org.objenesis" version="2.6.0.v20180420-1519"/> | |||
<unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/> | |||
<unit id="org.mockito" version="2.13.0.v20180426-1843"/> | |||
<unit id="org.mockito.source" version="2.13.0.v20180426-1843"/> | |||
<unit id="net.bytebuddy.byte-buddy" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy.source" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.7.9.v20180420-1519"/> | |||
<unit id="org.mockito" version="2.23.0.v20190527-1420"/> | |||
<unit id="org.mockito.source" version="2.23.0.v20190527-1420"/> | |||
<unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/> | |||
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/> | |||
<unit id="com.google.gson" version="2.8.2.v20180104-1110"/> | |||
<unit id="com.google.gson.source" version="2.8.2.v20180104-1110"/> | |||
<unit id="com.jcraft.jsch" version="0.1.54.v20170116-1932"/> | |||
<unit id="com.jcraft.jsch.source" version="0.1.54.v20170116-1932"/> | |||
<unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> | |||
<unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> | |||
<unit id="org.junit" version="4.12.0.v201504281640"/> | |||
<unit id="org.junit.source" version="4.12.0.v201504281640"/> | |||
<unit id="javax.servlet" version="3.1.0.v201410161800"/> | |||
@@ -76,7 +76,7 @@ | |||
<unit id="org.apache.sshd.core.source" version="2.0.0.v20181102-1323"/> | |||
<unit id="org.apache.sshd.sftp" version="2.0.0.v20181102-1323"/> | |||
<unit id="org.apache.sshd.sftp.source" version="2.0.0.v20181102-1323"/> | |||
<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20181128170323/repository"/> | |||
<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20190602212107/repository"/> | |||
</location> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.eclipse.osgi" version="0.0.0"/> |
@@ -1,7 +1,7 @@ | |||
target "jgit-4.8" with source configurePhase | |||
include "projects/jetty-9.4.11.tpd" | |||
include "orbit/R20181128170323-2018-12.tpd" | |||
include "orbit/R20190602212107-2019-06.tpd" | |||
location "http://download.eclipse.org/releases/photon/" { | |||
org.eclipse.osgi lazy |
@@ -1,7 +1,7 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<?pde?> | |||
<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> | |||
<target name="jgit-4.9" sequenceNumber="1544017335"> | |||
<target name="jgit-4.9" sequenceNumber="1566229339"> | |||
<locations> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.eclipse.jetty.client" version="9.4.11.v20180605"/> | |||
@@ -23,18 +23,18 @@ | |||
<repository id="jetty-9.4.11" location="http://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.11.v20180605"/> | |||
</location> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.apache.ant" version="1.10.5.v20180808-0324"/> | |||
<unit id="org.apache.ant.source" version="1.10.5.v20180808-0324"/> | |||
<unit id="org.apache.ant" version="1.10.5.v20190526-1402"/> | |||
<unit id="org.apache.ant.source" version="1.10.5.v20190526-1402"/> | |||
<unit id="org.apache.commons.codec" version="1.10.0.v20180409-1845"/> | |||
<unit id="org.apache.commons.codec.source" version="1.10.0.v20180409-1845"/> | |||
<unit id="org.apache.commons.compress" version="1.18.0.v20181121-2221"/> | |||
<unit id="org.apache.commons.compress.source" version="1.18.0.v20181121-2221"/> | |||
<unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/> | |||
<unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/> | |||
<unit id="org.apache.httpcomponents.httpclient" version="4.5.5.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpclient.source" version="4.5.5.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpcore" version="4.4.9.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpcore.source" version="4.4.9.v20180409-1525"/> | |||
<unit id="org.apache.httpcomponents.httpclient" version="4.5.6.v20190503-0009"/> | |||
<unit id="org.apache.httpcomponents.httpclient.source" version="4.5.6.v20190503-0009"/> | |||
<unit id="org.apache.httpcomponents.httpcore" version="4.4.10.v20190123-2214"/> | |||
<unit id="org.apache.httpcomponents.httpcore.source" version="4.4.10.v20190123-2214"/> | |||
<unit id="org.apache.log4j" version="1.2.15.v201012070815"/> | |||
<unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/> | |||
<unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/> | |||
@@ -48,16 +48,16 @@ | |||
<unit id="javaewah.source" version="1.1.6.v20160919-1400"/> | |||
<unit id="org.objenesis" version="2.6.0.v20180420-1519"/> | |||
<unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/> | |||
<unit id="org.mockito" version="2.13.0.v20180426-1843"/> | |||
<unit id="org.mockito.source" version="2.13.0.v20180426-1843"/> | |||
<unit id="net.bytebuddy.byte-buddy" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy.source" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.7.9.v20180420-1519"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.7.9.v20180420-1519"/> | |||
<unit id="org.mockito" version="2.23.0.v20190527-1420"/> | |||
<unit id="org.mockito.source" version="2.23.0.v20190527-1420"/> | |||
<unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/> | |||
<unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/> | |||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/> | |||
<unit id="com.google.gson" version="2.8.2.v20180104-1110"/> | |||
<unit id="com.google.gson.source" version="2.8.2.v20180104-1110"/> | |||
<unit id="com.jcraft.jsch" version="0.1.54.v20170116-1932"/> | |||
<unit id="com.jcraft.jsch.source" version="0.1.54.v20170116-1932"/> | |||
<unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/> | |||
<unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/> | |||
<unit id="org.junit" version="4.12.0.v201504281640"/> | |||
<unit id="org.junit.source" version="4.12.0.v201504281640"/> | |||
<unit id="javax.servlet" version="3.1.0.v201410161800"/> | |||
@@ -76,7 +76,7 @@ | |||
<unit id="org.apache.sshd.core.source" version="2.0.0.v20181102-1323"/> | |||
<unit id="org.apache.sshd.sftp" version="2.0.0.v20181102-1323"/> | |||
<unit id="org.apache.sshd.sftp.source" version="2.0.0.v20181102-1323"/> | |||
<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20181128170323/repository"/> | |||
<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20190602212107/repository"/> | |||
</location> | |||
<location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> | |||
<unit id="org.eclipse.osgi" version="0.0.0"/> |
@@ -1,7 +1,7 @@ | |||
target "jgit-4.9" with source configurePhase | |||
include "projects/jetty-9.4.11.tpd" | |||
include "orbit/R20181128170323-2018-12.tpd" | |||
include "orbit/R20190602212107-2019-06.tpd" | |||
location "http://download.eclipse.org/releases/2018-09/" { | |||
org.eclipse.osgi lazy |
@@ -0,0 +1,58 @@ | |||
target "R20190602212107-2019-06" with source configurePhase | |||
// see http://download.eclipse.org/tools/orbit/downloads/ | |||
location "http://download.eclipse.org/tools/orbit/downloads/drops/R20190602212107/repository" { | |||
org.apache.ant [1.10.5.v20190526-1402,1.10.5.v20190526-1402] | |||
org.apache.ant.source [1.10.5.v20190526-1402,1.10.5.v20190526-1402] | |||
org.apache.commons.codec [1.10.0.v20180409-1845,1.10.0.v20180409-1845] | |||
org.apache.commons.codec.source [1.10.0.v20180409-1845,1.10.0.v20180409-1845] | |||
org.apache.commons.compress [1.18.0.v20181121-2221,1.18.0.v20181121-2221] | |||
org.apache.commons.compress.source [1.18.0.v20181121-2221,1.18.0.v20181121-2221] | |||
org.apache.commons.logging [1.2.0.v20180409-1502,1.2.0.v20180409-1502] | |||
org.apache.commons.logging.source [1.2.0.v20180409-1502,1.2.0.v20180409-1502] | |||
org.apache.httpcomponents.httpclient [4.5.6.v20190503-0009,4.5.6.v20190503-0009] | |||
org.apache.httpcomponents.httpclient.source [4.5.6.v20190503-0009,4.5.6.v20190503-0009] | |||
org.apache.httpcomponents.httpcore [4.4.10.v20190123-2214,4.4.10.v20190123-2214] | |||
org.apache.httpcomponents.httpcore.source [4.4.10.v20190123-2214,4.4.10.v20190123-2214] | |||
org.apache.log4j [1.2.15.v201012070815,1.2.15.v201012070815] | |||
org.apache.log4j.source [1.2.15.v201012070815,1.2.15.v201012070815] | |||
org.kohsuke.args4j [2.33.0.v20160323-2218,2.33.0.v20160323-2218] | |||
org.kohsuke.args4j.source [2.33.0.v20160323-2218,2.33.0.v20160323-2218] | |||
org.hamcrest [1.1.0.v20090501071000,1.1.0.v20090501071000] | |||
org.hamcrest.core [1.3.0.v20180420-1519,1.3.0.v20180420-1519] | |||
org.hamcrest.core.source [1.3.0.v20180420-1519,1.3.0.v20180420-1519] | |||
org.hamcrest.library [1.3.0.v20180524-2246,1.3.0.v20180524-2246] | |||
org.hamcrest.library.source [1.3.0.v20180524-2246,1.3.0.v20180524-2246] | |||
javaewah [1.1.6.v20160919-1400,1.1.6.v20160919-1400] | |||
javaewah.source [1.1.6.v20160919-1400,1.1.6.v20160919-1400] | |||
org.objenesis [2.6.0.v20180420-1519,2.6.0.v20180420-1519] | |||
org.objenesis.source [2.6.0.v20180420-1519,2.6.0.v20180420-1519] | |||
org.mockito [2.23.0.v20190527-1420,2.23.0.v20190527-1420] | |||
org.mockito.source [2.23.0.v20190527-1420,2.23.0.v20190527-1420] | |||
net.bytebuddy.byte-buddy [1.9.0.v20181107-1410,1.9.0.v20181107-1410] | |||
net.bytebuddy.byte-buddy.source [1.9.0.v20181107-1410,1.9.0.v20181107-1410] | |||
net.bytebuddy.byte-buddy-agent [1.9.0.v20181106-1534,1.9.0.v20181106-1534] | |||
net.bytebuddy.byte-buddy-agent.source [1.9.0.v20181106-1534,1.9.0.v20181106-1534] | |||
com.google.gson [2.8.2.v20180104-1110,2.8.2.v20180104-1110] | |||
com.google.gson.source [2.8.2.v20180104-1110,2.8.2.v20180104-1110] | |||
com.jcraft.jsch [0.1.55.v20190404-1902,0.1.55.v20190404-1902] | |||
com.jcraft.jsch.source [0.1.55.v20190404-1902,0.1.55.v20190404-1902] | |||
org.junit [4.12.0.v201504281640,4.12.0.v201504281640] | |||
org.junit.source [4.12.0.v201504281640,4.12.0.v201504281640] | |||
javax.servlet [3.1.0.v201410161800,3.1.0.v201410161800] | |||
javax.servlet.source [3.1.0.v201410161800,3.1.0.v201410161800] | |||
org.tukaani.xz [1.6.0.v20170629-1752,1.6.0.v20170629-1752] | |||
org.tukaani.xz.source [1.6.0.v20170629-1752,1.6.0.v20170629-1752] | |||
org.slf4j.api [1.7.2.v20121108-1250,1.7.2.v20121108-1250] | |||
org.slf4j.api.source [1.7.2.v20121108-1250,1.7.2.v20121108-1250] | |||
org.slf4j.impl.log4j12 [1.7.2.v20131105-2200,1.7.2.v20131105-2200] | |||
org.slf4j.impl.log4j12.source [1.7.2.v20131105-2200,1.7.2.v20131105-2200] | |||
com.jcraft.jzlib [1.1.1.v201205102305,1.1.1.v201205102305] | |||
com.jcraft.jzlib.source [1.1.1.v201205102305,1.1.1.v201205102305] | |||
net.i2p.crypto.eddsa [0.3.0.v20181102-1323,0.3.0.v20181102-1323] | |||
net.i2p.crypto.eddsa.source [0.3.0.v20181102-1323,0.3.0.v20181102-1323] | |||
org.apache.sshd.core [2.0.0.v20181102-1323,2.0.0.v20181102-1323] | |||
org.apache.sshd.core.source [2.0.0.v20181102-1323,2.0.0.v20181102-1323] | |||
org.apache.sshd.sftp [2.0.0.v20181102-1323,2.0.0.v20181102-1323] | |||
org.apache.sshd.sftp.source [2.0.0.v20181102-1323,2.0.0.v20181102-1323] | |||
} |
@@ -43,14 +43,14 @@ | |||
package org.eclipse.jgit.pgm; | |||
import static org.junit.Assert.assertEquals; | |||
import static org.junit.Assert.assertTrue; | |||
import java.util.ArrayList; | |||
import java.util.Arrays; | |||
import java.util.List; | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
import org.eclipse.jgit.api.Git; | |||
import org.eclipse.jgit.lib.CLIRepositoryTestCase; | |||
import org.eclipse.jgit.util.FS; | |||
import org.eclipse.jgit.util.SystemReader; | |||
import org.junit.Before; | |||
import org.junit.Test; | |||
@@ -65,6 +65,7 @@ public class ConfigTest extends CLIRepositoryTestCase { | |||
} | |||
} | |||
@SuppressWarnings("boxing") | |||
@Test | |||
public void testListConfig() throws Exception { | |||
boolean isWindows = SystemReader.getInstance().getProperty("os.name") | |||
@@ -73,19 +74,31 @@ public class ConfigTest extends CLIRepositoryTestCase { | |||
.equals("Mac OS X"); | |||
String[] output = execute("git config --list"); | |||
List<String> expect = new ArrayList<>(); | |||
expect.add("gc.autoDetach=false"); | |||
expect.add("core.filemode=" + !isWindows); | |||
expect.add("core.logallrefupdates=true"); | |||
if (isMac) | |||
expect.add("core.precomposeunicode=true"); | |||
expect.add("core.repositoryformatversion=0"); | |||
if (!FS.DETECTED.supportsSymlinks()) | |||
expect.add("core.symlinks=false"); | |||
expect.add(""); // ends with LF (last line empty) | |||
assertEquals("expected default configuration", | |||
Arrays.asList(expect.toArray()).toString(), | |||
Arrays.asList(output).toString()); | |||
Map<String, String> options = parseOptions(output); | |||
assertEquals(!isWindows, Boolean.valueOf(options.get("core.filemode"))); | |||
assertTrue((Boolean.valueOf(options.get("core.logallrefupdates")))); | |||
if (isMac) { | |||
assertTrue( | |||
(Boolean.valueOf(options.get("core.precomposeunicode")))); | |||
} | |||
assertEquals(Integer.valueOf(0), | |||
Integer.valueOf(options.get("core.repositoryformatversion"))); | |||
} | |||
private Map<String, String> parseOptions(String[] output) { | |||
Map<String, String> options = new HashMap<>(); | |||
Arrays.stream(output).forEachOrdered(s -> { | |||
int p = s.indexOf('='); | |||
if (p == -1) { | |||
return; | |||
} | |||
String key = s.substring(0, p); | |||
String value = s.substring(p + 1); | |||
options.put(key, value); | |||
}); | |||
return options; | |||
} | |||
} |
@@ -49,6 +49,7 @@ java_library( | |||
deps = [ | |||
"//lib:jsch", | |||
"//lib:junit", | |||
"//lib:slf4j-simple", | |||
"//lib:mockito", | |||
"//org.eclipse.jgit:jgit", | |||
"//org.eclipse.jgit.junit:junit", |
@@ -10,7 +10,7 @@ Bundle-ActivationPolicy: lazy | |||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8 | |||
Import-Package: com.googlecode.javaewah;version="[1.1.6,2.0.0)", | |||
com.jcraft.jsch;version="[0.1.54,0.2.0)", | |||
net.bytebuddy.dynamic.loading;version="[1.7.0,2.0.0)", | |||
net.bytebuddy.dynamic.loading;version="[1.9.0,2.0.0)", | |||
org.apache.commons.compress.archivers;version="[1.15.0,2.0)", | |||
org.apache.commons.compress.archivers.tar;version="[1.15.0,2.0)", | |||
org.apache.commons.compress.archivers.zip;version="[1.15.0,2.0)", | |||
@@ -72,10 +72,10 @@ Import-Package: com.googlecode.javaewah;version="[1.1.6,2.0.0)", | |||
org.junit.rules;version="[4.12,5.0.0)", | |||
org.junit.runner;version="[4.12,5.0.0)", | |||
org.junit.runners;version="[4.12,5.0.0)", | |||
org.mockito;version="[2.13.0,3.0.0)", | |||
org.mockito.invocation;version="[2.13.0,3.0.0)", | |||
org.mockito.junit;version="[2.13.0,3.0.0)", | |||
org.mockito.stubbing;version="[2.13.0,3.0.0)", | |||
org.mockito;version="[2.23.0,3.0.0)", | |||
org.mockito.invocation;version="[2.23.0,3.0.0)", | |||
org.mockito.junit;version="[2.23.0,3.0.0)", | |||
org.mockito.stubbing;version="[2.23.0,3.0.0)", | |||
org.objenesis;version="[2.6.0,3.0.0)", | |||
org.slf4j;version="[1.7.0,2.0.0)", | |||
org.tukaani.xz;version="[1.6.0,2.0)" |
@@ -90,7 +90,7 @@ | |||
<dependency> | |||
<groupId>org.mockito</groupId> | |||
<artifactId>mockito-core</artifactId> | |||
<version>2.13.0</version> | |||
<version>2.23.0</version> | |||
</dependency> | |||
<dependency> |
@@ -7,8 +7,8 @@ log4j.appender.stdout=org.apache.log4j.ConsoleAppender | |||
log4j.appender.stdout.Target=System.out | |||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout | |||
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n | |||
#log4j.appender.fileLogger.bufferedIO = true | |||
#log4j.appender.fileLogger.bufferSize = 4096 | |||
log4j.appender.fileLogger.bufferedIO = true | |||
log4j.appender.fileLogger.bufferSize = 4096 | |||
#log4j.logger.org.eclipse.jgit.util.FS = DEBUG | |||
#log4j.logger.org.eclipse.jgit.internal.storage.file.FileSnapshot = DEBUG |
@@ -0,0 +1,9 @@ | |||
org.slf4j.simpleLogger.logFile = System.err | |||
org.slf4j.simpleLogger.cacheOutputStream = true | |||
org.slf4j.simpleLogger.defaultLogLevel = info | |||
org.slf4j.simpleLogger.showDateTime = true | |||
org.slf4j.simpleLogger.dateTimeFormat = HH:mm:ss.SSSXXX | |||
org.slf4j.simpleLogger.showThreadName = true | |||
#org.slf4j.simpleLogger.log.org.eclipse.jgit.util.FS = debug | |||
#org.slf4j.simpleLogger.log.org.eclipse.jgit.internal.storage.file.FileSnapshot = debug |
@@ -68,9 +68,9 @@ import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
import org.eclipse.jgit.lib.Ref; | |||
import org.eclipse.jgit.lib.Repository; | |||
import org.eclipse.jgit.lib.StoredConfig; | |||
import org.eclipse.jgit.revwalk.RevBlob; | |||
import org.eclipse.jgit.revwalk.RevCommit; | |||
import org.eclipse.jgit.storage.file.FileBasedConfig; | |||
import org.eclipse.jgit.submodule.SubmoduleStatus; | |||
import org.eclipse.jgit.submodule.SubmoduleStatusType; | |||
import org.eclipse.jgit.submodule.SubmoduleWalk; | |||
@@ -654,8 +654,8 @@ public class CloneCommandTest extends RepositoryTestCase { | |||
ConfigConstants.CONFIG_BRANCH_SECTION, "test", | |||
ConfigConstants.CONFIG_KEY_REBASE, null)); | |||
FileBasedConfig userConfig = SystemReader.getInstance().openUserConfig( | |||
null, git.getRepository().getFS()); | |||
StoredConfig userConfig = SystemReader.getInstance() | |||
.getUserConfig(); | |||
userConfig.setString(ConfigConstants.CONFIG_BRANCH_SECTION, null, | |||
ConfigConstants.CONFIG_KEY_AUTOSETUPREBASE, | |||
ConfigConstants.CONFIG_KEY_ALWAYS); |
@@ -1295,9 +1295,15 @@ public class CommitOnlyTest extends RepositoryTestCase { | |||
try { | |||
final Repository repo = git.getRepository(); | |||
final ObjectId headId = repo.resolve(Constants.HEAD + "^{commit}"); | |||
if (headId == null) { | |||
return ""; | |||
} | |||
try (RevWalk rw = new RevWalk(repo)) { | |||
final TreeWalk tw = TreeWalk.forPath(repo, path, | |||
rw.parseTree(headId)); | |||
if (tw == null) { | |||
return ""; | |||
} | |||
return new String(tw.getObjectReader().open(tw.getObjectId(0)) | |||
.getBytes(), UTF_8); | |||
} |
@@ -62,6 +62,7 @@ import java.time.Instant; | |||
import java.util.ArrayList; | |||
import java.util.concurrent.TimeUnit; | |||
import org.eclipse.jgit.junit.MockSystemReader; | |||
import org.eclipse.jgit.util.FS; | |||
import org.eclipse.jgit.util.FS.FileStoreAttributes; | |||
import org.eclipse.jgit.util.FileUtils; | |||
@@ -84,6 +85,7 @@ public class FileSnapshotTest { | |||
@Before | |||
public void setUp() throws Exception { | |||
SystemReader.setInstance(new MockSystemReader()); | |||
trash = Files.createTempDirectory("tmp_"); | |||
// measure timer resolution before the test to avoid time critical tests | |||
// are affected by time needed for measurement |
@@ -80,6 +80,7 @@ public class LocalDiskRefTreeDatabaseTest extends LocalDiskRepositoryTestCase { | |||
@Override | |||
@Before | |||
public void setUp() throws Exception { | |||
super.setUp(); | |||
FileRepository init = createWorkRepository(); | |||
FileBasedConfig cfg = init.getConfig(); | |||
cfg.setInt("core", null, "repositoryformatversion", 1); |
@@ -56,9 +56,11 @@ import java.nio.file.StandardOpenOption; | |||
import java.util.StringTokenizer; | |||
import org.eclipse.jgit.errors.ConfigInvalidException; | |||
import org.eclipse.jgit.junit.MockSystemReader; | |||
import org.eclipse.jgit.util.FS; | |||
import org.eclipse.jgit.util.FileUtils; | |||
import org.eclipse.jgit.util.IO; | |||
import org.eclipse.jgit.util.SystemReader; | |||
import org.junit.After; | |||
import org.junit.Before; | |||
import org.junit.Test; | |||
@@ -90,6 +92,7 @@ public class FileBasedConfigTest { | |||
@Before | |||
public void setUp() throws Exception { | |||
SystemReader.setInstance(new MockSystemReader()); | |||
trash = Files.createTempDirectory("tmp_"); | |||
FS.getFileStoreAttributes(trash.getParent()); | |||
} |
@@ -65,6 +65,7 @@ import java.util.Set; | |||
import java.util.concurrent.TimeUnit; | |||
import org.eclipse.jgit.errors.CommandFailedException; | |||
import org.eclipse.jgit.junit.MockSystemReader; | |||
import org.eclipse.jgit.junit.RepositoryTestCase; | |||
import org.eclipse.jgit.lib.RepositoryCache; | |||
import org.junit.After; | |||
@@ -77,6 +78,7 @@ public class FSTest { | |||
@Before | |||
public void setUp() throws Exception { | |||
SystemReader.setInstance(new MockSystemReader()); | |||
trash = File.createTempFile("tmp_", ""); | |||
trash.delete(); | |||
assertTrue("mkdir " + trash, trash.mkdir()); |
@@ -0,0 +1,139 @@ | |||
/* | |||
* Copyright (C) 2019, Vishal Devgire <vishaldevgire@gmail.com> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.util; | |||
import static org.junit.Assert.assertFalse; | |||
import static org.junit.Assert.assertTrue; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import java.nio.file.Files; | |||
import java.nio.file.Path; | |||
import org.eclipse.jgit.junit.MockSystemReader; | |||
import org.eclipse.jgit.lib.ConfigConstants; | |||
import org.eclipse.jgit.storage.file.FileBasedConfig; | |||
import org.junit.After; | |||
import org.junit.Before; | |||
import org.junit.Test; | |||
public class FS_POSIXTest { | |||
private SystemReader originalSystemReaderInstance; | |||
private FileBasedConfig systemConfig; | |||
private FileBasedConfig userConfig; | |||
private Path tmp; | |||
@Before | |||
public void setUp() throws Exception { | |||
tmp = Files.createTempDirectory("jgit_test_"); | |||
MockSystemReader mockSystemReader = new MockSystemReader(); | |||
SystemReader.setInstance(mockSystemReader); | |||
// Measure timer resolution before the test to avoid time critical tests | |||
// are affected by time needed for measurement. | |||
// The MockSystemReader must be configured first since we need to use | |||
// the same one here | |||
FS.getFileStoreAttributes(tmp.getParent()); | |||
systemConfig = new FileBasedConfig( | |||
new File(tmp.toFile(), "systemgitconfig"), FS.DETECTED); | |||
userConfig = new FileBasedConfig(systemConfig, | |||
new File(tmp.toFile(), "usergitconfig"), FS.DETECTED); | |||
// We have to set autoDetach to false for tests, because tests expect to | |||
// be able to clean up by recursively removing the repository, and | |||
// background GC might be in the middle of writing or deleting files, | |||
// which would disrupt this. | |||
userConfig.setBoolean(ConfigConstants.CONFIG_GC_SECTION, null, | |||
ConfigConstants.CONFIG_KEY_AUTODETACH, false); | |||
userConfig.save(); | |||
mockSystemReader.setSystemGitConfig(systemConfig); | |||
mockSystemReader.setUserGitConfig(userConfig); | |||
originalSystemReaderInstance = SystemReader.getInstance(); | |||
SystemReader.setInstance(mockSystemReader); | |||
} | |||
@After | |||
public void tearDown() throws IOException { | |||
SystemReader.setInstance(originalSystemReaderInstance); | |||
FileUtils.delete(tmp.toFile(), FileUtils.RECURSIVE | FileUtils.RETRY); | |||
} | |||
@Test | |||
public void supportsAtomicCreateNewFile_shouldReturnSupportedAsDefault() { | |||
assertTrue(new FS_POSIX().supportsAtomicCreateNewFile()); | |||
} | |||
@Test | |||
public void supportsAtomicCreateNewFile_shouldReturnTrueIfFlagIsSetInUserConfig() { | |||
setAtomicCreateCreationFlag(userConfig, "true"); | |||
assertTrue(new FS_POSIX().supportsAtomicCreateNewFile()); | |||
} | |||
@Test | |||
public void supportsAtomicCreateNewFile_shouldReturnTrueIfFlagIsSetInSystemConfig() { | |||
setAtomicCreateCreationFlag(systemConfig, "true"); | |||
assertTrue(new FS_POSIX().supportsAtomicCreateNewFile()); | |||
} | |||
@Test | |||
public void supportsAtomicCreateNewFile_shouldReturnFalseIfFlagUnsetInUserConfig() { | |||
setAtomicCreateCreationFlag(userConfig, "false"); | |||
assertFalse(new FS_POSIX().supportsAtomicCreateNewFile()); | |||
} | |||
@Test | |||
public void supportsAtomicCreateNewFile_shouldReturnFalseIfFlagUnsetInSystemConfig() { | |||
setAtomicCreateCreationFlag(systemConfig, "false"); | |||
assertFalse(new FS_POSIX().supportsAtomicCreateNewFile()); | |||
} | |||
private void setAtomicCreateCreationFlag(FileBasedConfig config, | |||
String value) { | |||
config.setString(ConfigConstants.CONFIG_CORE_SECTION, null, | |||
ConfigConstants.CONFIG_KEY_SUPPORTSATOMICFILECREATION, value); | |||
} | |||
} |
@@ -62,14 +62,6 @@ | |||
</message_arguments> | |||
</filter> | |||
</resource> | |||
<resource path="src/org/eclipse/jgit/storage/file/FileBasedConfig.java" type="org.eclipse.jgit.storage.file.FileBasedConfig"> | |||
<filter id="1142947843"> | |||
<message_arguments> | |||
<message_argument value="5.1.9"/> | |||
<message_argument value="load(boolean)"/> | |||
</message_arguments> | |||
</filter> | |||
</resource> | |||
<resource path="src/org/eclipse/jgit/storage/pack/PackConfig.java" type="org.eclipse.jgit.storage.pack.PackConfig"> | |||
<filter id="336658481"> | |||
<message_arguments> | |||
@@ -240,4 +232,30 @@ | |||
</message_arguments> | |||
</filter> | |||
</resource> | |||
<resource path="src/org/eclipse/jgit/util/SystemReader.java" type="org.eclipse.jgit.util.SystemReader"> | |||
<filter id="336695337"> | |||
<message_arguments> | |||
<message_argument value="org.eclipse.jgit.util.SystemReader"/> | |||
<message_argument value="getSystemConfig()"/> | |||
</message_arguments> | |||
</filter> | |||
<filter id="336695337"> | |||
<message_arguments> | |||
<message_argument value="org.eclipse.jgit.util.SystemReader"/> | |||
<message_argument value="getUserConfig()"/> | |||
</message_arguments> | |||
</filter> | |||
<filter id="1142947843"> | |||
<message_arguments> | |||
<message_argument value="5.1.9"/> | |||
<message_argument value="getSystemConfig()"/> | |||
</message_arguments> | |||
</filter> | |||
<filter id="1142947843"> | |||
<message_arguments> | |||
<message_argument value="5.1.9"/> | |||
<message_argument value="getUserConfig()"/> | |||
</message_arguments> | |||
</filter> | |||
</resource> | |||
</component> |
@@ -17,6 +17,7 @@ applyingCommit=Applying {0} | |||
archiveFormatAlreadyAbsent=Archive format already absent: {0} | |||
archiveFormatAlreadyRegistered=Archive format already registered with different implementation: {0} | |||
argumentIsNotAValidCommentString=Invalid comment: {0} | |||
assumeAtomicCreateNewFile=Reading option "core.supportsAtomicFileCreation" failed, fallback to default assuming atomic file creation is supported | |||
atLeastOnePathIsRequired=At least one path is required. | |||
atLeastOnePatternIsRequired=At least one pattern is required. | |||
atLeastTwoFiltersNeeded=At least two filters needed. | |||
@@ -302,7 +303,8 @@ expectedLessThanGot=expected less than ''{0}'', got ''{1}'' | |||
expectedPktLineWithService=expected pkt-line with ''# service=-'', got ''{0}'' | |||
expectedReceivedContentType=expected Content-Type {0}; received Content-Type {1} | |||
expectedReportForRefNotReceived={0}: expected report for ref {1} not received | |||
failedAtomicFileCreation=Atomic file creation failed, number of hard links to file {0} was not 2 but {1}" | |||
failedAtomicFileCreation=Atomic file creation failed, number of hard links to file {0} was not 2 but {1} | |||
failedCreateLockFile=Creating lock file {} failed | |||
failedToDetermineFilterDefinition=An exception occurred while determining filter definitions | |||
failedUpdatingRefs=failed updating refs | |||
failureDueToOneOfTheFollowing=Failure due to one of the following: | |||
@@ -429,6 +431,7 @@ localRefIsMissingObjects=Local ref {0} is missing object(s). | |||
localRepository=local repository | |||
lockCountMustBeGreaterOrEqual1=lockCount must be >= 1 | |||
lockError=lock error: {0} | |||
lockFailedRetry=locking {0} failed after {1} retries | |||
lockOnNotClosed=Lock on {0} not closed. | |||
lockOnNotHeld=Lock on {0} not held. | |||
malformedpersonIdentString=Malformed PersonIdent string (no < was found): {0} | |||
@@ -561,6 +564,7 @@ pushNotPermitted=push not permitted | |||
pushOptionsNotSupported=Push options not supported; received {0} | |||
rawLogMessageDoesNotParseAsLogEntry=Raw log message does not parse as log entry | |||
readConfigFailed=Reading config file ''{0}'' failed | |||
readFileStoreAttributesFailed=Reading FileStore attributes from user config failed | |||
readerIsRequired=Reader is required | |||
readingObjectsFromLocalRepositoryFailed=reading objects from local repository failed: {0} | |||
readLastModifiedFailed=Reading lastModified of {0} failed | |||
@@ -617,6 +621,7 @@ rewinding=Rewinding to commit {0} | |||
s3ActionDeletion=Deletion | |||
s3ActionReading=Reading | |||
s3ActionWriting=Writing | |||
saveFileStoreAttributesFailed=Saving measured FileStore attributes to user config failed | |||
searchForReuse=Finding sources | |||
searchForSizes=Getting sizes | |||
secondsAgo={0} seconds ago | |||
@@ -775,7 +780,7 @@ uriNotConfigured=Submodule URI not configured | |||
uriNotFound={0} not found | |||
uriNotFoundWithMessage={0} not found: {1} | |||
URINotSupported=URI not supported: {0} | |||
userConfigFileInvalid=User config file {0} invalid {1} | |||
userConfigInvalid=Git config in the user's home directory {0} is invalid {1} | |||
validatingGitModules=Validating .gitmodules files | |||
walkFailure=Walk failure. | |||
wantNoSpaceWithCapabilities=No space between oid and first capability in first want line |
@@ -78,6 +78,7 @@ public class JGitText extends TranslationBundle { | |||
/***/ public String archiveFormatAlreadyAbsent; | |||
/***/ public String archiveFormatAlreadyRegistered; | |||
/***/ public String argumentIsNotAValidCommentString; | |||
/***/ public String assumeAtomicCreateNewFile; | |||
/***/ public String atLeastOnePathIsRequired; | |||
/***/ public String atLeastOnePatternIsRequired; | |||
/***/ public String atLeastTwoFiltersNeeded; | |||
@@ -364,6 +365,7 @@ public class JGitText extends TranslationBundle { | |||
/***/ public String expectedReceivedContentType; | |||
/***/ public String expectedReportForRefNotReceived; | |||
/***/ public String failedAtomicFileCreation; | |||
/***/ public String failedCreateLockFile; | |||
/***/ public String failedToDetermineFilterDefinition; | |||
/***/ public String failedUpdatingRefs; | |||
/***/ public String failureDueToOneOfTheFollowing; | |||
@@ -490,6 +492,7 @@ public class JGitText extends TranslationBundle { | |||
/***/ public String localRepository; | |||
/***/ public String lockCountMustBeGreaterOrEqual1; | |||
/***/ public String lockError; | |||
/***/ public String lockFailedRetry; | |||
/***/ public String lockOnNotClosed; | |||
/***/ public String lockOnNotHeld; | |||
/***/ public String malformedpersonIdentString; | |||
@@ -622,6 +625,7 @@ public class JGitText extends TranslationBundle { | |||
/***/ public String pushOptionsNotSupported; | |||
/***/ public String rawLogMessageDoesNotParseAsLogEntry; | |||
/***/ public String readConfigFailed; | |||
/***/ public String readFileStoreAttributesFailed; | |||
/***/ public String readerIsRequired; | |||
/***/ public String readingObjectsFromLocalRepositoryFailed; | |||
/***/ public String readLastModifiedFailed; | |||
@@ -678,6 +682,7 @@ public class JGitText extends TranslationBundle { | |||
/***/ public String s3ActionDeletion; | |||
/***/ public String s3ActionReading; | |||
/***/ public String s3ActionWriting; | |||
/***/ public String saveFileStoreAttributesFailed; | |||
/***/ public String searchForReuse; | |||
/***/ public String searchForSizes; | |||
/***/ public String secondsAgo; | |||
@@ -835,7 +840,7 @@ public class JGitText extends TranslationBundle { | |||
/***/ public String uriNotFound; | |||
/***/ public String uriNotFoundWithMessage; | |||
/***/ public String URINotSupported; | |||
/***/ public String userConfigFileInvalid; | |||
/***/ public String userConfigInvalid; | |||
/***/ public String validatingGitModules; | |||
/***/ public String walkFailure; | |||
/***/ public String wantNoSpaceWithCapabilities; |
@@ -81,15 +81,17 @@ import org.eclipse.jgit.lib.RefDatabase; | |||
import org.eclipse.jgit.lib.RefUpdate; | |||
import org.eclipse.jgit.lib.ReflogReader; | |||
import org.eclipse.jgit.lib.Repository; | |||
import org.eclipse.jgit.lib.StoredConfig; | |||
import org.eclipse.jgit.storage.file.FileBasedConfig; | |||
import org.eclipse.jgit.storage.file.FileRepositoryBuilder; | |||
import org.eclipse.jgit.storage.pack.PackConfig; | |||
import org.eclipse.jgit.util.FS; | |||
import org.eclipse.jgit.util.FileUtils; | |||
import org.eclipse.jgit.util.IO; | |||
import org.eclipse.jgit.util.RawParseUtils; | |||
import org.eclipse.jgit.util.StringUtils; | |||
import org.eclipse.jgit.util.SystemReader; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
/** | |||
* Represents a Git repository. A repository holds all objects and refs used for | |||
@@ -116,10 +118,10 @@ import org.eclipse.jgit.util.SystemReader; | |||
* This implementation only handles a subtly undocumented subset of git features. | |||
*/ | |||
public class FileRepository extends Repository { | |||
private static final Logger LOG = LoggerFactory | |||
.getLogger(FileRepository.class); | |||
private static final String UNNAMED = "Unnamed repository; edit this file to name it for gitweb."; //$NON-NLS-1$ | |||
private final FileBasedConfig systemConfig; | |||
private final FileBasedConfig userConfig; | |||
private final FileBasedConfig repoConfig; | |||
private final RefDatabase refs; | |||
private final ObjectDirectory objectDatabase; | |||
@@ -178,32 +180,16 @@ public class FileRepository extends Repository { | |||
*/ | |||
public FileRepository(BaseRepositoryBuilder options) throws IOException { | |||
super(options); | |||
if (StringUtils.isEmptyOrNull(SystemReader.getInstance().getenv( | |||
Constants.GIT_CONFIG_NOSYSTEM_KEY))) | |||
systemConfig = SystemReader.getInstance().openSystemConfig(null, | |||
getFS()); | |||
else | |||
systemConfig = new FileBasedConfig(null, FS.DETECTED) { | |||
@Override | |||
public void load() { | |||
// empty, do not load | |||
} | |||
@Override | |||
public boolean isOutdated() { | |||
// regular class would bomb here | |||
return false; | |||
} | |||
}; | |||
userConfig = SystemReader.getInstance().openUserConfig(systemConfig, | |||
getFS()); | |||
StoredConfig userConfig = null; | |||
try { | |||
userConfig = SystemReader.getInstance().getUserConfig(); | |||
} catch (ConfigInvalidException e) { | |||
LOG.error(e.getMessage(), e); | |||
throw new IOException(e.getMessage(), e); | |||
} | |||
repoConfig = new FileBasedConfig(userConfig, getFS().resolve( | |||
getDirectory(), Constants.CONFIG), | |||
getFS()); | |||
loadSystemConfig(); | |||
loadUserConfig(); | |||
loadRepoConfig(); | |||
repoConfig.addChangeListener(new ConfigChangedListener() { | |||
@@ -247,28 +233,6 @@ public class FileRepository extends Repository { | |||
} | |||
} | |||
private void loadSystemConfig() throws IOException { | |||
try { | |||
systemConfig.load(); | |||
} catch (ConfigInvalidException e) { | |||
throw new IOException(MessageFormat.format(JGitText | |||
.get().systemConfigFileInvalid, systemConfig.getFile() | |||
.getAbsolutePath(), | |||
e), e); | |||
} | |||
} | |||
private void loadUserConfig() throws IOException { | |||
try { | |||
userConfig.load(); | |||
} catch (ConfigInvalidException e) { | |||
throw new IOException(MessageFormat.format(JGitText | |||
.get().userConfigFileInvalid, userConfig.getFile() | |||
.getAbsolutePath(), | |||
e), e); | |||
} | |||
} | |||
private void loadRepoConfig() throws IOException { | |||
try { | |||
repoConfig.load(); | |||
@@ -398,26 +362,13 @@ public class FileRepository extends Repository { | |||
/** {@inheritDoc} */ | |||
@Override | |||
public FileBasedConfig getConfig() { | |||
if (systemConfig.isOutdated()) { | |||
try { | |||
loadSystemConfig(); | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
} | |||
} | |||
if (userConfig.isOutdated()) { | |||
try { | |||
loadUserConfig(); | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
try { | |||
SystemReader.getInstance().getUserConfig(); | |||
if (repoConfig.isOutdated()) { | |||
loadRepoConfig(); | |||
} | |||
} | |||
if (repoConfig.isOutdated()) { | |||
try { | |||
loadRepoConfig(); | |||
} catch (IOException e) { | |||
throw new RuntimeException(e); | |||
} | |||
} catch (IOException | ConfigInvalidException e) { | |||
throw new RuntimeException(e); | |||
} | |||
return repoConfig; | |||
} |
@@ -165,7 +165,12 @@ public class LockFile { | |||
*/ | |||
public boolean lock() throws IOException { | |||
FileUtils.mkdirs(lck.getParentFile(), true); | |||
token = FS.DETECTED.createNewFileAtomic(lck); | |||
try { | |||
token = FS.DETECTED.createNewFileAtomic(lck); | |||
} catch (IOException e) { | |||
LOG.error(JGitText.get().failedCreateLockFile, lck, e); | |||
throw e; | |||
} | |||
if (token.isCreated()) { | |||
haveLck = true; | |||
try { |
@@ -135,6 +135,9 @@ public class ObjectIdOwnerMap<V extends ObjectIdOwnerMap.Entry> | |||
*/ | |||
@SuppressWarnings("unchecked") | |||
public V get(AnyObjectId toFind) { | |||
if (toFind == null) { | |||
return null; | |||
} | |||
int h = toFind.w1; | |||
V obj = directory[h & mask][h >>> SEGMENT_SHIFT]; | |||
for (; obj != null; obj = (V) obj.next) |
@@ -137,11 +137,13 @@ public class RebaseTodoFile { | |||
if (skip != -1) { | |||
// try to parse the line as non-comment | |||
line = parseLine(buf, skip, lineEnd); | |||
// successfully parsed as non-comment line | |||
// mark this line as a comment explicitly | |||
line.setAction(Action.COMMENT); | |||
// use the read line as comment string | |||
line.setComment(commentString); | |||
if (line != null) { | |||
// successfully parsed as non-comment line | |||
// mark this line as a comment explicitly | |||
line.setAction(Action.COMMENT); | |||
// use the read line as comment string | |||
line.setComment(commentString); | |||
} | |||
} | |||
} catch (Exception e) { | |||
// parsing as non-comment line failed |
@@ -148,37 +148,13 @@ public class FileBasedConfig extends StoredConfig { | |||
*/ | |||
@Override | |||
public void load() throws IOException, ConfigInvalidException { | |||
load(true); | |||
} | |||
/** | |||
* Load the configuration as a Git text style configuration file. | |||
* <p> | |||
* If the file does not exist, this configuration is cleared, and thus | |||
* behaves the same as though the file exists, but is empty. | |||
* | |||
* @param useFileSnapshotWithConfig | |||
* if {@code true} use the FileSnapshot with config, otherwise | |||
* use it without config | |||
* @throws IOException | |||
* if IO failed | |||
* @throws ConfigInvalidException | |||
* if config is invalid | |||
* @since 5.1.9 | |||
*/ | |||
public void load(boolean useFileSnapshotWithConfig) | |||
throws IOException, ConfigInvalidException { | |||
final int maxStaleRetries = 5; | |||
int retries = 0; | |||
while (true) { | |||
final FileSnapshot oldSnapshot = snapshot; | |||
final FileSnapshot newSnapshot; | |||
if (useFileSnapshotWithConfig) { | |||
newSnapshot = FileSnapshot.save(getFile()); | |||
} else { | |||
// don't use config in this snapshot to avoid endless recursion | |||
newSnapshot = FileSnapshot.saveNoConfig(getFile()); | |||
} | |||
// don't use config in this snapshot to avoid endless recursion | |||
newSnapshot = FileSnapshot.saveNoConfig(getFile()); | |||
try { | |||
final byte[] in = IO.readFully(getFile()); | |||
final ObjectId newHash = hash(in); |
@@ -53,8 +53,7 @@ import java.util.function.Supplier; | |||
import org.eclipse.jgit.errors.ConfigInvalidException; | |||
import org.eclipse.jgit.internal.JGitText; | |||
import org.eclipse.jgit.lib.Config; | |||
import org.eclipse.jgit.storage.file.FileBasedConfig; | |||
import org.eclipse.jgit.util.FS; | |||
import org.eclipse.jgit.lib.StoredConfig; | |||
import org.eclipse.jgit.util.StringUtils; | |||
import org.eclipse.jgit.util.SystemReader; | |||
import org.slf4j.Logger; | |||
@@ -210,14 +209,12 @@ public class HttpConfig { | |||
* to get the configuration values for | |||
*/ | |||
public HttpConfig(URIish uri) { | |||
FileBasedConfig userConfig = SystemReader.getInstance() | |||
.openUserConfig(null, FS.DETECTED); | |||
StoredConfig userConfig = null; | |||
try { | |||
userConfig.load(); | |||
userConfig = SystemReader.getInstance().getUserConfig(); | |||
} catch (IOException | ConfigInvalidException e) { | |||
// Log it and then work with default values. | |||
LOG.error(MessageFormat.format(JGitText.get().userConfigFileInvalid, | |||
userConfig.getFile().getAbsolutePath(), e)); | |||
LOG.error(e.getMessage(), e); | |||
init(new Config(), uri); | |||
return; | |||
} |
@@ -108,11 +108,9 @@ import org.eclipse.jgit.lib.Ref; | |||
import org.eclipse.jgit.lib.Repository; | |||
import org.eclipse.jgit.lib.StoredConfig; | |||
import org.eclipse.jgit.lib.SymbolicRef; | |||
import org.eclipse.jgit.storage.file.FileBasedConfig; | |||
import org.eclipse.jgit.transport.HttpAuthMethod.Type; | |||
import org.eclipse.jgit.transport.HttpConfig.HttpRedirectMode; | |||
import org.eclipse.jgit.transport.http.HttpConnection; | |||
import org.eclipse.jgit.util.FS; | |||
import org.eclipse.jgit.util.HttpSupport; | |||
import org.eclipse.jgit.util.IO; | |||
import org.eclipse.jgit.util.RawParseUtils; | |||
@@ -715,15 +713,13 @@ public class TransportHttp extends HttpTransport implements WalkTransport, | |||
} | |||
private void updateSslVerifyUser(boolean value) { | |||
FileBasedConfig userConfig = SystemReader.getInstance() | |||
.openUserConfig(null, FS.DETECTED); | |||
StoredConfig userConfig = null; | |||
try { | |||
userConfig.load(); | |||
userConfig = SystemReader.getInstance().getUserConfig(); | |||
updateSslVerify(userConfig, value); | |||
} catch (IOException | ConfigInvalidException e) { | |||
// Log it, but otherwise ignore here. | |||
LOG.error(MessageFormat.format(JGitText.get().userConfigFileInvalid, | |||
userConfig.getFile().getAbsolutePath(), e)); | |||
LOG.error(e.getMessage(), e); | |||
} | |||
} | |||
@@ -100,7 +100,7 @@ import org.eclipse.jgit.internal.storage.file.FileSnapshot; | |||
import org.eclipse.jgit.lib.ConfigConstants; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.Repository; | |||
import org.eclipse.jgit.storage.file.FileBasedConfig; | |||
import org.eclipse.jgit.lib.StoredConfig; | |||
import org.eclipse.jgit.treewalk.FileTreeIterator.FileEntry; | |||
import org.eclipse.jgit.treewalk.FileTreeIterator.FileModeStrategy; | |||
import org.eclipse.jgit.treewalk.WorkingTreeIterator.Entry; | |||
@@ -510,18 +510,12 @@ public abstract class FS { | |||
private static Optional<FileStoreAttributes> readFromConfig( | |||
FileStore s) { | |||
FileBasedConfig userConfig = SystemReader.getInstance() | |||
.openUserConfig(null, FS.DETECTED); | |||
StoredConfig userConfig; | |||
try { | |||
userConfig.load(false); | |||
} catch (IOException e) { | |||
LOG.error(MessageFormat.format(JGitText.get().readConfigFailed, | |||
userConfig.getFile().getAbsolutePath()), e); | |||
} catch (ConfigInvalidException e) { | |||
LOG.error(MessageFormat.format( | |||
JGitText.get().repositoryConfigFileInvalid, | |||
userConfig.getFile().getAbsolutePath(), | |||
e.getMessage())); | |||
userConfig = SystemReader.getInstance().getUserConfig(); | |||
} catch (IOException | ConfigInvalidException e) { | |||
LOG.error(JGitText.get().readFileStoreAttributesFailed, e); | |||
return Optional.empty(); | |||
} | |||
String key = getConfigKey(s); | |||
Duration resolution = Duration.ofNanos(userConfig.getTimeUnit( | |||
@@ -544,8 +538,13 @@ public abstract class FS { | |||
private static void saveToConfig(FileStore s, | |||
FileStoreAttributes c) { | |||
FileBasedConfig userConfig = SystemReader.getInstance() | |||
.openUserConfig(null, FS.DETECTED); | |||
StoredConfig userConfig; | |||
try { | |||
userConfig = SystemReader.getInstance().getUserConfig(); | |||
} catch (IOException | ConfigInvalidException e) { | |||
LOG.error(JGitText.get().saveFileStoreAttributesFailed, e); | |||
return; | |||
} | |||
long resolution = c.getFsTimestampResolution().toNanos(); | |||
TimeUnit resolutionUnit = getUnit(resolution); | |||
long resolutionValue = resolutionUnit.convert(resolution, | |||
@@ -562,7 +561,7 @@ public abstract class FS { | |||
String key = getConfigKey(s); | |||
while (!succeeded && retries < max_retries) { | |||
try { | |||
userConfig.load(false); | |||
userConfig.load(); | |||
userConfig.setString( | |||
ConfigConstants.CONFIG_FILESYSTEM_SECTION, key, | |||
ConfigConstants.CONFIG_KEY_TIMESTAMP_RESOLUTION, | |||
@@ -580,22 +579,30 @@ public abstract class FS { | |||
} catch (LockFailedException e) { | |||
// race with another thread, wait a bit and try again | |||
try { | |||
LOG.warn(MessageFormat.format(JGitText.get().cannotLock, | |||
userConfig.getFile().getAbsolutePath())); | |||
retries++; | |||
Thread.sleep(20); | |||
if (retries < max_retries) { | |||
Thread.sleep(100); | |||
LOG.debug("locking {} failed, retries {}/{}", //$NON-NLS-1$ | |||
userConfig, Integer.valueOf(retries), | |||
Integer.valueOf(max_retries)); | |||
} else { | |||
LOG.warn(MessageFormat.format( | |||
JGitText.get().lockFailedRetry, userConfig, | |||
Integer.valueOf(retries))); | |||
} | |||
} catch (InterruptedException e1) { | |||
Thread.interrupted(); | |||
Thread.currentThread().interrupt(); | |||
break; | |||
} | |||
} catch (IOException e) { | |||
LOG.error(MessageFormat.format( | |||
JGitText.get().cannotSaveConfig, | |||
userConfig.getFile().getAbsolutePath()), e); | |||
JGitText.get().cannotSaveConfig, userConfig), e); | |||
break; | |||
} catch (ConfigInvalidException e) { | |||
LOG.error(MessageFormat.format( | |||
JGitText.get().repositoryConfigFileInvalid, | |||
userConfig.getFile().getAbsolutePath(), | |||
e.getMessage())); | |||
userConfig, e.getMessage())); | |||
break; | |||
} | |||
} | |||
} |
@@ -42,13 +42,18 @@ | |||
*/ | |||
package org.eclipse.jgit.util; | |||
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_CORE_SECTION; | |||
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_SUPPORTSATOMICFILECREATION; | |||
import java.io.BufferedReader; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import java.io.InputStreamReader; | |||
import java.io.PrintStream; | |||
import java.nio.charset.Charset; | |||
import java.nio.file.FileAlreadyExistsException; | |||
import java.nio.file.Files; | |||
import java.nio.file.InvalidPathException; | |||
import java.nio.file.Path; | |||
import java.nio.file.Paths; | |||
import java.nio.file.attribute.PosixFilePermission; | |||
@@ -65,10 +70,9 @@ import org.eclipse.jgit.api.errors.JGitInternalException; | |||
import org.eclipse.jgit.errors.CommandFailedException; | |||
import org.eclipse.jgit.errors.ConfigInvalidException; | |||
import org.eclipse.jgit.internal.JGitText; | |||
import org.eclipse.jgit.lib.ConfigConstants; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.Repository; | |||
import org.eclipse.jgit.storage.file.FileBasedConfig; | |||
import org.eclipse.jgit.lib.StoredConfig; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
@@ -85,7 +89,7 @@ public class FS_POSIX extends FS { | |||
private volatile boolean supportsUnixNLink = true; | |||
private volatile AtomicFileCreation supportsAtomicCreateNewFile = AtomicFileCreation.UNDEFINED; | |||
private volatile AtomicFileCreation supportsAtomicFileCreation = AtomicFileCreation.UNDEFINED; | |||
private enum AtomicFileCreation { | |||
SUPPORTED, NOT_SUPPORTED, UNDEFINED | |||
@@ -110,37 +114,6 @@ public class FS_POSIX extends FS { | |||
} | |||
} | |||
private void determineAtomicFileCreationSupport() { | |||
// @TODO: enhance SystemReader to support this without copying code | |||
AtomicFileCreation ret = getAtomicFileCreationSupportOption( | |||
SystemReader.getInstance().openUserConfig(null, this)); | |||
if (ret == AtomicFileCreation.UNDEFINED | |||
&& StringUtils.isEmptyOrNull(SystemReader.getInstance() | |||
.getenv(Constants.GIT_CONFIG_NOSYSTEM_KEY))) { | |||
ret = getAtomicFileCreationSupportOption( | |||
SystemReader.getInstance().openSystemConfig(null, this)); | |||
} | |||
supportsAtomicCreateNewFile = ret; | |||
} | |||
private AtomicFileCreation getAtomicFileCreationSupportOption( | |||
FileBasedConfig config) { | |||
try { | |||
config.load(); | |||
String value = config.getString(ConfigConstants.CONFIG_CORE_SECTION, | |||
null, | |||
ConfigConstants.CONFIG_KEY_SUPPORTSATOMICFILECREATION); | |||
if (value == null) { | |||
return AtomicFileCreation.UNDEFINED; | |||
} | |||
return StringUtils.toBoolean(value) | |||
? AtomicFileCreation.SUPPORTED | |||
: AtomicFileCreation.NOT_SUPPORTED; | |||
} catch (IOException | ConfigInvalidException e) { | |||
return AtomicFileCreation.SUPPORTED; | |||
} | |||
} | |||
/** {@inheritDoc} */ | |||
@Override | |||
public FS newInstance() { | |||
@@ -355,10 +328,24 @@ public class FS_POSIX extends FS { | |||
/** {@inheritDoc} */ | |||
@Override | |||
public boolean supportsAtomicCreateNewFile() { | |||
if (supportsAtomicCreateNewFile == AtomicFileCreation.UNDEFINED) { | |||
determineAtomicFileCreationSupport(); | |||
if (supportsAtomicFileCreation == AtomicFileCreation.UNDEFINED) { | |||
try { | |||
StoredConfig config = SystemReader.getInstance().getUserConfig(); | |||
String value = config.getString(CONFIG_CORE_SECTION, null, | |||
CONFIG_KEY_SUPPORTSATOMICFILECREATION); | |||
if (value != null) { | |||
supportsAtomicFileCreation = StringUtils.toBoolean(value) | |||
? AtomicFileCreation.SUPPORTED | |||
: AtomicFileCreation.NOT_SUPPORTED; | |||
} else { | |||
supportsAtomicFileCreation = AtomicFileCreation.SUPPORTED; | |||
} | |||
} catch (IOException | ConfigInvalidException e) { | |||
LOG.warn(JGitText.get().assumeAtomicCreateNewFile, e); | |||
supportsAtomicFileCreation = AtomicFileCreation.SUPPORTED; | |||
} | |||
} | |||
return supportsAtomicCreateNewFile == AtomicFileCreation.SUPPORTED; | |||
return supportsAtomicFileCreation == AtomicFileCreation.SUPPORTED; | |||
} | |||
@Override | |||
@@ -422,7 +409,7 @@ public class FS_POSIX extends FS { | |||
* An implementation of the File#createNewFile() semantics which can create | |||
* a unique file atomically also on NFS. If the config option | |||
* {@code core.supportsAtomicCreateNewFile = true} (which is the default) | |||
* then simply File#createNewFile() is called. | |||
* then simply Files#createFile() is called. | |||
* | |||
* But if {@code core.supportsAtomicCreateNewFile = false} then after | |||
* successful creation of the lock file a hard link to that lock file is | |||
@@ -443,14 +430,17 @@ public class FS_POSIX extends FS { | |||
*/ | |||
@Override | |||
public LockToken createNewFileAtomic(File file) throws IOException { | |||
if (!file.createNewFile()) { | |||
Path path; | |||
try { | |||
path = file.toPath(); | |||
Files.createFile(path); | |||
} catch (FileAlreadyExistsException | InvalidPathException e) { | |||
return token(false, null); | |||
} | |||
if (supportsAtomicCreateNewFile() || !supportsUnixNLink) { | |||
return token(true, null); | |||
} | |||
Path link = null; | |||
Path path = file.toPath(); | |||
try { | |||
link = Files.createLink(Paths.get(uniqueLinkPath(file)), path); | |||
Integer nlink = (Integer) (Files.getAttribute(path, |
@@ -55,6 +55,7 @@ import java.nio.file.CopyOption; | |||
import java.nio.file.Files; | |||
import java.nio.file.InvalidPathException; | |||
import java.nio.file.LinkOption; | |||
import java.nio.file.NoSuchFileException; | |||
import java.nio.file.Path; | |||
import java.nio.file.StandardCopyOption; | |||
import java.nio.file.StandardOpenOption; | |||
@@ -677,9 +678,14 @@ public class FileUtils { | |||
try { | |||
return Files.getLastModifiedTime(path, LinkOption.NOFOLLOW_LINKS) | |||
.toInstant(); | |||
} catch (NoSuchFileException e) { | |||
LOG.debug( | |||
"Cannot read lastModifiedInstant since path {} does not exist", //$NON-NLS-1$ | |||
path); | |||
return Instant.EPOCH; | |||
} catch (IOException e) { | |||
LOG.error(MessageFormat | |||
.format(JGitText.get().readLastModifiedFailed, path)); | |||
.format(JGitText.get().readLastModifiedFailed, path), e); | |||
return Instant.ofEpochMilli(path.toFile().lastModified()); | |||
} | |||
} |
@@ -47,6 +47,7 @@ | |||
package org.eclipse.jgit.util; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import java.net.InetAddress; | |||
import java.net.UnknownHostException; | |||
import java.security.AccessController; | |||
@@ -56,12 +57,17 @@ import java.text.SimpleDateFormat; | |||
import java.util.Locale; | |||
import java.util.TimeZone; | |||
import org.eclipse.jgit.errors.ConfigInvalidException; | |||
import org.eclipse.jgit.errors.CorruptObjectException; | |||
import org.eclipse.jgit.lib.Config; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.ObjectChecker; | |||
import org.eclipse.jgit.lib.StoredConfig; | |||
import org.eclipse.jgit.storage.file.FileBasedConfig; | |||
import org.eclipse.jgit.util.time.MonotonicClock; | |||
import org.eclipse.jgit.util.time.MonotonicSystemClock; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
/** | |||
* Interface to read values from the system. | |||
@@ -72,6 +78,10 @@ import org.eclipse.jgit.util.time.MonotonicSystemClock; | |||
* </p> | |||
*/ | |||
public abstract class SystemReader { | |||
private final static Logger LOG = LoggerFactory | |||
.getLogger(SystemReader.class); | |||
private static final SystemReader DEFAULT; | |||
private static Boolean isMacOS; | |||
@@ -87,6 +97,10 @@ public abstract class SystemReader { | |||
private static class Default extends SystemReader { | |||
private volatile String hostname; | |||
private volatile FileBasedConfig systemConfig; | |||
private volatile FileBasedConfig userConfig; | |||
@Override | |||
public String getenv(String variable) { | |||
return System.getenv(variable); | |||
@@ -99,28 +113,69 @@ public abstract class SystemReader { | |||
@Override | |||
public FileBasedConfig openSystemConfig(Config parent, FS fs) { | |||
File configFile = fs.getGitSystemConfig(); | |||
if (configFile == null) { | |||
return new FileBasedConfig(null, fs) { | |||
@Override | |||
public void load() { | |||
// empty, do not load | |||
} | |||
@Override | |||
public boolean isOutdated() { | |||
// regular class would bomb here | |||
return false; | |||
} | |||
}; | |||
if (systemConfig == null) { | |||
systemConfig = createSystemConfig(parent, fs); | |||
} | |||
return new FileBasedConfig(parent, configFile, fs); | |||
return systemConfig; | |||
} | |||
protected FileBasedConfig createSystemConfig(Config parent, FS fs) { | |||
if (StringUtils.isEmptyOrNull(getenv(Constants.GIT_CONFIG_NOSYSTEM_KEY))) { | |||
File configFile = fs.getGitSystemConfig(); | |||
if (configFile != null) { | |||
return new FileBasedConfig(parent, configFile, fs); | |||
} | |||
} | |||
return new FileBasedConfig(null, fs) { | |||
@Override | |||
public void load() { | |||
// empty, do not load | |||
} | |||
@Override | |||
public boolean isOutdated() { | |||
// regular class would bomb here | |||
return false; | |||
} | |||
}; | |||
} | |||
@Override | |||
public FileBasedConfig openUserConfig(Config parent, FS fs) { | |||
final File home = fs.userHome(); | |||
return new FileBasedConfig(parent, new File(home, ".gitconfig"), fs); //$NON-NLS-1$ | |||
if (userConfig == null) { | |||
File home = fs.userHome(); | |||
userConfig = new FileBasedConfig(parent, | |||
new File(home, ".gitconfig"), fs); //$NON-NLS-1$ | |||
} | |||
return userConfig; | |||
} | |||
@Override | |||
public StoredConfig getSystemConfig() | |||
throws IOException, ConfigInvalidException { | |||
if (systemConfig == null) { | |||
systemConfig = createSystemConfig(null, FS.DETECTED); | |||
} | |||
if (systemConfig.isOutdated()) { | |||
LOG.debug("loading system config {}", systemConfig); //$NON-NLS-1$ | |||
systemConfig.load(); | |||
} | |||
return systemConfig; | |||
} | |||
@Override | |||
public StoredConfig getUserConfig() | |||
throws IOException, ConfigInvalidException { | |||
if (userConfig == null) { | |||
userConfig = openUserConfig(getSystemConfig(), FS.DETECTED); | |||
} else { | |||
getSystemConfig(); | |||
} | |||
if (userConfig.isOutdated()) { | |||
LOG.debug("loading user config {}", userConfig); //$NON-NLS-1$ | |||
userConfig.load(); | |||
} | |||
return userConfig; | |||
} | |||
@Override | |||
@@ -149,19 +204,19 @@ public abstract class SystemReader { | |||
} | |||
} | |||
private static SystemReader INSTANCE = DEFAULT; | |||
private static volatile SystemReader INSTANCE = DEFAULT; | |||
/** | |||
* Get time since epoch, with up to millisecond resolution. | |||
* Get the current SystemReader instance | |||
* | |||
* @return time since epoch, with up to millisecond resolution. | |||
* @return the current SystemReader instance. | |||
*/ | |||
public static SystemReader getInstance() { | |||
return INSTANCE; | |||
} | |||
/** | |||
* Set the new instance to use when accessing properties. | |||
* Set a new SystemReader instance to use when accessing properties. | |||
* | |||
* @param newReader | |||
* the new instance to use when accessing properties, or null for | |||
@@ -225,7 +280,10 @@ public abstract class SystemReader { | |||
public abstract String getProperty(String key); | |||
/** | |||
* Open the git configuration found in the user home | |||
* Open the git configuration found in the user home. Use | |||
* {@link #getUserConfig()} to get the current git configuration in the user | |||
* home since it manages automatic reloading when the gitconfig file was | |||
* modified and avoids unnecessary reloads. | |||
* | |||
* @param parent | |||
* a config with values not found directly in the returned config | |||
@@ -237,7 +295,10 @@ public abstract class SystemReader { | |||
public abstract FileBasedConfig openUserConfig(Config parent, FS fs); | |||
/** | |||
* Open the gitconfig configuration found in the system-wide "etc" directory | |||
* Open the gitconfig configuration found in the system-wide "etc" | |||
* directory. Use {@link #getSystemConfig()} to get the current system-wide | |||
* git configuration since it manages automatic reloading when the gitconfig | |||
* file was modified and avoids unnecessary reloads. | |||
* | |||
* @param parent | |||
* a config with values not found directly in the returned | |||
@@ -250,6 +311,38 @@ public abstract class SystemReader { | |||
*/ | |||
public abstract FileBasedConfig openSystemConfig(Config parent, FS fs); | |||
/** | |||
* Get the git configuration found in the user home. The configuration will | |||
* be reloaded automatically if the configuration file was modified. Also | |||
* reloads the system config if the system config file was modified. If the | |||
* configuration file wasn't modified returns the cached configuration. | |||
* | |||
* @return the git configuration found in the user home | |||
* @throws ConfigInvalidException | |||
* if configuration is invalid | |||
* @throws IOException | |||
* if something went wrong when reading files | |||
* @since 5.1.9 | |||
*/ | |||
public abstract StoredConfig getUserConfig() | |||
throws IOException, ConfigInvalidException; | |||
/** | |||
* Get the gitconfig configuration found in the system-wide "etc" directory. | |||
* The configuration will be reloaded automatically if the configuration | |||
* file was modified otherwise returns the cached system level config. | |||
* | |||
* @return the gitconfig configuration found in the system-wide "etc" | |||
* directory | |||
* @throws ConfigInvalidException | |||
* if configuration is invalid | |||
* @throws IOException | |||
* if something went wrong when reading files | |||
* @since 5.1.9 | |||
*/ | |||
public abstract StoredConfig getSystemConfig() | |||
throws IOException, ConfigInvalidException; | |||
/** | |||
* Get the current system time | |||
* |
@@ -184,7 +184,7 @@ | |||
<jgit-last-release-version>5.1.0.201809111528-r</jgit-last-release-version> | |||
<apache-sshd-version>2.0.0</apache-sshd-version> | |||
<jsch-version>0.1.54</jsch-version> | |||
<jsch-version>0.1.55</jsch-version> | |||
<jzlib-version>1.1.1</jzlib-version> | |||
<javaewah-version>1.1.6</javaewah-version> | |||
<junit-version>4.12</junit-version> | |||
@@ -195,8 +195,8 @@ | |||
<servlet-api-version>3.1.0</servlet-api-version> | |||
<jetty-version>9.4.11.v20180605</jetty-version> | |||
<japicmp-version>0.14.1</japicmp-version> | |||
<httpclient-version>4.5.5</httpclient-version> | |||
<httpcore-version>4.4.9</httpcore-version> | |||
<httpclient-version>4.5.6</httpclient-version> | |||
<httpcore-version>4.4.10</httpcore-version> | |||
<slf4j-version>1.7.2</slf4j-version> | |||
<log4j-version>1.2.15</log4j-version> | |||
<maven-javadoc-plugin-version>3.1.0</maven-javadoc-plugin-version> |