You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by xa...@apache.org on 2008/06/25 16:32:22 UTC
svn commit: r671566 - in /ant/ivy/core/trunk:
src/java/org/apache/ivy/plugins/repository/file/FileRepository.java
src/java/org/apache/ivy/plugins/resolver/FileSystemResolver.java
test/java/org/apache/ivy/plugins/resolver/FileSystemResolverTest.java
Author: xavier
Date: Wed Jun 25 07:32:22 2008
New Revision: 671566
URL: http://svn.apache.org/viewvc?rev=671566&view=rev
Log:
add more test and improve atomic publish support
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/repository/file/FileRepository.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/FileSystemResolver.java
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/resolver/FileSystemResolverTest.java
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/repository/file/FileRepository.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/repository/file/FileRepository.java?rev=671566&r1=671565&r2=671566&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/repository/file/FileRepository.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/repository/file/FileRepository.java Wed Jun 25 07:32:22 2008
@@ -57,12 +57,16 @@
copy(source, getFile(destination), overwrite);
}
- public void move(File src, File dest) {
- src.renameTo(dest);
+ public void move(File src, File dest) throws IOException {
+ if (!src.renameTo(dest)) {
+ throw new IOException("impossible to move '" + src + "' to '" + dest + "'");
+ }
}
- public void delete(File f) {
- FileUtil.forceDelete(f);
+ public void delete(File f) throws IOException {
+ if (!FileUtil.forceDelete(f)) {
+ throw new IOException("impossible to delete '" + f + "'");
+ }
}
private void copy(File src, File destination, boolean overwrite) throws IOException {
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/FileSystemResolver.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/FileSystemResolver.java?rev=671566&r1=671565&r2=671566&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/FileSystemResolver.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/FileSystemResolver.java Wed Jun 25 07:32:22 2008
@@ -66,10 +66,6 @@
private Map/*<String,String>*/ fullTransactionPatterns = new HashMap();
/**
- * Is the current transaction open in overwrite mode?
- */
- private boolean overwriteTransaction = false;
- /**
* Location where files are published during the transaction
*/
private File transactionTempDir;
@@ -100,7 +96,7 @@
protected String getDestination(String pattern, Artifact artifact, ModuleRevisionId mrid) {
- if (supportTransaction() && !overwriteTransaction) {
+ if (supportTransaction() && isTransactionStarted()) {
String destPattern = (String) fullTransactionPatterns.get(pattern);
if (destPattern == null) {
@@ -117,40 +113,69 @@
}
}
+ private boolean isTransactionStarted() {
+ return transactionTempDir != null;
+ }
+
public void abortPublishTransaction() throws IOException {
- if (supportTransaction() && !overwriteTransaction) {
- if (transactionTempDir == null) {
+ if (supportTransaction()) {
+ if (!isTransactionStarted()) {
throw new IllegalStateException("no current transaction!");
}
- getFileRepository().delete(transactionTempDir);
- Message.info("\tpublish aborted: deleted " + transactionTempDir);
- closeTransaction();
+ try {
+ getFileRepository().delete(transactionTempDir);
+ Message.info("\tpublish aborted: deleted " + transactionTempDir);
+ } finally {
+ closeTransaction();
+ }
}
}
public void commitPublishTransaction() throws IOException {
- if (supportTransaction() && !overwriteTransaction) {
- if (transactionTempDir == null) {
+ if (supportTransaction()) {
+ if (!isTransactionStarted()) {
throw new IllegalStateException("no current transaction!");
}
- getFileRepository().move(transactionTempDir, transactionDestDir);
- Message.info("\tpublish commited: moved " + transactionTempDir
- + " \n\t\tto " + transactionDestDir);
- closeTransaction();
+ try {
+ getFileRepository().move(transactionTempDir, transactionDestDir);
+
+ Message.info("\tpublish commited: moved " + transactionTempDir
+ + " \n\t\tto " + transactionDestDir);
+ } catch (IOException ex) {
+ IOException commitEx;
+ try {
+ getFileRepository().delete(transactionTempDir);
+ commitEx = new IOException(
+ "publish transaction commit error for " + transactionDestDir
+ + ": rolled back");
+ } catch (IOException deleteEx) {
+ commitEx = new IOException(
+ "publish transaction commit error for " + transactionDestDir
+ + ": rollback impossible either, "
+ + "please remove " + transactionTempDir + " manually");
+ }
+ commitEx.initCause(ex);
+ throw commitEx;
+ } finally {
+ closeTransaction();
+ }
}
}
public void beginPublishTransaction(
ModuleRevisionId module, boolean overwrite) throws IOException {
if (supportTransaction()) {
- if (transactionTempDir != null) {
+ if (isTransactionStarted()) {
throw new IllegalStateException("a transaction is already started and not closed!");
}
- overwriteTransaction = overwrite;
- if (overwriteTransaction) {
+ if (overwrite) {
unsupportedTransaction("overwrite transaction not supported yet");
} else {
initTransaction(module);
+ Message.verbose(
+ "\tstarting transaction: publish during transaction will be done in \n\t\t"
+ + transactionTempDir
+ + "\n\t\tand on commit moved to \n\t\t" + transactionDestDir);
}
}
}
@@ -185,6 +210,7 @@
private void checkSupportTransaction() {
if (supportTransaction == null) {
+ supportTransaction = Boolean.FALSE;
List ivyPatterns = getIvyPatterns();
List artifactPatterns = getArtifactPatterns();
Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/resolver/FileSystemResolverTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/resolver/FileSystemResolverTest.java?rev=671566&r1=671565&r2=671566&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/resolver/FileSystemResolverTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/resolver/FileSystemResolverTest.java Wed Jun 25 07:32:22 2008
@@ -20,6 +20,7 @@
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
+import java.io.IOException;
import java.util.Date;
import java.util.GregorianCalendar;
@@ -594,6 +595,46 @@
}
}
+ public void testPublishOverwrite() throws Exception {
+ try {
+ FileSystemResolver resolver = new FileSystemResolver();
+ resolver.setName("test");
+ resolver.setSettings(settings);
+ assertEquals("test", resolver.getName());
+
+ resolver.addIvyPattern(
+ "test/repositories/1/[organisation]/[module]/[revision]/[artifact].[ext]");
+ resolver.addArtifactPattern(
+ "test/repositories/1/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]");
+
+ File ivyFile = new File("test/repositories/1/myorg/mymodule/myrevision/ivy.xml");
+ File artifactFile = new File("test/repositories/1/myorg/mymodule/myrevision/myartifact-myrevision.myext");
+ touch(ivyFile);
+ touch(artifactFile);
+
+ ModuleRevisionId mrid = ModuleRevisionId.newInstance("myorg", "mymodule", "myrevision");
+ Artifact ivyArtifact = new DefaultArtifact(mrid, new Date(), "ivy", "ivy", "xml");
+ Artifact artifact = new DefaultArtifact(mrid, new Date(), "myartifact", "mytype",
+ "myext");
+ File src = new File("test/repositories/ivysettings.xml");
+ resolver.beginPublishTransaction(mrid, true);
+ resolver.publish(ivyArtifact, src, true);
+ resolver.publish(artifact, src, true);
+ resolver.commitPublishTransaction();
+
+ long length = src.length();
+ assertEquals(length, ivyFile.length());
+ assertEquals(length, artifactFile.length());
+ } finally {
+ FileUtil.forceDelete(new File("test/repositories/1/myorg"));
+ }
+ }
+
+ private void touch(File file) throws IOException {
+ file.getParentFile().mkdirs();
+ file.createNewFile();
+ }
+
public void testPublishTransaction() throws Exception {
try {
FileSystemResolver resolver = new FileSystemResolver();
@@ -780,7 +821,7 @@
resolver.beginPublishTransaction(mrid, true);
resolver.publish(artifact, src, true);
- fail("publishing with transaction=true and overzrite mode should raise an exception");
+ fail("publishing with transaction=true and overwrite mode should raise an exception");
} catch (IllegalStateException ex) {
assertTrue(ex.getMessage().indexOf("transactional") != -1);
}