]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/lib/linux/rpmfactory/CreateSrpm.java
Update license header
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / lib / linux / rpmfactory / CreateSrpm.java
index aa19a8342e5f568be84f311b5428a34293e51ba3..04680df7b438e77bb0cc603d48d9d86b36f986fb 100644 (file)
@@ -7,6 +7,7 @@ import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.exec.Executor;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
@@ -22,7 +23,7 @@ public class CreateSrpm implements Runnable {
 
        private File topdir;
 
-       /** Directory where to cache downloaded dsitributions. */
+       /** Directory where to cache downloaded distributions. */
        private File distributionCache;
 
        private Resource specFile;
@@ -33,6 +34,8 @@ public class CreateSrpm implements Runnable {
 
        private File srpmFile;
 
+       private Executor executor;
+
        public void run() {
                File sourcesDir = new File(topdir, "SOURCES");
                sourcesDir.mkdirs();
@@ -50,23 +53,23 @@ public class CreateSrpm implements Runnable {
                        copyResourceToFile(specFile, targetFile);
 
                        // Generate rpmbuild config files
-                       File rpmmacroFile = new File(topdir, "rpmmacros");
-                       File rpmrcFile = new File(topdir, "rpmrc");
-                       rpmBuildEnvironment.writeRpmbuildConfigFiles(topdir, rpmmacroFile,
-                                       rpmrcFile);
+                       rpmBuildEnvironment.writeRpmbuildConfigFiles(topdir);
 
                        // Build SRPM
                        srpmsDir.mkdirs();
                        SystemCall packageSrpm = new SystemCall();
                        packageSrpm.arg("rpmbuild");
                        packageSrpm.arg("-bs").arg("--nodeps");
-                       packageSrpm.arg("--rcfile=" + rpmrcFile.getName());
+                       packageSrpm.arg("--rcfile=rpmrc");
+                       packageSrpm.arg("--macros=" + RpmBuildEnvironment.defaultMacroFiles
+                                       + ":rpmmacros");
                        // buildSrpm.arg("-D", "_topdir " + topdir.getCanonicalPath() + "");
                        packageSrpm.arg("SPECS/" + specFile.getFilename());
                        packageSrpm.setExecDir(topdir.getCanonicalPath());
                        packageSrpm.setLogCommand(true);
 
                        // Execute
+                       packageSrpm.setExecutor(executor);
                        String answer = packageSrpm.function();
 
                        // Extract generated SRPM path
@@ -82,6 +85,7 @@ public class CreateSrpm implements Runnable {
        protected void copyToSources(RpmSpecFile spec, File sourcesDir) {
                try {
                        List<Resource> toCopyToSources = new ArrayList<Resource>();
+                       List<Resource> toDownload = new ArrayList<Resource>();
                        for (String file : spec.getSources().values()) {
                                try {
                                        Resource res;
@@ -92,6 +96,7 @@ public class CreateSrpm implements Runnable {
 
                                        } catch (Exception e) {
                                                res = new UrlResource(file);
+                                               toDownload.add(res);
                                        }
                                        toCopyToSources.add(res);
                                } catch (Exception e) {
@@ -108,6 +113,7 @@ public class CreateSrpm implements Runnable {
                                                }
                                        } catch (Exception e) {
                                                res = new UrlResource(file);
+                                               toDownload.add(res);
                                        }
                                        toCopyToSources.add(res);
                                } catch (Exception e) {
@@ -116,12 +122,14 @@ public class CreateSrpm implements Runnable {
                        }
 
                        // FIXME: we may have missed some files here
-                       copySources: for (Resource res : toCopyToSources) {
+                       for (Resource res : toCopyToSources) {
                                File targetDir;
-                               if (distributionCache != null) {
-                                       if (distributionCache.exists())
+                               if (distributionCache != null && toDownload.contains(res)) {
+                                       if (!distributionCache.exists())
                                                distributionCache.mkdirs();
                                        targetDir = distributionCache;
+                                       if (log.isDebugEnabled())
+                                               log.debug("Cache " + res + " in " + targetDir);
                                } else
                                        targetDir = sourcesDir;
                                File targetFile = new File(targetDir, res.getFilename())
@@ -129,8 +137,8 @@ public class CreateSrpm implements Runnable {
                                if (!targetFile.exists() || overwriteSources)
                                        copyResourceToFile(res, targetFile);
                                if (!targetDir.equals(sourcesDir)) {
-                                       File fileInSourcesDir = new File(sourcesDir, targetFile
-                                                       .getName());
+                                       File fileInSourcesDir = new File(sourcesDir,
+                                                       targetFile.getName());
                                        if (!fileInSourcesDir.exists()
                                                        || !(fileInSourcesDir.length() == targetFile
                                                                        .length()))
@@ -196,4 +204,8 @@ public class CreateSrpm implements Runnable {
                this.distributionCache = distributionCache;
        }
 
+       public void setExecutor(Executor executor) {
+               this.executor = executor;
+       }
+
 }