]>
git.argeo.org Git - gpl/argeo-jcr.git/blob - org.argeo.slc.rpmfactory/src/org/argeo/slc/rpmfactory/core/ReleaseStaging.java
78f7af337362e1c646fd20aafb7fc4cb604fe809
1 package org
.argeo
.slc
.rpmfactory
.core
;
4 import java
.io
.IOException
;
5 import java
.util
.ArrayList
;
8 import org
.apache
.commons
.exec
.Executor
;
9 import org
.apache
.commons
.io
.FileUtils
;
10 import org
.argeo
.api
.cms
.CmsLog
;
11 import org
.argeo
.slc
.SlcException
;
12 import org
.argeo
.slc
.rpmfactory
.RpmFactory
;
13 import org
.argeo
.slc
.runtime
.tasks
.SystemCall
;
15 /** Releases the content of staging to a public repository. */
16 public class ReleaseStaging
implements Runnable
{
17 private final static CmsLog log
= CmsLog
.getLog(ReleaseStaging
.class);
19 private RpmFactory rpmFactory
;
20 private Executor executor
;
22 private String debuginfoDirName
= "debuginfo";
26 String sourceWorkspace
= rpmFactory
.getStagingWorkspace();
27 File sourceRepoDir
= rpmFactory
.getWorkspaceDir(sourceWorkspace
);
28 String targetWorkspace
= rpmFactory
.getTestingWorkspace() != null ? rpmFactory
29 .getTestingWorkspace() : rpmFactory
.getStableWorkspace();
30 File targetRepoDir
= rpmFactory
.getWorkspaceDir(targetWorkspace
);
31 List
<File
> reposToRecreate
= new ArrayList
<File
>();
33 stagingChildren
: for (File dir
: sourceRepoDir
.listFiles()) {
34 if (!dir
.isDirectory())
35 continue stagingChildren
;
36 if (dir
.getName().equals("lost+found"))
37 continue stagingChildren
;
39 File targetDir
= new File(targetRepoDir
, dir
.getName());
41 FileUtils
.copyDirectory(dir
, targetDir
);
42 if (log
.isDebugEnabled())
43 log
.debug(dir
+ " => " + targetDir
);
44 } catch (IOException e
) {
45 throw new SlcException(sourceRepoDir
46 + " could not be copied properly, check it manually."
47 + " Metadata have NOT been updated.", e
);
50 reposToRecreate
.add(dir
);
51 reposToRecreate
.add(targetDir
);
52 File debugInfoDir
= new File(dir
, debuginfoDirName
);
53 if (debugInfoDir
.exists())
54 reposToRecreate
.add(debugInfoDir
);
55 File targetDebugInfoDir
= new File(targetDir
, debuginfoDirName
);
56 if (targetDebugInfoDir
.exists())
57 reposToRecreate
.add(targetDebugInfoDir
);
62 for (File dir
: sourceRepoDir
.listFiles()) {
64 if (dir
.getName().equals("lost+found"))
66 if (dir
.isDirectory())
67 FileUtils
.deleteDirectory(dir
);
68 } catch (IOException e
) {
69 log
.error("Could not delete " + dir
+ ". " + e
);
73 // recreate changed repos
74 for (File repoToRecreate
: reposToRecreate
) {
75 repoToRecreate
.mkdirs();
76 SystemCall createrepo
= new SystemCall();
77 createrepo
.arg("createrepo");
81 if (!repoToRecreate
.getName().equals(debuginfoDirName
))
82 createrepo
.arg("-x").arg(debuginfoDirName
+ "/*");
85 createrepo
.arg(repoToRecreate
.getAbsolutePath());
87 createrepo
.setExecutor(executor
);
89 log
.info("Updated repo " + repoToRecreate
);
92 rpmFactory
.indexWorkspace(sourceWorkspace
);
93 rpmFactory
.indexWorkspace(targetWorkspace
);
96 public void setRpmFactory(RpmFactory rpmFactory
) {
97 this.rpmFactory
= rpmFactory
;
100 public void setExecutor(Executor executor
) {
101 this.executor
= executor
;
104 public void setDebuginfoDirName(String debuginfoDirName
) {
105 this.debuginfoDirName
= debuginfoDirName
;