extras-buildsys/server CONFIG.py, 1.19, 1.20 UserInterface.py, 1.24, 1.25
Daniel Williams (dcbw)
fedora-extras-commits at redhat.com
Fri Jul 22 02:54:09 UTC 2005
Author: dcbw
Update of /cvs/fedora/extras-buildsys/server
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv30683/server
Modified Files:
CONFIG.py UserInterface.py
Log Message:
2005-07-21 Dan Williams <dcbw at redhat.com>
* builder/CONFIG.py
builder/builder.py
- You must now specify a target/arch -> mock buildroot name
mapping in the config file
* server/UserInterface.py
server/CONFIG.py
- Add client target alias support so people don't have to
know the exact target name
- Add rowlimit support to job listing
Index: CONFIG.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/CONFIG.py,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- CONFIG.py 16 Jul 2005 15:47:43 -0000 1.19
+++ CONFIG.py 22 Jul 2005 02:54:07 -0000 1.20
@@ -58,11 +58,28 @@
config_opts['targets'] = { 'development' : ['i386'] }
+# Client Target Map
+#
+# If people don't want to type the whole target name exactly, then add some
+# aliases here. The target which the server receives from the client when
+# it enqueues a package is run through this alias list first to determine
+# the final target name. The aliases are NOT case-sensitive.
+#
+# Mapping - our_target: client_alias
+#
+# ex: { 'development' : ['devel'], '5' : ['fc-5', 'fc5'] }
+
+config_opts['client_target_map'] = { 'development' : ['devel'] }
+
+
+
# If you're using CVS building, sometimes the CVS directory layout won't match
# the targets we've defined in config_opts['target']. Add aliases for them
-# here, like "{ 'devel': 'development', '4': 'FC-4' }
+# here.
#
# Mapping - our_target: cvs_target
+#
+# ex: { 'development': 'devel', '4': 'FC-4' }
config_opts['cvs_target_map'] = {}
Index: UserInterface.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/UserInterface.py,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- UserInterface.py 20 Jul 2005 19:56:41 -0000 1.24
+++ UserInterface.py 22 Jul 2005 02:54:07 -0000 1.25
@@ -22,6 +22,7 @@
import sys
import os
import copy
+import exceptions
import BuildMaster
import PackageJob
from plague import AuthedXMLRPCServer
@@ -72,11 +73,32 @@
return None
return uid
-def validate_target(target):
+
+class InvalidTargetError(exceptions.Exception): pass
+
+def resolve_target(target):
+ client_target_map = config_opts['client_target_map']
+
+ # Resolve aliases first
+ resolved_target = target
+ done = True
+ for master_target in client_target_map.keys():
+ for alias in client_target_map[master_target]:
+ if resolved_target.lower() == alias.lower():
+ resolved_target = master_target
+ done = True
+ break
+ if done:
+ break
+
+ # Make sure we actually build the resolved target
target_dict = config_opts['targets']
- if target in target_dict.keys():
- return True
- return False
+ for master_target in target_dict.keys():
+ if resolved_target.lower() == master_target.lower():
+ return master_target
+
+ raise InvalidTargetError()
+
class UserInterface:
@@ -97,20 +119,16 @@
"%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.")
- print "Request to enqueue '%s' tag '%s' for target '%s' (user '%s')" \
- % (package, cvs_tag, target, email)
- targets = config_opts['targets']
- jobid = -1
- if not targets.has_key(target):
- print "Error setting up build for %s on %s: target does not exist."\
- % (cvs_tag, target)
+ try:
+ real_target = resolve_target(target)
+ except InvalidTargetError:
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)
else:
- self._bm.enqueue(email, package, cvs_tag, target, buildreq, time.time())
- return (0, "Success: package has been queued.")
-
+ print "Request to enqueue '%s' tag '%s' for target '%s' (user '%s')" % (package, cvs_tag, real_target, email)
+ self._bm.enqueue(email, package, cvs_tag, real_target, buildreq, time.time())
+ return (0, "Success: package has been queued.")
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 """
@@ -132,19 +150,16 @@
"%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.")
- print "Request to enqueue '%s' file '%s' for target '%s' (user '%s')" \
- % (package, srpm_file, target, email)
- targets = config_opts['targets']
- jobid = -1
- if not targets.has_key(target):
- print "Error setting up build for %s on %s: target does not exist."\
- % (srpm_file, target)
+ try:
+ real_target = resolve_target(target)
+ except InvalidTargetError:
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)
else:
- self._bm.enqueue_srpm(email, package, srpm_file, target, buildreq, time.time())
- return (0, "Success: package has been queued.")
+ print "Request to enqueue '%s' file '%s' for target '%s' (user '%s')" % (package, srpm_file, real_target, email)
+ self._bm.enqueue_srpm(email, package, srpm_file, real_target, buildreq, time.time())
+ return (0, "Success: package has been queued.")
def _kill_job(self, email, job, jobid):
if not job:
@@ -192,9 +207,11 @@
sql_args.append('uid<%d' % uid)
if args_dict.has_key('target') and args_dict['target']:
- if not validate_target(args_dict['target']):
+ try:
+ real_target = resolve_target(args_dict['target'])
+ except InvalidTargetError:
return (-1, "Error: Invalid job UID.", [])
- sql_args.append('target="%s"' % args_dict['target'])
+ sql_args.append('target="%s"' % real_target)
if not len(sql_args):
return (-1, "Error: Invalid query.", [])
@@ -207,6 +224,12 @@
sql = sql + " AND "
i = i + 1
+ # Deal with max # records
+ if args_dict.has_key('maxrows') and args_dict['maxrows']:
+ if not validate_uid(args_dict['maxrows']):
+ return (-1, "Error: Invalid max rows number.", [])
+ sql = sql + " LIMIT %d" % args_dict['maxrows']
+
# Run the query for the job
try:
dbcx, curs = get_dbcx()
More information about the fedora-extras-commits
mailing list