You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by br...@apache.org on 2013/06/25 11:03:37 UTC
svn commit: r1496386 - in
/ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli: Main.java
command/AbstractCommand.java command/DeployResources.java
deployment/ContinuousDeployer.java deployment/DeployerUtil.java
Author: bramk
Date: Tue Jun 25 09:03:37 2013
New Revision: 1496386
URL: http://svn.apache.org/r1496386
Log:
[sandbox] Added deploy commands and support for non-bundles
Added:
ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/DeployResources.java
Modified:
ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/Main.java
ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/AbstractCommand.java
ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/deployment/ContinuousDeployer.java
ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/deployment/DeployerUtil.java
Modified: ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/Main.java
URL: http://svn.apache.org/viewvc/ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/Main.java?rev=1496386&r1=1496385&r2=1496386&view=diff
==============================================================================
--- ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/Main.java (original)
+++ ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/Main.java Tue Jun 25 09:03:37 2013
@@ -40,6 +40,7 @@ import org.apache.ace.cli.command.Create
import org.apache.ace.cli.command.CreateTarget;
import org.apache.ace.cli.command.DeleteArtifacts;
import org.apache.ace.cli.command.DeleteResources;
+import org.apache.ace.cli.command.DeployResources;
import org.apache.ace.cli.command.ListArtifacts;
import org.apache.ace.cli.command.ListDistributions;
import org.apache.ace.cli.command.ListFeatures;
@@ -78,6 +79,7 @@ public class Main {
COMMANDS.add(new ListFeatures());
COMMANDS.add(new ListDistributions());
COMMANDS.add(new ListTargets());
+ COMMANDS.add(new DeployResources());
}
public static void main(String[] args) throws Exception {
@@ -210,7 +212,7 @@ public class Main {
private static Map<String, FixedIndexedRepo> loadRepositories(Properties properties, File workdir) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
Map<String, FixedIndexedRepo> repositories = new HashMap<String, FixedIndexedRepo>();
- for (String repositoryName : new String[] { "source", "target" }) {
+ for (String repositoryName : new String[] { "source", "target", "release" }) {
Map<String, String> repositoryProps = new HashMap<String, String>();
for (Entry<Object, Object> entry : properties.entrySet()) {
@@ -220,7 +222,14 @@ public class Main {
repositoryProps.put(key.replaceFirst(repositoryName + ".", ""), value);
}
}
+
String repoClass = repositoryProps.get("class");
+ if(repoClass == null){
+ System.out.println("No definition found for repository: " + repositoryName);
+ continue;
+ } else {
+ System.out.println("Initializing repository: " + repositoryName);
+ }
FixedIndexedRepo repository = (FixedIndexedRepo) Main.class.getClassLoader().loadClass(repoClass).newInstance();
repository.setProperties(repositoryProps);
Modified: ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/AbstractCommand.java
URL: http://svn.apache.org/viewvc/ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/AbstractCommand.java?rev=1496386&r1=1496385&r2=1496386&view=diff
==============================================================================
--- ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/AbstractCommand.java (original)
+++ ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/AbstractCommand.java Tue Jun 25 09:03:37 2013
@@ -76,6 +76,10 @@ public abstract class AbstractCommand {
return m_repositories.get("target");
}
+ protected FixedIndexedRepo getReleaseRepository() {
+ return m_repositories.get("release");
+ }
+
protected List<Resource> findResources(Repository repository, String bsn, String version, String type) {
Requirement requirement = new CapReqBuilder("osgi.identity")
.addDirective("filter", String.format("(&(osgi.identity=%s)(version=%s)(type=*))", bsn, version, type))
Added: ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/DeployResources.java
URL: http://svn.apache.org/viewvc/ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/DeployResources.java?rev=1496386&view=auto
==============================================================================
--- ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/DeployResources.java (added)
+++ ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/DeployResources.java Tue Jun 25 09:03:37 2013
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.cli.command;
+
+import java.util.List;
+
+import org.apache.ace.cli.deployment.ContinuousDeployer;
+import org.osgi.resource.Resource;
+
+import aQute.bnd.deployer.repository.FixedIndexedRepo;
+
+/**
+ * Command that copies resources from the source repository to the target repository.
+ *
+ */
+public class DeployResources extends AbstractCommand {
+
+ @Override
+ public String getName() {
+ return "deploy-resources";
+ }
+
+ @Override
+ public String getDescription() {
+ return "copy resource from source repository using cd heuristics";
+ }
+
+ @Override
+ public void doCommand(String command) throws Exception {
+
+ FixedIndexedRepo releaseRepo = getReleaseRepository();
+ FixedIndexedRepo sourceRepo = getSourceRepository();
+ FixedIndexedRepo targetRepo = getTargetRepository();
+ if (!targetRepo.canWrite()) {
+ throw new IllegalArgumentException("The target repository is not writable");
+ }
+
+ ContinuousDeployer cd = new ContinuousDeployer(targetRepo, sourceRepo, releaseRepo);
+
+ try {
+ List<Resource> deployed = cd.deployResources();
+ printVerbose("Deployed " + deployed.size() + " artifacts");
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+}
Modified: ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/deployment/ContinuousDeployer.java
URL: http://svn.apache.org/viewvc/ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/deployment/ContinuousDeployer.java?rev=1496386&r1=1496385&r2=1496386&view=diff
==============================================================================
--- ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/deployment/ContinuousDeployer.java (original)
+++ ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/deployment/ContinuousDeployer.java Tue Jun 25 09:03:37 2013
@@ -2,11 +2,14 @@ package org.apache.ace.cli.deployment;
import static org.apache.ace.cli.deployment.DeployerUtil.copyResources;
import static org.apache.ace.cli.deployment.DeployerUtil.findResources;
+import static org.apache.ace.cli.deployment.DeployerUtil.getFileName;
import static org.apache.ace.cli.deployment.DeployerUtil.getIdentity;
import static org.apache.ace.cli.deployment.DeployerUtil.getIdentityVersionRequirement;
-import static org.apache.ace.cli.deployment.DeployerUtil.getJarWithNewVersion;
+import static org.apache.ace.cli.deployment.DeployerUtil.getBundleWithNewVersion;
+import static org.apache.ace.cli.deployment.DeployerUtil.getMimetype;
import static org.apache.ace.cli.deployment.DeployerUtil.getNextSnapshotVersion;
import static org.apache.ace.cli.deployment.DeployerUtil.getString;
+import static org.apache.ace.cli.deployment.DeployerUtil.getType;
import static org.apache.ace.cli.deployment.DeployerUtil.getVersion;
import static org.apache.ace.cli.deployment.DeployerUtil.isSameBaseVersion;
import static org.apache.ace.cli.deployment.DeployerUtil.isSnapshotVersion;
@@ -17,6 +20,7 @@ import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;
+import org.apache.ace.cli.repository.AceObrRepository;
import org.osgi.framework.Version;
import org.osgi.resource.Resource;
@@ -81,11 +85,11 @@ public class ContinuousDeployer {
List<Resource> deployedResources = findResources(m_deploymentRepo, getIdentity(resource), getVersion(resource).toString());
boolean isDeployed = deployedResources.size() > 0;
if (!isDeployed) {
- System.out.println("Uploading release: " + getString(resource));
+ System.out.println("Uploading released resource: " + getString(resource));
copyResources(m_releaseRepo, m_deploymentRepo, getIdentityVersionRequirement(resource));
}
else {
- System.out.println("Ignoring release: " + getString(resource));
+ System.out.println("Released resource allready deployed: " + getString(resource));
}
}
@@ -103,7 +107,7 @@ public class ContinuousDeployer {
Version releasedBaseVersion = getReleasedBaseVersion(resource);
Resource snapshotResource = getHighestSnapshotResource(resource, releasedBaseVersion);
if (snapshotResource == null) {
- System.out.println("Uploading initial snapshot: " + getNextSnapshotVersion(releasedBaseVersion));
+ System.out.println("Uploading initial snapshot: " + getString(resource) + " -> " + getNextSnapshotVersion(releasedBaseVersion));
deploySnapshotResource(resource, getNextSnapshotVersion(releasedBaseVersion));
}
else {
@@ -111,10 +115,10 @@ public class ContinuousDeployer {
File developmentResource = m_developmentRepo.get(getIdentity(resource), getVersion(resource).toString(), Strategy.EXACT, null);
File deployedResource = m_deploymentRepo.get(getIdentity(snapshotResource), getVersion(snapshotResource).toString(), Strategy.EXACT, null);
- File comparableDeployedResource = getJarWithNewVersion(deployedResource, getVersion(resource).toString());
+ File comparableDeployedResource = getBundleWithNewVersion(deployedResource, getVersion(resource).toString());
if (jarsDiffer(comparableDeployedResource, developmentResource)) {
- System.out.println("Uploading new snapshot: " + getNextSnapshotVersion(getVersion(snapshotResource)));
+ System.out.println("Uploading new snapshot: " + getString(resource) + " -> " + getNextSnapshotVersion(getVersion(snapshotResource)));
deploySnapshotResource(resource, getNextSnapshotVersion(getVersion(snapshotResource)));
}
else {
@@ -126,11 +130,22 @@ public class ContinuousDeployer {
private void deploySnapshotResource(Resource resource, Version snapshotVersion) throws Exception {
File file = m_developmentRepo.get(getIdentity(resource), getVersion(resource).toString(), Strategy.EXACT, null);
- File snapshotVersionedJar = getJarWithNewVersion(file, snapshotVersion.toString());
+ if (getType(resource).equals("osgi.bundle")) {
+ file = getBundleWithNewVersion(file, snapshotVersion.toString());
+ }
+
InputStream input = null;
try {
- input = new FileInputStream(snapshotVersionedJar);
- m_deploymentRepo.put(input, null);
+ input = new FileInputStream(file);
+ if (m_deploymentRepo instanceof AceObrRepository) {
+ // ACE OBR can handle non-bundle resources if we pass a correct filename
+ AceObrRepository aceToRepo = (AceObrRepository) m_deploymentRepo;
+ aceToRepo.upload(input, getFileName(resource, snapshotVersion), getMimetype(resource));
+ }
+ else {
+ m_deploymentRepo.put(input, null);
+ }
+
}
finally {
if (input != null)
Modified: ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/deployment/DeployerUtil.java
URL: http://svn.apache.org/viewvc/ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/deployment/DeployerUtil.java?rev=1496386&r1=1496385&r2=1496386&view=diff
==============================================================================
--- ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/deployment/DeployerUtil.java (original)
+++ ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/deployment/DeployerUtil.java Tue Jun 25 09:03:37 2013
@@ -21,6 +21,7 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
+import org.apache.ace.cli.repository.AceObrRepository;
import org.osgi.framework.Version;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
@@ -44,6 +45,32 @@ public final class DeployerUtil {
private static final Pattern QUALIFIER_PATTERN = Pattern.compile(QUALIFIER_PREFIX + "([\\d]{3})$|(.*)(_" + QUALIFIER_PREFIX + "([\\d]{3})?$)");
/**
+ * Construct a Resource filename with a specified version in the form that ACE OBR understands.
+ *
+ * @param resource
+ * The resource
+ * @param version
+ * The version
+ * @return The name
+ */
+ public static String getFileName(Resource resource, Version version) {
+ String location = getUrl(resource);
+ String extension = location.substring(location.lastIndexOf(".") + 1);
+ return getIdentity(resource) + "-" + version + "." + extension;
+ }
+
+ /**
+ * Construct a Resource filename in the form that ACE OBR understands.
+ *
+ * @param resource
+ * The resource
+ * @return The name
+ */
+ public static String getFileName(Resource resource) {
+ return getFileName(resource, getVersion(resource));
+ }
+
+ /**
* Given ad version, creates the 'next' snapshot version. If the version has no snapshot qualifier a new one will be
* added. If it does, it will be incremented.
*
@@ -105,7 +132,7 @@ public final class DeployerUtil {
}
/**
- * Clones a jar file while replacing the Bundle-Version in the manifest with the specified value.
+ * Clones a bundle file while replacing the Bundle-Version in the manifest with the specified value.
*
* @param sourceJar
* The existing jar
@@ -115,7 +142,7 @@ public final class DeployerUtil {
* @throws IOException
* On failure
*/
- public static File getJarWithNewVersion(File sourceJar, String version) throws IOException {
+ public static File getBundleWithNewVersion(File sourceJar, String version) throws IOException {
File targetFile = File.createTempFile("bundle", ".jar");
byte[] buf = new byte[1024];
@@ -128,7 +155,8 @@ public final class DeployerUtil {
out.putNextEntry(new ZipEntry(name));
if (name.equals("META-INF/MANIFEST.MF")) {
- ByteBuffer bb = ByteBuffer.allocate(10 * 1024);
+ // FIXME quick abort
+ ByteBuffer bb = ByteBuffer.allocate(100 * 1024);
int len;
while ((len = zin.read(buf)) > 0) {
bb.put(buf, 0, len);
@@ -196,10 +224,18 @@ public final class DeployerUtil {
List<Resource> resources = findResources(fromRepo, requirement);
for (Resource resource : resources) {
File file = fromRepo.get(getIdentity(resource), getVersion(resource).toString(), Strategy.EXACT, null);
+
InputStream input = null;
try {
input = new FileInputStream(file);
- toRepo.put(input, null);
+ if (toRepo instanceof AceObrRepository) {
+ // ACE OBR can handle non bundle resource if we pass a filename
+ AceObrRepository aceToRepo = (AceObrRepository) toRepo;
+ aceToRepo.upload(input, getFileName(resource), getMimetype(resource));
+ }
+ else {
+ toRepo.put(input, null);
+ }
}
finally {
if (input != null)