From 2ecf3712543d08da3dc20a16567d034ea2ac320a Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 25 Jun 2013 11:46:41 +0000 Subject: [PATCH] Make build in mock less monolithic git-svn-id: https://svn.argeo.org/slc/trunk@6365 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../slc/rpmfactory/core/BuildInMock.java | 72 ++++++++++++------- .../argeo/slc/rpmfactory/core/RpmFactory.java | 4 ++ 2 files changed, 52 insertions(+), 24 deletions(-) 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..3b4d84a77 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 @@ -45,36 +45,34 @@ public class BuildInMock implements Runnable { 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 (!factory.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(); // + // copy RPMs to target directories File stagingDir = factory .getWorkspaceDir(factory.getStagingWorkspace()); File srpmDir = new File(stagingDir, "SRPMS"); @@ -87,7 +85,6 @@ public class BuildInMock implements Runnable { debuginfoDir.mkdirs(); } - // copy RPMs Set reposToRecreate = new HashSet(); File resultDir = factory.getResultDir(arch); if (resultDir.exists()) @@ -142,6 +139,29 @@ public class BuildInMock implements Runnable { factory.indexWorkspace(factory.getStagingWorkspace()); } + /** Creates a mock call with all the common options such as config file etc. */ + protected SystemCall createBaseMockCall() { + String mockCfg = factory.getMockConfig(arch); + File mockConfigFile = factory.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) { for (File dir : dirs) { try { @@ -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 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/RpmFactory.java index 95e697703..0a9115395 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/RpmFactory.java @@ -347,6 +347,10 @@ public class RpmFactory { } } + public Boolean isDeveloperInstance() { + return gitDevBaseUrl != null; + } + /** Write (topdir)/rpmmacros and (topdir)/rpmrc */ public void writeRpmbuildConfigFiles(File topdir) { writeRpmbuildConfigFiles(topdir, new File(topdir, "rpmmacros"), -- 2.39.5