X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.rpmfactory%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Frpmfactory%2Fcore%2FBuildInMock.java;h=f2b1dbaf3428382f022dba3f730339cb90ade01b;hb=e5b65f8f0f102ec5336623eea0c80bcbc48a298e;hp=11b772be9eadafc72d7a570d1dd6b0570b99845d;hpb=f2017c32033b4b96469b075d6872a6d379652dfb;p=gpl%2Fargeo-slc.git 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 11b772be9..f2b1dbaf3 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 @@ -39,44 +39,42 @@ public class BuildInMock implements Runnable { private String branch = null; private String arch = NOARCH; - private RpmFactory factory; + private RpmFactory rpmFactory; private Executor executor; private String debuginfoDirName = "debuginfo"; private String mockExecutable = "/usr/bin/mock"; - public void run() { - String mockCfg = factory.getMockConfig(arch); - File mockConfigFile = factory.getMockConfigFile(arch, branch); + private List preBuildCommands = new ArrayList(); - // prepare mock call - SystemCall mock = new SystemCall(); - if (arch != null) - mock.arg("setarch").arg(arch); - mock.arg(mockExecutable); - mock.arg("-v"); - mock.arg("--configdir=" + mockConfigFile.getAbsoluteFile().getParent()); - if (arch != null) - mock.arg("--arch=" + arch); - mock.arg("-r").arg(mockCfg); - mock.arg("--scm-enable"); - // mock.arg("--scm-option"); - // mock.arg("git_get='git clone " + (branch != null ? "-b " + branch : - // "") - // + " " + factory.getGitBaseUrl() + "/SCM_PKG SCM_PKG'"); - mock.arg("--scm-option").arg("package=" + rpmPackage); + public void run() { + if (!rpmFactory.isDeveloperInstance()) { + // clean/init + SystemCall mockClean = createBaseMockCall(); + mockClean.arg("--init"); + mockClean.run(); + } - mock.setLogCommand(true); - mock.setExecutor(executor); + // pre build commands + for (String preBuildCmd : preBuildCommands) { + SystemCall mockClean = createBaseMockCall(); + mockClean.arg("--chroot").arg(preBuildCmd); + mockClean.run(); + } + // actual build + SystemCall mockBuild = createBaseMockCall(); + mockBuild.arg("--scm-enable"); + mockBuild.arg("--scm-option").arg("package=" + rpmPackage); + mockBuild.arg("--no-clean"); // - // mock command execution // - mock.run(); + mockBuild.run(); // - File stagingDir = factory - .getWorkspaceDir(factory.getStagingWorkspace()); + // copy RPMs to target directories + File stagingDir = rpmFactory.getWorkspaceDir(rpmFactory + .getStagingWorkspace()); File srpmDir = new File(stagingDir, "SRPMS"); srpmDir.mkdirs(); File archDir = null; @@ -87,9 +85,8 @@ public class BuildInMock implements Runnable { debuginfoDir.mkdirs(); } - // copy RPMs Set reposToRecreate = new HashSet(); - File resultDir = factory.getResultDir(arch); + File resultDir = rpmFactory.getResultDir(arch); if (resultDir.exists()) rpms: for (File file : resultDir.listFiles()) { if (file.isDirectory()) @@ -105,7 +102,7 @@ public class BuildInMock implements Runnable { targetDirs = new File[] { archDir }; else if (file.getName().contains(".noarch.rpm")) { List dirs = new ArrayList(); - for (String arch : factory.getArchs()) + for (String arch : rpmFactory.getArchs()) dirs.add(new File(stagingDir, arch)); targetDirs = dirs.toArray(new File[dirs.size()]); } else if (file.getName().contains(".rpm")) @@ -139,7 +136,30 @@ public class BuildInMock implements Runnable { } // index staging workspace - factory.indexWorkspace(factory.getStagingWorkspace()); + rpmFactory.indexWorkspace(rpmFactory.getStagingWorkspace()); + } + + /** Creates a mock call with all the common options such as config file etc. */ + protected SystemCall createBaseMockCall() { + String mockCfg = rpmFactory.getMockConfig(arch); + File mockConfigFile = rpmFactory.getMockConfigFile(arch, branch); + + // prepare mock call + SystemCall mock = new SystemCall(); + + if (arch != null) + mock.arg("setarch").arg(arch); + mock.arg(mockExecutable); + mock.arg("-v"); + mock.arg("--configdir=" + mockConfigFile.getAbsoluteFile().getParent()); + if (arch != null) + mock.arg("--arch=" + arch); + mock.arg("-r").arg(mockCfg); + + mock.setLogCommand(true); + mock.setExecutor(executor); + + return mock; } protected void copyToDirs(File file, File[] dirs) { @@ -166,8 +186,8 @@ public class BuildInMock implements Runnable { this.branch = branch; } - public void setFactory(RpmFactory env) { - this.factory = env; + public void setRpmFactory(RpmFactory env) { + this.rpmFactory = env; } public void setExecutor(Executor executor) { @@ -178,4 +198,8 @@ public class BuildInMock implements Runnable { this.mockExecutable = mockExecutable; } + public void setPreBuildCommands(List preBuildCommands) { + this.preBuildCommands = preBuildCommands; + } + } \ No newline at end of file