From acb97aa6504cf5343c0de86d8a4a7b3991720493 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Fri, 13 Aug 2010 16:09:40 +0000 Subject: [PATCH] Add distribution cache in CreateSrpm git-svn-id: https://svn.argeo.org/slc/trunk@3765 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../slc/lib/linux/rpmfactory/CreateSrpm.java | 29 ++++++++++++++++--- .../linux/rpmfactory/RpmBuildEnvironment.java | 7 +++-- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/lib/linux/rpmfactory/CreateSrpm.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/lib/linux/rpmfactory/CreateSrpm.java index e48df9143..aa19a8342 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/lib/linux/rpmfactory/CreateSrpm.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/lib/linux/rpmfactory/CreateSrpm.java @@ -22,6 +22,9 @@ public class CreateSrpm implements Runnable { private File topdir; + /** Directory where to cache downloaded dsitributions. */ + private File distributionCache; + private Resource specFile; private RpmBuildEnvironment rpmBuildEnvironment; @@ -114,11 +117,25 @@ public class CreateSrpm implements Runnable { // FIXME: we may have missed some files here copySources: for (Resource res : toCopyToSources) { - File targetFile = new File(sourcesDir, res.getFilename()) + File targetDir; + if (distributionCache != null) { + if (distributionCache.exists()) + distributionCache.mkdirs(); + targetDir = distributionCache; + } else + targetDir = sourcesDir; + File targetFile = new File(targetDir, res.getFilename()) .getCanonicalFile(); - if (targetFile.exists() && !overwriteSources) - continue copySources; - copyResourceToFile(res, targetFile); + if (!targetFile.exists() || overwriteSources) + copyResourceToFile(res, targetFile); + if (!targetDir.equals(sourcesDir)) { + File fileInSourcesDir = new File(sourcesDir, targetFile + .getName()); + if (!fileInSourcesDir.exists() + || !(fileInSourcesDir.length() == targetFile + .length())) + FileUtils.copyFile(targetFile, fileInSourcesDir); + } } } catch (Exception e) { throw new SlcException("Cannot copy to " + sourcesDir, e); @@ -175,4 +192,8 @@ public class CreateSrpm implements Runnable { this.rpmBuildEnvironment = rpmBuildEnvironment; } + public void setDistributionCache(File distributionCache) { + this.distributionCache = distributionCache; + } + } diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/lib/linux/rpmfactory/RpmBuildEnvironment.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/lib/linux/rpmfactory/RpmBuildEnvironment.java index a3b0d95c4..4c43eec1f 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/lib/linux/rpmfactory/RpmBuildEnvironment.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/lib/linux/rpmfactory/RpmBuildEnvironment.java @@ -10,6 +10,10 @@ import java.util.Map; import org.apache.commons.io.FileUtils; import org.argeo.slc.SlcException; +/** + * Defines a build environment. This information is typically used by other + * components performing the various actions related to RPM build. + */ public class RpmBuildEnvironment { private String defaultMacroFiles = "/usr/lib/rpm/macros:/usr/lib/rpm/ia32e-linux/macros:/usr/lib/rpm/redhat/macros:/etc/rpm/macros.*:/etc/rpm/macros:/etc/rpm/ia32e-linux/macros:~/.rpmmacros"; private Map rpmmacros = new HashMap(); @@ -30,8 +34,7 @@ public class RpmBuildEnvironment { + rpmmacroFile.getCanonicalPath()); FileUtils.writeLines(rpmrcFile, rpmrcLines); } catch (IOException e) { - throw new SlcException("Cannot write rpmbuild config files", - e); + throw new SlcException("Cannot write rpmbuild config files", e); } } -- 2.39.5