From d4825d0f510ce13bac4856f41df293e68a73dd15 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 16 Jul 2013 13:07:48 +0000 Subject: [PATCH] Refactor RPM Factory git-svn-id: https://svn.argeo.org/slc/trunk@6380 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../org/argeo/slc/rpmfactory/RpmFactory.java | 77 +++++++++++++++++++ .../slc/rpmfactory/core/BuildInMock.java | 1 + .../core/CreateRpmDistribution.java | 1 + .../slc/rpmfactory/core/ReleaseStaging.java | 19 +++-- .../{RpmFactory.java => RpmFactoryImpl.java} | 11 ++- 5 files changed, 99 insertions(+), 10 deletions(-) create mode 100644 runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/RpmFactory.java rename runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/{RpmFactory.java => RpmFactoryImpl.java} (97%) diff --git a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/RpmFactory.java b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/RpmFactory.java new file mode 100644 index 000000000..aee295693 --- /dev/null +++ b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/RpmFactory.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2007-2012 Argeo GmbH + * + * Licensed 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.argeo.slc.rpmfactory; + +import java.io.File; +import java.util.List; + +import javax.jcr.Node; + +/** + * Defines a build environment. This information is typically used by other + * components performing the various actions related to RPM build. + */ +public interface RpmFactory { + // + // DIRECT ACTIONS ON JCR REPOSITORY + // + public void indexWorkspace(String workspace); + + public Node newDistribution(String distributionId); + + // + // CONFIG FILES GENERATION + // + /** Creates a mock config file. */ + public File getMockConfigFile(String arch, String branch); + + /** Creates a yum config file. */ + public File getYumRepoFile(String arch); + + // + // WORKSPACES + // + public String getStagingWorkspace(); + + /** + * @return the name of the testing workspace, or null if and only if the + * testing workspace was not enabled. + */ + public String getTestingWorkspace(); + + public String getStableWorkspace(); + + public File getWorkspaceDir(String workspace); + + // + // ARCH DEPENDENT INFOS + // + public List getArchs(); + + public String getMockConfig(String arch); + + public String getIdWithArch(String arch); + + public File getResultDir(String arch); + + // + // DEPLOYMENT + // + public String getGitBaseUrl(); + + public Boolean isDeveloperInstance(); + +} diff --git a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/BuildInMock.java b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/BuildInMock.java index f2b1dbaf3..1f815eac5 100644 --- a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/BuildInMock.java +++ b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/BuildInMock.java @@ -29,6 +29,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.slc.SlcException; import org.argeo.slc.core.execution.tasks.SystemCall; +import org.argeo.slc.rpmfactory.RpmFactory; /** Build an RPM in mock. */ public class BuildInMock implements Runnable { diff --git a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/CreateRpmDistribution.java b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/CreateRpmDistribution.java index f2548f04b..9fd4993cf 100644 --- a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/CreateRpmDistribution.java +++ b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/CreateRpmDistribution.java @@ -16,6 +16,7 @@ import org.apache.commons.logging.LogFactory; import org.argeo.jcr.JcrUtils; import org.argeo.slc.SlcException; import org.argeo.slc.core.execution.tasks.SystemCall; +import org.argeo.slc.rpmfactory.RpmFactory; /** * Gather RPMs from various sources (local builds or third party) into a diff --git a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/ReleaseStaging.java b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/ReleaseStaging.java index 44fb368f3..76a67005a 100644 --- a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/ReleaseStaging.java +++ b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/ReleaseStaging.java @@ -11,6 +11,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.slc.SlcException; import org.argeo.slc.core.execution.tasks.SystemCall; +import org.argeo.slc.rpmfactory.RpmFactory; /** Releases the content of staging to a public repository. */ public class ReleaseStaging implements Runnable { @@ -23,14 +24,14 @@ public class ReleaseStaging implements Runnable { @Override public void run() { - File stagingDir = rpmFactory.getWorkspaceDir(rpmFactory - .getStagingWorkspace()); - // TODO deal with testing - File targetRepoDir = rpmFactory.getWorkspaceDir(rpmFactory - .getStableWorkspace()); + String sourceWorkspace = rpmFactory.getStagingWorkspace(); + File sourceRepoDir = rpmFactory.getWorkspaceDir(sourceWorkspace); + String targetWorkspace = rpmFactory.getTestingWorkspace() != null ? rpmFactory + .getTestingWorkspace() : rpmFactory.getStableWorkspace(); + File targetRepoDir = rpmFactory.getWorkspaceDir(targetWorkspace); List reposToRecreate = new ArrayList(); - stagingChildren: for (File dir : stagingDir.listFiles()) { + stagingChildren: for (File dir : sourceRepoDir.listFiles()) { if (!dir.isDirectory()) continue stagingChildren; if (dir.getName().equals("lost+found")) @@ -42,7 +43,7 @@ public class ReleaseStaging implements Runnable { if (log.isDebugEnabled()) log.debug(dir + " => " + targetDir); } catch (IOException e) { - throw new SlcException(stagingDir + throw new SlcException(sourceRepoDir + " could not be copied properly, check it manually." + " Metadata have NOT been updated.", e); } @@ -59,7 +60,7 @@ public class ReleaseStaging implements Runnable { } // clear staging - for (File dir : stagingDir.listFiles()) { + for (File dir : sourceRepoDir.listFiles()) { try { if (dir.getName().equals("lost+found")) continue; @@ -89,6 +90,8 @@ public class ReleaseStaging implements Runnable { log.info("Updated repo " + repoToRecreate); } + rpmFactory.indexWorkspace(sourceWorkspace); + rpmFactory.indexWorkspace(targetWorkspace); } public void setRpmFactory(RpmFactory rpmFactory) { diff --git a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmFactory.java b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmFactoryImpl.java similarity index 97% rename from runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmFactory.java rename to runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmFactoryImpl.java index c09ed36c3..a5012fa4a 100644 --- a/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmFactory.java +++ b/runtime/org.argeo.slc.rpmfactory/src/main/java/org/argeo/slc/rpmfactory/core/RpmFactoryImpl.java @@ -32,18 +32,23 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.jcr.JcrUtils; import org.argeo.slc.SlcConstants; import org.argeo.slc.SlcException; import org.argeo.slc.core.execution.tasks.SystemCall; import org.argeo.slc.repo.NodeIndexerVisitor; +import org.argeo.slc.rpmfactory.RpmFactory; import org.argeo.slc.rpmfactory.RpmRepository; /** * Defines a build environment. This information is typically used by other * components performing the various actions related to RPM build. */ -public class RpmFactory { +public class RpmFactoryImpl implements RpmFactory { + private Log log = LogFactory.getLog(RpmFactoryImpl.class); + private Repository rpmRepository; private Repository distRepository; @@ -153,7 +158,7 @@ public class RpmFactory { } /** Caller must logout the underlying session. */ - protected Node newDistribution(String distributionId) { + public Node newDistribution(String distributionId) { Session session = null; try { session = JcrUtils.loginOrCreateWorkspace(rpmRepository, @@ -341,6 +346,8 @@ public class RpmFactory { session = rpmRepository.login(workspace); session.getRootNode().accept( new NodeIndexerVisitor(new RpmIndexer())); + if (log.isDebugEnabled()) + log.debug("Indexed workspace " + workspace); } catch (RepositoryException e) { throw new SlcException("Cannot index workspace " + workspace, e); } finally { -- 2.39.2