I’d like to update an old a code which checkouts a tag in a repository. It’s very slow but it turns out there’s no need to do a real checkout but only to have a read-only snapshot.
The original code is:
import java.io.File;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmTag;
import org.apache.maven.scm.ScmVersion;
import org.apache.maven.scm.manager.BasicScmManager;
import org.apache.maven.scm.manager.ScmManager;
import org.apache.maven.scm.provider.git.jgit.JGitScmProvider;
import org.apache.maven.scm.repository.ScmRepository;
public class TestSCM {
public static void main(String[] args) throws ScmException {
ScmManager scmManager = new BasicScmManager();
scmManager.setScmProvider("git", new JGitScmProvider(null));
File tmpDir = new File(System.getProperty("java.io.tmpdir"));
File checkoutDirectory = new File(tmpDir, "test_checkout");
if (!checkoutDirectory.exists()) {
checkoutDirectory.mkdir();
}
ScmVersion scmVersion = new ScmTag("I20231202-0500");
ScmRepository repository = scmManager
.makeScmRepository("scm:git:https://github.com/eclipse-jdt/eclipse.jdt.core.git");
scmManager.checkOut(repository, new ScmFileSet(checkoutDirectory), scmVersion);
}
}
I replaced checkOut with export:
import java.io.File;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmTag;
import org.apache.maven.scm.ScmVersion;
import org.apache.maven.scm.manager.BasicScmManager;
import org.apache.maven.scm.manager.ScmManager;
import org.apache.maven.scm.provider.git.jgit.JGitScmProvider;
import org.apache.maven.scm.repository.ScmRepository;
public class TestSCM {
public static void main(String[] args) throws ScmException {
ScmManager scmManager = new BasicScmManager();
scmManager.setScmProvider("git", new JGitScmProvider(null));
File tmpDir = new File(System.getProperty("java.io.tmpdir"));
File checkoutDirectory = new File(tmpDir, "test_checkout");
if (!checkoutDirectory.exists()) {
checkoutDirectory.mkdir();
}
ScmVersion scmVersion = new ScmTag("I20231202-0500");
ScmRepository repository = scmManager
.makeScmRepository("scm:git:https://github.com/eclipse-jdt/eclipse.jdt.core.git");
scmManager.export(repository, new ScmFileSet(checkoutDirectory), scmVersion);
}
}
It seems to be unimplemented:
java.lang.UnsupportedOperationException: getExportCommand
at org.apache.maven.scm.provider.git.jgit.JGitScmProvider.getExportCommand(JGitScmProvider.java:125)
at org.apache.maven.scm.provider.git.AbstractGitScmProvider.export(AbstractGitScmProvider.java:210)
at org.apache.maven.scm.provider.AbstractScmProvider.export(AbstractScmProvider.java:642)
at org.apache.maven.scm.provider.AbstractScmProvider.export(AbstractScmProvider.java:624)
at org.apache.maven.scm.manager.AbstractScmManager.export(AbstractScmManager.java:458)
I use these dependencies:
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-api</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-jgit</artifactId>
<version>2.1.0</version>
</dependency>