257 lines
12 KiB
Diff
257 lines
12 KiB
Diff
diff -up plague-0.4.5.8/server/PackageJob.py.scm-updates plague-0.4.5.8/server/PackageJob.py
|
|
--- plague-0.4.5.8/server/PackageJob.py.scm-updates 2008-09-21 07:38:41.000000000 -0600
|
|
+++ plague-0.4.5.8/server/PackageJob.py 2011-04-09 09:56:01.290335772 -0600
|
|
@@ -37,6 +37,7 @@ from plague import ArchUtils
|
|
from plague import DebugUtils
|
|
|
|
CVS_CMD = "/usr/bin/cvs"
|
|
+GIT_CMD = "/usr/bin/git"
|
|
MAKE_CMD = "/usr/bin/make"
|
|
|
|
DEBUG = False
|
|
@@ -134,7 +135,7 @@ class PackageJob:
|
|
self.username = username
|
|
self.starttime = time.time()
|
|
self.endtime = 0
|
|
- self.use_cvs = self._server_cfg.get_bool("CVS", "use_cvs")
|
|
+
|
|
self._source = source
|
|
self.result_dir = None
|
|
self.srpm_path = None
|
|
@@ -150,7 +151,7 @@ class PackageJob:
|
|
"server_work_dir"), "srpm_http_dir")
|
|
|
|
first_stage = 'initialize'
|
|
- if self.use_cvs == False:
|
|
+ if source.endswith(".src.rpm") or source.find("/") != -1:
|
|
first_stage = 'prep'
|
|
pjc = PackageJobController(self, first_stage, 'waiting')
|
|
pjc.start()
|
|
@@ -289,54 +290,96 @@ class PackageJob:
|
|
dirname = "%s-%s-%d" % (self.uid, self._source, time.time())
|
|
tmpdir = self._server_cfg.get_str("Directories", "tmpdir")
|
|
self.checkout_tmpdir = os.path.join(tmpdir, dirname)
|
|
- if os.path.exists(self.checkout_tmpdir):
|
|
- shutil.rmtree(self.checkout_tmpdir, ignore_errors=True)
|
|
+ if not self._source.endswith(".src.rpm") and self._source.find("/") == -1:
|
|
+ if os.path.exists(self.checkout_tmpdir):
|
|
+ shutil.rmtree(self.checkout_tmpdir, ignore_errors=True)
|
|
os.makedirs(self.checkout_tmpdir)
|
|
|
|
- # Set up CVS environment
|
|
- env_args = "CVSROOT='%s'" % self._target_cfg.get_str("CVS", "cvs_root")
|
|
- cvs_rsh = self._target_cfg.get_str("CVS", "cvs_rsh")
|
|
- if len(cvs_rsh) > 0:
|
|
- env_args = "%s CVS_RSH='%s'" % (env_args, cvs_rsh)
|
|
-
|
|
- # Checkout the module
|
|
- cmd = 'umask 0022; cd %s; %s %s co -r %s %s' % (self.checkout_tmpdir, env_args, CVS_CMD,
|
|
- self._source, self.package)
|
|
- debugprint("%d: Running %s" % (self.uid, cmd))
|
|
- s, o = commands.getstatusoutput(cmd)
|
|
- if s != 0:
|
|
- err_msg = "Error: could not check out %s from %s - output was:\n\n" \
|
|
- "%s" % (self._source, self._target_str, o)
|
|
- else:
|
|
- # Just in case the 'common' directory didn't come along for the ride,
|
|
- # get it from CVS
|
|
- pkg_path = os.path.join(self.checkout_tmpdir, self.package)
|
|
- if not os.path.exists(os.path.join(pkg_path, "common")):
|
|
- cmd = 'cd %s; %s %s co common' % (pkg_path, env_args, CVS_CMD)
|
|
+ if self._target_cfg.has_option("SCM", "cvs_root"):
|
|
+ # Set up CVS environment
|
|
+ env_args = "CVSROOT='%s'" % self._target_cfg.get_str("SCM", "cvs_root")
|
|
+ cvs_rsh = self._target_cfg.get_str("SCM", "cvs_rsh")
|
|
+ if len(cvs_rsh) > 0:
|
|
+ env_args = "%s CVS_RSH='%s'" % (env_args, cvs_rsh)
|
|
+
|
|
+ # Checkout the module
|
|
+ cmd = 'umask 0022; cd %s; %s %s co -r %s %s' % (self.checkout_tmpdir, env_args, CVS_CMD,
|
|
+ self._source, self.package)
|
|
+ debugprint("%d: Running %s" % (self.uid, cmd))
|
|
+ s, o = commands.getstatusoutput(cmd)
|
|
+ if s != 0:
|
|
+ err_msg = "Error: could not check out %s from %s - output was:\n\n" \
|
|
+ "%s" % (self._source, self._target_str, o)
|
|
+ else:
|
|
+ # Just in case the 'common' directory didn't come along for the ride,
|
|
+ # get it from CVS
|
|
+ pkg_path = os.path.join(self.checkout_tmpdir, self.package)
|
|
+ if not os.path.exists(os.path.join(pkg_path, "common")):
|
|
+ cmd = 'cd %s; %s %s co common' % (pkg_path, env_args, CVS_CMD)
|
|
+ debugprint("%d: Running %s" % (self.uid, cmd))
|
|
+ s, o = commands.getstatusoutput(cmd)
|
|
+ if s != 0:
|
|
+ err_msg = "Error: could not check out common directory - " \
|
|
+ "output was:\n\n%s" % (self._source, self._target_str, o)
|
|
+
|
|
+ self.bm.notify_checkout_done(self)
|
|
+
|
|
+ if err_msg:
|
|
+ raise PrepError(err_msg)
|
|
+
|
|
+ elif self._target_cfg.has_option("SCM", "git_root"):
|
|
+ gitroot = self._target_cfg.get_str("SCM", "git_root")
|
|
+ gitrepo = "%s/%s" % (gitroot, self.package)
|
|
+ commonrepo = os.path.dirname(gitroot) + '/common'
|
|
+ self.checkout_path = os.path.basename(self.package)
|
|
+ if self.package.endswith('.git'):
|
|
+ self.checkout_path = os.path.basename(self.package[:-4])
|
|
+ commonrepo = os.path.dirname(gitroot) + '/common.git'
|
|
+ sourcedir = '%s/%s' % (self.checkout_tmpdir, self.checkout_path)
|
|
+
|
|
+ # Checkout the module
|
|
+ cmd = 'cd %s; umask 0022; %s clone -n %s %s' % (self.checkout_tmpdir,
|
|
+ GIT_CMD, gitrepo, self.checkout_path)
|
|
+ debugprint("%d: Running %s" % (self.uid, cmd))
|
|
+ s, o = commands.getstatusoutput(cmd)
|
|
+ if s == 0:
|
|
+ cmd = 'cd %s; umask 0022; %s reset --hard %s' % (sourcedir, GIT_CMD, self._source)
|
|
debugprint("%d: Running %s" % (self.uid, cmd))
|
|
s, o = commands.getstatusoutput(cmd)
|
|
- if s != 0:
|
|
- err_msg = "Error: could not check out common directory - " \
|
|
- "output was:\n\n%s" % (self._source, self._target_str, o)
|
|
-
|
|
- self.bm.notify_checkout_done(self)
|
|
-
|
|
- if err_msg:
|
|
- raise PrepError(err_msg)
|
|
-
|
|
+
|
|
+ if s != 0:
|
|
+ err_msg = "Error: could not check out %s from %s - output was:\n\n" \
|
|
+ "%s" % (self._source, self._target_str, o)
|
|
+
|
|
+ self.bm.notify_checkout_done(self)
|
|
+
|
|
+ if err_msg:
|
|
+ raise PrepError(err_msg)
|
|
+ else:
|
|
+ self.bm.notify_checkout_done(self)
|
|
+
|
|
+ raise PrepError( "Error: could not check out %s from %s\n" %
|
|
+ (self._source, self._target_str) )
|
|
+
|
|
self._set_cur_stage('make_srpm')
|
|
return False
|
|
|
|
def _stage_make_srpm(self):
|
|
- # Map our target to the CVS target alias, since CVS may have
|
|
+ # Map our target to the SCM target alias, since SCM may have
|
|
# different target names than we expose
|
|
- cvs_target = self._target_dict['target']
|
|
- cvs_alias = self._target_cfg.get_str("Aliases", "cvs_alias")
|
|
- if len(cvs_alias) > 0:
|
|
- cvs_target = cvs_alias
|
|
+ srpm_dir = None
|
|
+ if self._target_cfg.has_option("SCM", "cvs_root"):
|
|
+ cvs_target = self._target_dict['target']
|
|
+ cvs_alias = self._target_cfg.get_str("Aliases", "cvs_alias")
|
|
+ if len(cvs_alias) > 0:
|
|
+ cvs_target = cvs_alias
|
|
+
|
|
+ self.srpm_path = None
|
|
+ srpm_dir = os.path.join(self.checkout_tmpdir, self.package, cvs_target)
|
|
+
|
|
+ elif self._target_cfg.has_option("SCM", "git_root"):
|
|
+ srpm_dir = os.path.join(self.checkout_tmpdir, self.checkout_path)
|
|
|
|
- self.srpm_path = None
|
|
- srpm_dir = os.path.join(self.checkout_tmpdir, self.package, cvs_target)
|
|
if not os.path.exists(srpm_dir):
|
|
msg = "Error: could not find checkout directory %s for %s. Sources probably don't exist for this target." % (srpm_dir, self._source)
|
|
raise PrepError(msg)
|
|
@@ -383,8 +426,8 @@ class PackageJob:
|
|
|
|
def _stage_prep(self):
|
|
|
|
- # In SRPM-only mode, cvs_tag is path to the SRPM to build
|
|
- if self.use_cvs == False:
|
|
+ # In SRPM-only mode, _source is path to the SRPM to build
|
|
+ if self._source.endswith(".src.rpm") or self._source.find("/") != -1:
|
|
self.srpm_path = self._source
|
|
|
|
# fail the job if we can't access the SRPM. Can happen during
|
|
@@ -425,9 +468,10 @@ class PackageJob:
|
|
shutil.copy(self.srpm_path, self.srpm_http_path)
|
|
self.srpm_path = None
|
|
|
|
- # Remove CVS checkout and make_srpm dirs
|
|
- if self.use_cvs == True:
|
|
- shutil.rmtree(self.checkout_tmpdir, ignore_errors=True)
|
|
+ # Remove SCM checkout and make_srpm dirs
|
|
+ if not self._source.endswith(".src.rpm") and self._source.find("/") == -1:
|
|
+ if os.path.exists(self.checkout_tmpdir):
|
|
+ shutil.rmtree(self.checkout_tmpdir, ignore_errors=True)
|
|
|
|
self._request_arch_jobs()
|
|
self._set_cur_stage('waiting')
|
|
@@ -554,8 +598,9 @@ class PackageJob:
|
|
self._event.wait()
|
|
self._event.clear()
|
|
except PrepError, e:
|
|
- if self.use_cvs == True:
|
|
- shutil.rmtree(self.checkout_tmpdir, ignore_errors=True)
|
|
+ if not self._source.endswith(".src.rpm") and self._source.find("/") == -1:
|
|
+ if os.path.exists(self.checkout_tmpdir):
|
|
+ shutil.rmtree(self.checkout_tmpdir, ignore_errors=True)
|
|
subj = 'Prep Error (Job %s): %s on %s' % (self.uid, self._source, self._target_str)
|
|
self.email_result(self.username, resultstring=e.msg, subject=subj)
|
|
self._stage_failed(e.msg)
|
|
diff -up plague-0.4.5.8/server/UserInterface.py.scm-updates plague-0.4.5.8/server/UserInterface.py
|
|
--- plague-0.4.5.8/server/UserInterface.py.scm-updates 2011-04-09 09:55:35.647857242 -0600
|
|
+++ plague-0.4.5.8/server/UserInterface.py 2011-04-09 09:56:01.294335535 -0600
|
|
@@ -58,7 +58,7 @@ def validate_package_name(name):
|
|
return False
|
|
return True
|
|
|
|
-def validate_cvs_tag(tag):
|
|
+def validate_scm_tag(tag):
|
|
safe_list = ['-', '_', '.', ':', '~', '[', ']', '+']
|
|
for c in tag:
|
|
if not (c in safe_list) and not c.isalnum():
|
|
@@ -117,28 +117,8 @@ class UserInterface:
|
|
def enqueue(self, email, package, source, target_alias, buildreq=None):
|
|
""" Accept a job to build and stuff it into the job database """
|
|
|
|
- is_cvs_tag = True
|
|
- if source.endswith(".src.rpm") or source.find("/") != -1:
|
|
- is_cvs_tag = False
|
|
-
|
|
# Do source-type specifc validation
|
|
- if is_cvs_tag:
|
|
- if self._cfg.get_bool("CVS", "use_cvs") == False:
|
|
- self.email_result(email, source, "Error setting up build for %s on "\
|
|
- "%s: this server builds SRPMs, not CVS checkouts." % (source, target_alias))
|
|
- return (-1, "This build server is set up for building SRPMS only. ", -1)
|
|
-
|
|
- if not validate_cvs_tag(source):
|
|
- self.email_result(email, source, "Error setting up build for %s on "\
|
|
- "%s: The CVS tag '%s' contained an illegal character. "\
|
|
- "Submit a bug report?" % (package, target_alias, cvs_tag))
|
|
- return (-1, "The CVS tag contained an illegal character.", -1)
|
|
- else:
|
|
- if self._cfg.get_bool("CVS", "use_cvs") == True:
|
|
- self.email_result(email, source, "Error setting up build for %s on "\
|
|
- "%s: this server builds CVS checkouts, not SRPMs." % (source, target_alias))
|
|
- return (-1, "This build server is set up for building CVS checkouts only. ", -1)
|
|
-
|
|
+ if source.endswith(".src.rpm") or source.find("/") != -1:
|
|
# We limit the database field to 255 chars
|
|
if len(source) > 255:
|
|
self.email_result(email, source, "Error setting up build for %s on "\
|
|
@@ -150,6 +130,12 @@ class UserInterface:
|
|
self.email_result(email, source, "Error setting up build for %s on "\
|
|
"%s: The SRPM does not exist, or is not accessible. Remember to use absolute paths." % (source, target_alias))
|
|
return (-1, "SRPM does not exist or is not accessible, remember to use absolute paths.", -1)
|
|
+ else:
|
|
+ if not validate_scm_tag(source):
|
|
+ self.email_result(email, source, "Error setting up build for %s on "\
|
|
+ "%s: The SCM tag '%s' contained an illegal character. "\
|
|
+ "Submit a bug report?" % (package, target_alias, scm_tag))
|
|
+ return (-1, "The SCM tag contained an illegal character.", -1)
|
|
|
|
if not validate_package_name(package):
|
|
self.email_result(email, source, "Error setting up build for %s on "\
|