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<File> reposToRecreate = new HashSet<File>();
- 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<File> dirs = new ArrayList<File>();
- 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<File> dirs = new ArrayList<File>();
+ 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();
createrepo.run();
log.info("Updated repo " + repoToRecreate);
}
+
+ // index staging workspace
+ factory.indexWorkspace(factory.getStagingWorkspace());
}
protected void copyToDirs(File file, File[] dirs) {
}
}
- 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;
}
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