extras-buildsys/server Config.py, 1.2, 1.3 UserInterface.py, 1.49, 1.50
Daniel Williams (dcbw)
fedora-extras-commits at redhat.com
Mon Aug 29 14:31:45 UTC 2005
- Previous message (by thread): extras-buildsys ChangeLog,1.103,1.104
- Next message (by thread): web/html/docs/yum generated-index.php, 1.3, 1.4 index.php, 1.3, 1.4 ln-legalnotice.php, 1.3, 1.4 sn-acknowledgements.php, 1.3, 1.4 sn-managing-packages.php, 1.3, 1.4 sn-searching-packages.php, 1.3, 1.4 sn-software-management-concepts.php, 1.3, 1.4 sn-software-management-tools.php, 1.3, 1.4 sn-updating-your-system.php, 1.3, 1.4 sn-using-repositories.php, 1.3, 1.4 sn-yum-installing-frompackage.php, 1.3, 1.4 sn-yum-maintenance.php, 1.3, 1.4 sn-yum-proxy-server.php, 1.3, 1.4
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: dcbw
Update of /cvs/fedora/extras-buildsys/server
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv31828/server
Modified Files:
Config.py UserInterface.py
Log Message:
2005-08-29 Dan Williams <dcbw at redhat.com>
* server/Config.py
- Ensure duplicate user_aliases and duplicate target strings
cannot be loaded
- Move user target alias resolution into the Config stuff to
keep it centralized
* server/UserInterface.py
- Move target user alias resolution to Config stuff
- Consolidate 'enqueue' and 'enqueue_srpm' commands into one
'enqueue' command to enqueue packages that detects what you
are trying to enqueue by looking at the source
- Work with new target dict stuff
Index: Config.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/Config.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Config.py 25 Aug 2005 18:15:14 -0000 1.2
+++ Config.py 29 Aug 2005 14:31:43 -0000 1.3
@@ -23,6 +23,10 @@
return "%s-%s-%s" % (distro, target, repo)
+class InvalidTargetException(Exception): pass
+class InvalidUserAliasException(Exception): pass
+
+
class ServerConfig(BaseConfig.BaseConfig):
def __init__(self, filename):
BaseConfig.BaseConfig.__init__(self, filename)
@@ -32,10 +36,38 @@
print "Config file did not exist. Writing %s with default values." % filename
self.save_default_config()
self._targets = []
+ self._target_strings = {}
+ self._target_aliases = {}
def targets(self):
return self._targets
+ def resolve_target_user_alias(self, user_alias):
+ try:
+ cfg = self._target_aliases[user_alias.lower()]
+ except KeyError:
+ raise InvalidUserAliasException("Invalid user alias.")
+
+ return cfg
+
+ def _add_target(self, target_cfg):
+ """ Return True if the target name is OK, False otherwise """
+ target_str = target_cfg.target_string()
+ if self._target_strings.has_key(target_str):
+ raise InvalidTargetException("Target name '%s' already exists." % target_str)
+ aliases = target_cfg.get_list("Aliases", "user_aliases")
+ for alias in aliases:
+ alias = alias.lower()
+ if self._target_aliases.has_key(alias):
+ target_str = self._target_aliases[alias].target_string()
+ raise InvalidTargetException("Target alias '%s' already exists in target %s." % (alias, target_str))
+
+ # We're OK, add it to our list
+ self._targets.append(target_cfg)
+ self._target_names[target_cfg.target_string()] = target_cfg
+ for alias in aliases:
+ self._target_aliases[alias.lower()] = target_cfg
+
def load_target_configs(self):
cfg_dir = self.get_str("Directories", "target_configs_dir")
if not os.path.exists(cfg_dir) or not os.access(cfg_dir, os.R_OK):
@@ -49,7 +81,10 @@
continue
cfg_file = os.path.join(cfg_dir, f)
target_cfg = TargetConfig(self, cfg_file)
- self._targets.append(target_cfg)
+ try:
+ self._add_target(target_cfg)
+ except InvalidTargetException, e:
+ print "Error: could not add target %s because: %s" % (f, e)
def save_default_config(self, filename=None):
self.add_section("General")
Index: UserInterface.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/UserInterface.py,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- UserInterface.py 25 Aug 2005 18:15:14 -0000 1.49
+++ UserInterface.py 29 Aug 2005 14:31:43 -0000 1.50
@@ -80,21 +80,6 @@
return True
return False
-class InvalidTargetError(exceptions.Exception): pass
-
-def resolve_target(target, cfg):
- for target_cfg in cfg.targets():
- target_name = target_cfg.get_str("General", "name")
- target_aliases = target_cfg.get_list("Aliases", "user_aliases")
- if target.lower() == target_name.lower():
- return target
- for alias in target_aliases:
- if target.lower() == alias.lower():
- return target
-
- raise InvalidTargetError()
-
-
class UserInterface:
"""
Base UserInterface class. NO AUTHENTICATION. Subclass this to provide some.
@@ -124,74 +109,58 @@
uid = int(req['uid'])
return uid
- def enqueue(self, email, package, cvs_tag, target, buildreq=None):
+ def enqueue(self, email, package, source, target_alias, buildreq=None):
""" Accept a job to build and stuff it into the job database """
- if self._cfg.get_bool("CVS", "use_cvs") == False:
- self.email_result(email, cvs_tag, "Error setting up build for %s on "\
- "%s: this server builds SRPMs, not CVS checkouts." % (cvs_tag, target))
- return (-1, "This build server is set up for building SRPMS only. "\
- "Use the 'enqueue_srpm' command instead.", -1)
-
- if not validate_package_name(package):
- self.email_result(email, cvs_tag, "Error setting up build for %s on "\
- "%s: Package name '%s' contained an illegal character. "\
- "Submit a bug report?" % (cvs_tag, target, package))
- return (-1, "The package name contained an illegal character.", -1)
-
- if not validate_cvs_tag(cvs_tag):
- self.email_result(email, cvs_tag, "Error setting up build for %s on "\
- "%s: The CVS tag '%s' contained an illegal character. "\
- "Submit a bug report?" % (package, target, cvs_tag))
- return (-1, "The CVS tag contained an illegal character.", -1)
-
- try:
- real_target = resolve_target(target, self._cfg)
- except InvalidTargetError:
- self.email_result(email, cvs_tag, "Error setting up build for %s on "\
- "%s: target does not exist." % (cvs_tag, target))
- return (-1, "This build server does not support the target %s." % target, -1)
+ 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:
- print "Request to enqueue '%s' tag '%s' for target '%s' (user '%s')" % (package, cvs_tag, real_target, email)
- req = self._bm.create_job_request(email, package, cvs_tag, real_target, buildreq, time.time())
- self._bm.enqueue(req)
- uid = self._wait_for_uid(req)
- return (0, "Success: package has been queued.", uid)
-
- def enqueue_srpm(self, email, package, srpm_file, target, buildreq=None):
- """ Accept a job to build from SRPM file and stuff it into the job database """
-
- if self._cfg.get_bool("CVS", "use_cvs") == True:
- self.email_result(email, srpm_file, "Error setting up build for %s on "\
- "%s: this server builds CVS checkouts, not SRPMS." % (srpm_file, target))
- return (-1, "This build server is set up for building from CVS. Use the 'enqueue' command instead.", -1)
+ 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)
+
+ # We limit the database field to 255 chars
+ if len(source) > 255:
+ self.email_result(email, source, "Error setting up build for %s on "\
+ "%s: try using a shorter path to the SRPM (< 255 chars)." % (source, target_alias))
+ return (-1, "Pathname to SRPM is limited to 255 characters.", -1)
+
+ srpm_file = os.path.abspath(source)
+ if not srpm_file or not os.access(srpm_file, os.R_OK):
+ 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)
if not validate_package_name(package):
- self.email_result(email, srpm_file, "Error setting up build for %s on "\
- "%s: Package name '%s' contained an illegal character. Submit a bug report?" % (package, target, package))
+ self.email_result(email, source, "Error setting up build for %s on "\
+ "%s: Package name '%s' contained an illegal character. "\
+ "Submit a bug report?" % (source, target_alias, package))
return (-1, "The package name contained an illegal character.", -1)
- # We limit the database field to 255 chars
- if len(srpm_file) > 255:
- self.email_result(email, srpm_file, "Error setting up build for %s on "\
- "%s: try using a shorter path to the SRPM (< 255 chars)." % (srpm_file, target))
- return (-1, "Pathname to SRPM is limited to 255 characters.", -1)
-
- srpm_file = os.path.abspath(srpm_file)
- if not srpm_file or not os.access(srpm_file, os.R_OK):
- self.email_result(email, srpm_file, "Error setting up build for %s on "\
- "%s: The SRPM does not exist, or is not accessible. Remember to use absolute paths." % (srpm_file, target))
- return (-1, "SRPM does not exist or is not accessible, remember to use absolute paths.", -1)
-
try:
- real_target = resolve_target(target, self._cfg)
- except InvalidTargetError:
- self.email_result(email, srpm_file, "Error setting up build for %s on "\
- "%s: target does not exist." % (srpm_file, target))
- return (-1, "This build server does not support the target %s." % target, -1)
+ target_cfg = self._cfg.resolve_target_user_alias(target_alias)
+ except Config.InvalidUserAliasException, e:
+ self.email_result(email, source, "Error setting up build for %s on "\
+ "%s: target does not exist." % (source, target_alias))
+ return (-1, "This build server does not support the target %s." % target_alias, -1)
else:
- print "Request to enqueue '%s' file '%s' for target '%s' (user '%s')" % (package, srpm_file, real_target, email)
- req = self._bm.create_job_request(email, package, srpm_file, real_target, buildreq, time.time())
+ print "Request to enqueue '%s' tag '%s' for target '%s' (user '%s')" % (package, source, target_alias, email)
+ req = self._bm.create_job_request(email, package, source, target_cfg.target_dict(), buildreq, time.time())
self._bm.enqueue(req)
uid = self._wait_for_uid(req)
return (0, "Success: package has been queued.", uid)
@@ -232,7 +201,8 @@
def list_jobs(self, args_dict):
""" Query job information and return it to the user """
- sql = 'SELECT uid, username, package, cvs_tag, target, starttime, endtime, status, result FROM jobs WHERE '
+ sql = 'SELECT uid, username, package, cvs_tag, target_distro, target_target, ' \
+ 'target_repo, starttime, endtime, status, result FROM jobs WHERE '
sql_args = []
if args_dict.has_key('email') and args_dict['email']:
@@ -283,10 +253,12 @@
if args_dict.has_key('target') and args_dict['target']:
try:
- real_target = resolve_target(args_dict['target'], self._cfg)
- except InvalidTargetError:
- return (-1, "Error: Invalid job UID.", [])
- sql_args.append('target="%s"' % real_target)
+ target_cfg = self._cfg.resolve_target_user_alias(args_dict['target'])
+ except Config.InvalidUserAliasException:
+ return (-1, "Error: Invalid target.", [])
+ sql_args.append('target_distro="%s"' % target_cfg.distro())
+ sql_args.append('target_target="%s"' % target_cfg.target())
+ sql_args.append('target_repo="%s"' % target_cfg.repo())
if not len(sql_args):
return (-1, "Error: Invalid query.", [])
- Previous message (by thread): extras-buildsys ChangeLog,1.103,1.104
- Next message (by thread): web/html/docs/yum generated-index.php, 1.3, 1.4 index.php, 1.3, 1.4 ln-legalnotice.php, 1.3, 1.4 sn-acknowledgements.php, 1.3, 1.4 sn-managing-packages.php, 1.3, 1.4 sn-searching-packages.php, 1.3, 1.4 sn-software-management-concepts.php, 1.3, 1.4 sn-software-management-tools.php, 1.3, 1.4 sn-updating-your-system.php, 1.3, 1.4 sn-using-repositories.php, 1.3, 1.4 sn-yum-installing-frompackage.php, 1.3, 1.4 sn-yum-maintenance.php, 1.3, 1.4 sn-yum-proxy-server.php, 1.3, 1.4
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list