private final static String NOARCH = "noarch";
private String rpmPackage = null;
+ private String branch = null;
private String arch = NOARCH;
- private RpmBuildEnvironment buildEnvironment;
+ private RpmFactory rpmFactory;
private Executor executor;
private String debuginfoDirName = "debuginfo";
+ private String mockExecutable = "/usr/bin/mock";
- public void run() {
- String mockCfg = buildEnvironment.getMockConfig(arch);
- File mockConfigFile = buildEnvironment.getMockConfigFile(arch);
+ private List<String> preBuildCommands = new ArrayList<String>();
- // prepare mock call
- SystemCall mock = new SystemCall();
- if (arch != null)
- mock.arg("setarch").arg(arch);
- mock.arg("mock");
- 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").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 = buildEnvironment.getStagingDir();
+ // copy RPMs to target directories
+ File stagingDir = rpmFactory.getWorkspaceDir(rpmFactory
+ .getStagingWorkspace());
File srpmDir = new File(stagingDir, "SRPMS");
srpmDir.mkdirs();
File archDir = null;
debuginfoDir.mkdirs();
}
- // copy RPMs
Set<File> reposToRecreate = new HashSet<File>();
- File resultDir = buildEnvironment.getResultDir(arch);
- 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(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;
+ File resultDir = rpmFactory.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 : rpmFactory.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
+ 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) {
this.rpmPackage = rpmPackage;
}
- public void setBuildEnvironment(RpmBuildEnvironment buildEnvironment) {
- this.buildEnvironment = buildEnvironment;
+ public void setBranch(String branch) {
+ this.branch = branch;
+ }
+
+ public void setRpmFactory(RpmFactory env) {
+ this.rpmFactory = env;
}
public void setExecutor(Executor executor) {
this.executor = executor;
}
+
+ public void setMockExecutable(String mockExecutable) {
+ this.mockExecutable = mockExecutable;
+ }
+
+ public void setPreBuildCommands(List<String> preBuildCommands) {
+ this.preBuildCommands = preBuildCommands;
+ }
+
}
\ No newline at end of file