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=11b772be9eadafc72d7a570d1dd6b0570b99845d;hb=f2017c32033b4b96469b075d6872a6d379652dfb;hp=a085a9d085792c52cb52f7556f0971f26ecea15e;hpb=91bba941484fdf89d8f884347c307b1efc2c34a3;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 a085a9d08..11b772be9 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 @@ -30,111 +30,96 @@ import org.apache.commons.logging.LogFactory; import org.argeo.slc.SlcException; import org.argeo.slc.core.execution.tasks.SystemCall; -/** Rebuild an SRPM in mock. (Historical) Replaces the build-mock.sh script. */ +/** Build an RPM in mock. */ public class BuildInMock implements Runnable { private final static Log log = LogFactory.getLog(BuildInMock.class); - - /** Mock flavour provided by the EPEL repository */ - public final static String EPEL = "EPEL"; - /** Mock flavour provided by CentOS until v5 */ - public final static String CENTOS = "CENTOS"; - - public final static String NOARCH = "noarch"; - - private String mockVar = "/var/lib/mock"; - - private String mockFlavour = EPEL; - private String mockConfig = null; - - private String repository; - private String release = null; - private String level = null; - private String arch = NOARCH; + private final static String NOARCH = "noarch"; private String rpmPackage = null; + private String branch = null; + private String arch = NOARCH; - private Boolean mkdirs = true; - - private RpmBuildEnvironment buildEnvironment; + private RpmFactory factory; private Executor executor; private String debuginfoDirName = "debuginfo"; + private String mockExecutable = "/usr/bin/mock"; public void run() { - // TODO check if caller is in mock group - - String cfgId = repository + "-" + release + "-" + arch; - String cfg = mockConfig != null ? mockConfig : "slc/" + cfgId; + 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("mock"); - if (mockFlavour.equals(EPEL)) - mock.arg("-v"); - else if (mockFlavour.equals(CENTOS)) - mock.arg("--debug"); + mock.arg(mockExecutable); + mock.arg("-v"); + mock.arg("--configdir=" + mockConfigFile.getAbsoluteFile().getParent()); if (arch != null) mock.arg("--arch=" + arch); - mock.arg("-r").arg(cfg); - + 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); mock.setLogCommand(true); + mock.setExecutor(executor); + // // mock command execution - mock.setExecutor(executor); + // mock.run(); + // - // File repoDir = new File(buildEnvironment.getStagingBase() + "/" - // + repository + "/" + level + "/" + release); - File repoDir = new File(buildEnvironment.getStagingBase() + "/" - + repository + "-" + release + "-staging"); - File srpmDir = new File(repoDir, "SRPMS"); - if (mkdirs) - srpmDir.mkdirs(); + File stagingDir = factory + .getWorkspaceDir(factory.getStagingWorkspace()); + File srpmDir = new File(stagingDir, "SRPMS"); + srpmDir.mkdirs(); File archDir = null; File debuginfoDir = null; if (!arch.equals(NOARCH)) { - archDir = new File(repoDir, arch); + archDir = new File(stagingDir, arch); debuginfoDir = new File(archDir, debuginfoDirName); debuginfoDir.mkdirs(); } // copy RPMs Set reposToRecreate = new HashSet(); - File resultDir = new File(mockVar + "/" + cfgId + "/result"); - rpms: for (File file : resultDir.listFiles()) { - if (file.isDirectory()) - continue rpms; - - File[] targetDirs; - if (file.getName().contains(".src.rpm")) - targetDirs = new File[] { srpmDir }; - else if (file.getName().contains("-debuginfo-")) - targetDirs = new File[] { debuginfoDir }; - else if (!arch.equals(NOARCH) - && file.getName().contains("." + arch + ".rpm")) - targetDirs = new File[] { archDir }; - else if (file.getName().contains(".noarch.rpm")) { - List dirs = new ArrayList(); - for (String arch : buildEnvironment.getArchs()) - dirs.add(new File(repoDir, arch)); - targetDirs = dirs.toArray(new File[dirs.size()]); - } else if (file.getName().contains(".rpm")) - throw new SlcException("Don't know where to copy " + file); - else { - if (log.isTraceEnabled()) - log.trace("Skip " + file); - continue rpms; + File resultDir = factory.getResultDir(arch); + if (resultDir.exists()) + rpms: for (File file : resultDir.listFiles()) { + if (file.isDirectory()) + continue rpms; + + File[] targetDirs; + if (file.getName().contains(".src.rpm")) + targetDirs = new File[] { srpmDir }; + else if (file.getName().contains("-debuginfo-")) + targetDirs = new File[] { debuginfoDir }; + else if (!arch.equals(NOARCH) + && file.getName().contains("." + arch + ".rpm")) + targetDirs = new File[] { archDir }; + else if (file.getName().contains(".noarch.rpm")) { + List dirs = new ArrayList(); + for (String arch : factory.getArchs()) + dirs.add(new File(stagingDir, arch)); + targetDirs = dirs.toArray(new File[dirs.size()]); + } else if (file.getName().contains(".rpm")) + throw new SlcException("Don't know where to copy " + file); + else { + if (log.isTraceEnabled()) + log.trace("Skip " + file); + continue rpms; + } + + reposToRecreate.addAll(Arrays.asList(targetDirs)); + copyToDirs(file, targetDirs); } - reposToRecreate.addAll(Arrays.asList(targetDirs)); - copyToDirs(file, targetDirs); - } - // recreate changed repos for (File repoToRecreate : reposToRecreate) { SystemCall createrepo = new SystemCall(); @@ -152,6 +137,9 @@ public class BuildInMock implements Runnable { createrepo.run(); log.info("Updated repo " + repoToRecreate); } + + // index staging workspace + factory.indexWorkspace(factory.getStagingWorkspace()); } protected void copyToDirs(File file, File[] dirs) { @@ -166,26 +154,6 @@ public class BuildInMock implements Runnable { } } - public void setMockFlavour(String mockFlavour) { - this.mockFlavour = mockFlavour; - } - - public void setMockConfig(String mockConfig) { - this.mockConfig = mockConfig; - } - - public void setRepository(String repo) { - this.repository = repo; - } - - public void setRelease(String release) { - this.release = release; - } - - public void setLevel(String level) { - this.level = level; - } - public void setArch(String arch) { this.arch = arch; } @@ -194,20 +162,20 @@ public class BuildInMock implements Runnable { this.rpmPackage = rpmPackage; } - public void setMockVar(String mockVar) { - this.mockVar = mockVar; + public void setBranch(String branch) { + this.branch = branch; } - public void setMkdirs(Boolean mkdirs) { - this.mkdirs = mkdirs; - } - - public void setBuildEnvironment(RpmBuildEnvironment buildEnvironment) { - this.buildEnvironment = buildEnvironment; + public void setFactory(RpmFactory env) { + this.factory = env; } public void setExecutor(Executor executor) { this.executor = executor; } -} + public void setMockExecutable(String mockExecutable) { + this.mockExecutable = mockExecutable; + } + +} \ No newline at end of file